hadoop 3.2.1 Yarn集群HA搭建及踩坑记录

接上篇,hdfs集群启动后仅仅是一个分布式文件系统而已,并不具备计算的能力,因此引出yarn,记录一下yarn HA的搭建过程。


首先需要注意一点,Yarn与HDFS属于两个不同的集群,一个负责文件存储,一个负责作业调度,二者之间没有必然关系,也不一定说Yarn的某些节点必须必须要放在datanaode上。通常会把nodemanagerdatanode放在一起是因为要“计算向数据移动”,尽可能使计算作业就在存储节点上执行。

hadoop-env.sh

由于hadoop3限制必须要声明角色运行进程,在文件末尾加上以下两行:

export YARN_NODEMANAGER_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
mapred-site.xml
<!-- 指定mr框架 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<!-- 这一段必须写,不然yarn执行任务时会报
Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster -->
<property>
    <name>mapreduce.application.classpath</name>
    <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
yarn-site.xml
<configuration>
    <!-- 固定写法 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 固定写法,不写yarn会报错 -->
    <property>
        <name>yarn.nodemanager.env-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>

    <!-- yarn的集群id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarncluster</value>
    </property>

    <!-- 启用HA -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>slave1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave2</value>
    </property>

    <!-- webapp的地址务必要配置,不然yarn可以启动但是无法执行map任务,大坑 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>slave1:8088</value>
    </property>

    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>slave2:8088</value>
    </property>

    <property>
        <name>hadoop.zk.address</name>
        <value>qlwbnew116:2181,qlwbnew117:2181,qlwbnew118:2181,qlwbnew119:2181,qlwbnew120:2181</value>
    </property>

    <!-- 启用自动恢复 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>

    <!-- 持久化方式,既然启用了ZK那就把信息存储到ZK里面 -->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

    <!-- 自动检测硬件配置,视机器配置酌情开启,默认关闭 -->
    <property>
        <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
        <value>true</value>
    </property>
</configuration>

配置文件就这两个,随后便可以通过sbin/start-yarn.sh来启动yarn集群了。

验证

分别访问两台机器的8088端口,应该看到一台是standby,一台是active:在这里插入图片描述
在这里插入图片描述
值得关注的几个点:

  1. standby节点上,只有About这个页面能看到本节点的信息,点击其他链接都会自动跳转到active节点;
  2. standby节点看不到集群其他信息,比如任务数,vcpu核数,节点数和内存容量,都会显示为0,只有active节点上才能看到;
  3. 页面中显示的Cluster ID并不是集群的id,而是当前节点在集群中的id,这里与大多数集群系统的显示有所差异,不要以为是配置文件写错了。
Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

如果出现以下类似提示:
在这里插入图片描述
检查mapred-site.xmlyarn-site.xml中以下配置是否写全(上文给出的配置中已经包含此项):
在这里插入图片描述
不需要去执行hadoop classpath!
不需要去执行hadoop classpath!
不需要去执行hadoop classpath!
按照文档上写全就好了!

failed 2 times due to AM Container for appattempt_XXXX
org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster

这两个错误属于同一原因,yarn上看错误信息是这样:
在这里插入图片描述
在container日志里看是这样的:
在这里插入图片描述
主要原因是没有配置yarn.resourcemanager.webapp.address,虽然这一项有默认值:
在这里插入图片描述
但仍然要重新声明一下,也许是个bug吧,在yarn-site.xml里添加以下内容就可以解决:
在这里插入图片描述
记得重启yarn!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值