hadoop-RMHA

ResourceManager(RM)负责跟踪群集中的资源,并调度应用程序(例如MapReduce作业)。在Hadoop 2.4之前,ResourceManager是YARN集群中的单点故障。高可用性功能以活动/待机资源管理器对的形式添加冗余,以消除此单一故障点。

所说的RM 也就是说的yarn

相关文档

RMHA 涉及的配置文件

  • yarn-default.xml - 点击访问官方配置项介绍

  • slaves - 启动yarn会执行的配置文件

  • mapred-default.xml - 点击访问官方配置项介绍

  • 注意 - mapred-site.xml其实可以不用配置 只是 hadoop 的mr 配置了yarn,一般来说就走yarn而不走local 所以这里也就配置上了 和spark on yarn 一个道理

相关配置项 主要配置还是yarn-site.xml

mapred-site.xml

<configuration>
<!--执行MapReduce作业的运行时框架 指定为yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn-site.xml

<configuration>
<!--启用自动故障转移。默认情况下,它是启用HA时才会启用-->
<property>
  <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
  <value>ture</value>
</property>
<!--启用RM高可用性-->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
<!--集群的名称。在HA设置,这是用来保证在RM头选择参与此群集,并确保它不会影响其他集群-->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yarn-service</value>
</property>
<!--当启用HA集群中的节点RM的列表-->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!--配置rm1 节点的主机名 需要配置/etc/hosts 指定-->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>hadoop-node1</value>
</property>
<!--配置rm2 节点的主机名 需要配置/etc/hosts 指定-->
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>hadoop-node2</value>
</property>
<!--配置rm1 节点web访问地址-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>hadoop-node1:8088</value>
</property>
<!--配置rm2 节点web访问地址-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>hadoop-node2:8088</value>
</property>
<!--使用RM状态存储和/或嵌入自动故障转移基于zookeeper-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>192.168.40.211:2181,192.168.40.201:2181,192.168.40.202:2181</value>
</property>
<!--RM状态共享存储http://blog.csdn.net/wind5shy/article/details/8283510
开启
-->

<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--RM状态共享存储使用zookeeper-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--RM状态共享存储将在zookeeper创建znode节点 为/rmstore-->
<property>
<name>yarn.resourcemanager.zk-state-store.parent-path</name>
<value>/rmstore</value>
</property>

<!--这个配置在官方文档中没有出现 但是 网上都说必须配置了才可运行MapReduce程序
为了能够运行MapReduce程序,
需要让各个NodeManager在启动时加载shuffle server,
shuffle server实际上是Jetty/Netty Server,Reduce Task通过该server从各个NodeManager上远程拷贝Map Task产生的中间结果。
下边增加的两个配置均用于指定shuffle serve。
-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

<!--故障处理类配置-->
<property>
<name>yarn.client.failover-proxy-provider</name>
<value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>
<!-- 指定故障处理 使用的 zookeeper 节点-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
<value>/yarn-leader-election</value>
<description>Optionalsetting.Thedefaultvalueis/yarn-leader-election</description>
</property>

<!--重要配置 资源调度模式 默认为Capacity Scheduler  这种模式一个用户只会跑一个mr 或者spark 跑完了之后才继续跑
故使用FairScheduler-->

<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

</configuration>

slaves

配置当前主机名即可:

    hadoop-node1

启动

start-yarn.sh

停止

stop-yarn.sh

查看

1.使用以下下命令

yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
yarn rmadmin --help

2.一般任务及其日志都使用web查看

yarn-site.xml配置中:
yarn.resourcemanager.webapp.address.rm1
yarn.resourcemanager.webapp.address.rm2
配置项查看即可

启动的服务

主节点上:

NodeManager
ResourceManager

其他资源节点:

NodeManager

注意的地方

  • RMHA可以使用多个节点做HA 但是2个以上当主节点为第三个时,尝试任务必然失败,但重试机制会让他成功执行。。 换而言之可以做多台 但有bug
  • 该配置应用于所有节点