本文档适合3节点的Hadoop 高可用(HA:High Available)测试集群集群的搭建。
在上一篇文章中《Hadoop3.x入门-搭建3节点分布式集群》只是一个简单的测试的分布式集群,并不是高可用的,也就是说当namenode或者resourcemanager节点挂掉,hadoop的功能就无法使用了,所以无法应用到生产环境中。
本文在上一篇的基础上修改一些配置,将Hadoop集群改造为高可用集群。如果用上一篇文章搭建的集群,首先关闭集群所有进程,删除$HADOOP_HOME/data目录,以防出一些问题。
jdk1.8,节点间免密(包括本地免密),关闭防火墙,关闭selinux,设置主机域名并配置到hosts文件中,修改Linux部署用户的最大进程数,修改Linux部署用户的打开最大文件数。
*以上步骤自行配置
实验环境在Centos7中进行,hadoop版本3.3.2,zookeeper版本3.5.9。
HDFS高可用需要服务: Zookeeper/NameNode/DataNode/JournalNode/ZKFC
Yarn高可用需要:Zookeeper/ResourceManager/NodeManager
主机名 | hd1.dev.local | hd2.dev.local | hd3.dev.local |
对应节点上的服务进程,集群部署好通过JPS即可查到对应进程名称 | QuorumPeerMain | QuorumPeerMain | QuorumPeerMain |
JournalNode | JournalNode | JournalNode | |
NameNode | NameNode | NameNode | |
DataNode | DataNode | DataNode | |
DFSZKFailoverController | DFSZKFailoverController | DFSZKFailoverController | |
ResourceManager | ResourceManager | ResourceManager | |
NodeManager | NodeManager | NodeManager | |
JobHistoryServer |
<configuration><!-- 指定NameNode的地址-单节点 --><!-- <property><name>fs.defaultFS</name><value>hdfs://hd1.dev.local:8020</value></property> --><!-- Namenode高可用配置-自定义集群名称,且不用指定端口号 --><property><name>fs.defaultFS</name><value>hdfs://hacluster</value></property><!-- 指定hadoop数据的存储目录 --><property><name&p.dir</name><value>/opt/module/hadoop-3.3.2/data</value></property><!-- 配置HDFS网页登录使用的静态用户为dev --><property><name>hadoop.http.staticuser.user</name><value>dev</value></property><!-- 配置ZKFC进程连接zookeeper的地址 --><property><name&keeper.quorum</name><value>hd1.dev.local:2181,hd2.dev.local:2181,hd3.dev.local:2181</value></property>
</configuration>
<configuration><!-- Namenode web端http访问地址-单节点配置--><!-- <property><name>dfs.namenode.http-address</name><value>hd1.dev.local:9870</value></property> --><!-- SecondaryNameNode web端http访问地址-单节点集群配置--><!-- <property><name>dfs.namenode.secondary.http-address</name><value>hd3.dev.local:9868</value></property> --><!-- Namenode 数据存储目录--><property><name>dfs.namenode.name.dir</name><value>file://${p.dir}/name</value></property><!-- Datanode 数据存储目录--><property><name>dfs.namenode.data.dir</name><value>file://${p.dir}/data</value></property><!-- journalnode 数据存储目录--><property><name>dfs.journalnode.edits.dir</name><value>${p.dir}/jn</value></property><!-- 指定集群逻辑名字为hacluster 与 core-site中保持一致 --><property><name>dfs.nameservices</name><value>hacluster</value></property><!-- 指定逻辑namenode的节点,自定义名称为nn1,2,3 --><property><name>dfs.ha.namenodes.hacluster</name><value>nn1,nn2,nn3</value></property><!-- 定义nn1的rpc通信地址 --><property><name>dfs.namenode.1</name><value>hd1.dev.local:8020</value></property><property><name>dfs.namenode.2</name><value>hd2.dev.local:8020</value></property><property><name>dfs.namenode.3</name><value>hd3.dev.local:8020</value></property><!-- 定义nn1的web页面的http地址 --><property><name>dfs.namenode.1</name><value>hd1.dev.local:9870</value></property><property><name>dfs.namenode.2</name><value>hd2.dev.local:9870</value></property><property><name>dfs.namenode.3</name><value>hd3.dev.local:9870</value></property><!-- 定义namenode元数据在journalnode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hd1.dev.local:8485;hd2.dev.local:8485;hd3.dev.local:8485/hacluster</value></property><!-- 访问代理类:访问hacluster时,client用于确定哪个NameNode为Active,将请求转发过去 --><property><name>dfs.client.failover.proxy.provider.hacluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制 --><property><name>dfs.hods</name><value>sshfence</value></property><!-- 配置隔离机制时需要的ssh密钥登录 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/dev/.ssh/id_rsa</value></property><!-- 启动namenode故障自动转移 --><property><name>dfs.abled</name><value>true</value></property></configuration>
将l和l复制到其他俩个节点上
zookeeper集群自行搭建
执行启动zk命令:
bin/zkServer.sh start
检查启动情况: jps ,每个节点包含QuorumPeerMain进程代表zk集群启动成功或者每个节点执行:bin/zkServer.sh status,查看是否有leader节点。
hdfs --daemon start journalnode
hdfs namenode -format
启动这台节点的namenode
hdfs --daemon start namenode
其他Namenode节点上首次要手动同步一次数据,在另外俩个节点执行:
hdfs namenode -bootstrapStandby
同步完成后启动namenode
hdfs --daemon start namenode
ZKFC用于监控active namenode节点是否挂掉,通知其它节点上的ZKFC强行杀死自己ZKFC节点上的namenode(防止其假死状态产生集群namenode脑裂的发生),然后选举出其他namenode为active节点
集群首次搭建需要在zookeeper中初始化namenode信息,在namenode1节点执行命令:
hdfs zkfc -formatZK
主节点启动zkfc
hdfs --daemon start zkfc
在namenode1节点上,启动HDFS整个集群(包括其他节点)的其他进程(Datanode/DFSZKFailoverController),执行命令:
sbin/start-dfs.sh
进入zookeeper中,./bin/zkCli.sh ,执行:
get -s /hadoop-ha/hacluster/ActiveStandbyElectorLock
查看到的节点即为active节点,进入对应节点页面(9870)查看状态为active
或者执行:
hdfs haadmin -getAllServiceState
即显示Active节点是哪个
kill -9 active namenode进程,查看页面状态,可发现另外某个namenode自动切换成active状态。
记住kill掉的,实验结束后再启动起来。
hdfs dfs -mkdir hdfs://hacluster/wordcount
hdfs dfs - hdfs://hacluster:/wordcount
hdfs dfs -ls hdfs://hacluster/wordcount
<configuration><!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle --><property><name&demanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定ResourceManager的地址 单节点配置--><!-- <property><name&sourcemanager.hostname</name><value>hd2.dev.local</value></property> --><!-- 环境变量的继承 --><property><name&v-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property><!-- 开启resourcemanager HA--><property><name&abled</name><value>true</value></property><!-- 自定义一个resourcemanager的逻辑集群id--><property><name&sourcemanager.cluster-id</name><value>yarn-cluster</value></property><!-- 指定resourcemanager集群的逻辑节点名称列表--><property><name&-ids</name><value>rm1,rm2,rm3</value></property><!-- rm1的节点信息--><property><name&1</name><value>hd1.dev.local</value></property><!-- yarn web页面地址 --><property><name&sourcemanager.1</name><value>hd1.dev.local:8088</value></property><!-- rm1 对客户端暴露的地址,客户端通过该地址向RM提交任务等 --><property><name&1</name><value>hd1.dev.local:8032</value></property><!-- rm1 与 applicationMaster的通信地址 --><property><name&sourcemanager.1</name><value>hd1.dev.local:8030</value></property><!-- rm1 与 nm的通信地址 --><property><name&1</name><value>hd1.dev.local:8031</value></property><!-- rm2的节点信息--><property><name&2</name><value>hd2.dev.local</value></property><!-- yarn web页面地址 --><property><name&sourcemanager.2</name><value>hd2.dev.local:8088</value></property><!-- rm2 对客户端暴露的地址,客户端通过该地址向RM提交任务等 --><property><name&2</name><value>hd2.dev.local:8032</value></property><!-- rm2 与 applicationMaster的通信地址 --><property><name&sourcemanager.2</name><value>hd2.dev.local:8030</value></property><!-- rm2 与 nm的通信地址 --><property><name&2</name><value>hd2.dev.local:8031</value></property><!-- rm3的节点信息--><property><name&3</name><value>hd3.dev.local</value></property><!-- yarn web页面地址 --><property><name&sourcemanager.3</name><value>hd3.dev.local:8088</value></property><property><name&3</name><value>hd3.dev.local:8032</value></property><!-- rm3 与 applicationMaster的通信地址 --><property><name&sourcemanager.3</name><value>hd3.dev.local:8030</value></property><!-- rm3 与 nm的通信地址 --><property><name&3</name><value>hd3.dev.local:8031</value></property><!-- 配置zookeeper信息 --><property><name&sourcemanager.zk-address</name><value>hd1.dev.local:2181,hd2.dev.local:2181,hd3.dev.local:2181</value></property><!-- 启动自动恢复 --><property><name&abled</name><value>true</value></property><!-- 配置将recourcemanager的状态信息存储在zookeeper中 --><property><name&sourcemanager.store.class</name><value>org.apache.hadoop.very.ZKRMStateStore</value></property></configuration>
在namenode1节点上进入sbin目录:
./start-yarn.sh
在第一台节点上启动JobHistroy日志管理进程:
mapred --daemon start historyserver
每个节点执行jps命令,此时进程结果为:
主机名 | hd1.dev.local | hd2.dev.local | hd3.dev.local |
进程名称 | QuorumPeerMain | QuorumPeerMain | QuorumPeerMain |
JournalNode | JournalNode | JournalNode | |
NameNode | NameNode | NameNode | |
DataNode | DataNode | DataNode | |
DFSZKFailoverController | DFSZKFailoverController | DFSZKFailoverController | |
ResourceManager | ResourceManager | ResourceManager | |
NodeManager | NodeManager | NodeManager | |
JobHistoryServer |
如果进程数据不对,则需要进入$HADOOP_HOME/logs下找对应没启动起来的进程的日志,查明启动失败原因。
访问任意resourcemanager节点的8088都会跳转到固定的一个resourcemanager节点上,说明高可用配置成功。
Kill掉固定节点上的resourcemanager进程,继续访问8088端口,发现地址已转变到其它resourcemanager节点上,说明高可用验证成功。
也可通过命令查看所有节点状态:
yarn rmadmin -getAllServiceState
此时访问任意resourcemanager节点的8088端口都会自动跳转到active节点的yarn地址
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /wordcount /tmp/wdoutput1
有输出结果即可。
至此Hadoop 3节点高可用测试集群搭建完毕。
本文发布于:2024-01-30 01:31:09,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170654947118280.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |