MRAppMaster中如果ResourceManager 宕机了怎么办,与hadoop中的namenode问题一样,同样可以将
RM搭建高可用。
1、规划
准备四台虚拟机,规划如下
主机 | node2 | node3 | node4 | node5 |
---|---|---|---|---|
节点 | NameNode | NameNode | ||
节点 | DataNode | DataNode | DataNode | |
节点 | ZooKeper | ZooKeper | ZooKeper | |
节点 | ZKFC | ZKFC | ||
节点 | JournalNode | JournalNode | JournalNode | |
节点 | Resource Manager1 | Resource Manager2 | ||
节点 | Node Manager1 | Node Manager2 | Node Manager3 |
在hadoop基于zookeper自动高可用搭建
中已经搭建好了namdenode的高可用,所以本实例在其基础上再搭建即可,可以看到只需要在配置
Resource Manager1,Resource Manager2即可,Node Manager1无需配置,其配置同DataNode配置,在slaves配置文件中。
2、配置文件
2.1 mapred-site.xml
进入到hadoop配置文件目录下 生成mapred-site.xml文件
cd $HADOOP_HOME/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
增加如下配置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2.2 yarn-site.xml
在进入到hadoop配置文件目录下 ,yarn-site.xml中添加如下内容
<!-- 让yarn的容器支持mapreduce的洗牌,开启shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 启用resourcemanager的HA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 给两个resourcemanager组成的HA命名 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<!-- RM HA的两个resourcemanager的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定rm1的reourcemanager进程所在的主机名称 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node4</value>
</property>
<!-- 指定rm2的reourcemanager进程所在的主机名称 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node5</value>
</property>
<!-- 指定zookeeper集群的各个节点地址和端口号 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node3:2181,node4:2181,node5:2181</value>
</property>
2.3 把配置文件传到 其他服务器上
本实例在node2上修改了 yarn-site.xml, mapred-site.xml,将hadoop所有配置文件都传到其他服务器上,以达到共享
scp * node3:`pwd` && scp * node4:`pwd` && scp * node5:`pwd`
2.4 修改启动文件
先启动yarn 再启动rm
start-yarn.sh
yarn-daemon.sh start resourcemanager
新增hdfs集群 start_hdfs_ha.sh启动文件,在home目录下
vim start_hdfs_ha.sh
添加如下内容,实现一键启动
#!/bin/bash
for node in node3 node4 node5
do
ssh $node "source /etc/profile; zkServer.sh start"
done
sleep 1
start-dfs.sh
ssh node4 "source /etc/profile; start-yarn.sh"
ssh node5 "source /etc/profile; yarn-daemon.sh start resourcemanager"
echo "-----------node2-jps----------- "
jps
for node in node3 node4 node5
do
echo "-----------$node-jps----------- "
ssh $node "source /etc/profile; jps"
done
再添加一键停服务脚本
#!/bin/bash
ssh node4 ". /etc/profile; stop-yarn.sh"
ssh node3 ". /etc/profile; yarn-daemon.sh stop resourcemanager"
stop-dfs.sh
sleep 1
for node in node3 node4 node5
do
ssh $node "source /etc/profile; zkServer.sh stop"
done
echo "-----------node2-jps----------- "
jps
for node in node3 node4 node5
do
echo "-----------$node-jps----------- "
ssh $node "source /etc/profile; jps"
done
将启动和命令 传到其他服务器node[3-5]上
scp start_hdfs_ha.sh node3:`pwd` && scp start_hdfs_ha.sh node4:`pwd` && scp start_hdfs_ha.sh node5:`pwd`
scp stop_hdfs_ha.sh node3:`pwd` && scp stop_hdfs_ha.sh node4:`pwd` && scp stop_hdfs_ha.sh node5:`pwd`
3、启动集群
任意一台服务器执行
./start_hdfs_ha.sh
启动后可以看到 node4 和node5上有resourcemanager进程以及nodemanager进程
4、验证
4.1 页面验证
RM的默认端口为8088,浏览器输入node4:8088.看到node4的resourcemanager处于active状态
http://node5:8088/
输入node5:8088后出现上述页面后会自动调转到node4:8088,是由于node5处于standby状态。
http://node5:8088/
4.2 高可用验证
在node4上看到rm的进程为 1842
kill 掉rm进程模拟宕机
kill -9 1842
jps
然后
再刷新node5:8088
看到node5上的rm自动切换为active
然后在启动node4上的rm。
yarn-daemon.sh start resourcemanager
jps
启动后,再刷新node4:8088 看到 node4启动rm后rm为standby状态