分布式资源调度框架YARN

发布时间 2023-12-07 17:18:11作者: 韩世康

1、YARN=Yet Another Resource Negotiator

2、主从架构,一主多从
3、主=ResourceManager,从=NodeManager
4、ResourceManager由ApplicationManager和ResourceScheduler组成
5、NodeManager的核心组件包括ApplicationMaster和Container
6、工作流程分为五个阶段:
(1)作业提交阶段
(2)作业初始化阶段
(3)任务分配阶段
(4)任务执行阶段
(5)任务完成阶段
7、yarn工作流程:
(01)、Client向ResourceManager提交作业申请
(02)、ResourceManager中的ApplicationManager处理请求并返回JobID和HDFS路径
(03)、Client把作业的相关资源提交到指定的HDFS路径
(04)、Client向ResourceManager申请执行作业
(05)、ApplicationManager把请求转发到ResourceScheduler
(06)、ResouceScheduler处理请求并返回给ApplicationManager可用的资源
(07)、ApplicationManager通知NodeManager创建Container并启动ApplicationMaster
(08)、ApplicationMaster从HDFS上获取作业资源并计算任务资源
(09)、ApplicationMaster向ResourceScheduler申请执行任务MapTask和ReduceTask所需资源
(10)、ResourceScheduler返回给ApplicationMaster可用资源信息
(11)、ApplicationMaster通知NodeManager启动MapTask和ReduceTask
(12)、NodeManager启动MapTask和ReduceTask
(13)、MapTask和ReduceTask处理数据
(14)、ApplicationMaster监测到所有MapTask和ReduceTask执行完毕后报告ApplicationManager
(15)、ApplicationManager通知NodeManager释放资源

8、安装yarn伪分布式
(1)启动虚拟机,恢复hadoop101的伪分布式快照
(2)切换到cd $HADOOP_HOME/etc/hadoop目录中,修改vi yarn-env.sh
export JAVA_HOME=/opt/install/jdk
(3)修改vi mapred-env.sh
export JAVA_HOME=/opt/install/jdk
(4)配置vi yarn-site.xml
<!-- 启动yarn工作模式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
(5)cp mapred-site.xml.template mapred-site.xml
(6)配置vi mapred-site.xml
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定历史服务器工作端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 指定历史服务器访问端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
(7)启动namenode:hadoop-daemon.sh start namenode并通过jps检查
(8)启动datanode:hadoop-daemon.sh start datanode并通过jps检查
(9)启动resourcemanager:yarn-daemon.sh start resourcemanager并通过jps检查
(10)启动nodemanager:yarn-daemon.sh start nodemanager并通过jps检查
(11)通过浏览器查看http://hadoop101:8088
(12)启动历史服务器:mr-jobhistory-daemon.sh start historyserver并通过jps检查
(13)通过浏览器查看http://hadoop101:19888
(14)创建目录:hdfs dfs -mkdir -p /user/hadoop/input/
(15)在本地创建一个文本文件:cd /root;vi words.txt并随意输入单词
(16)上传hdfs文件:hdfs dfs -put words.txt /user/hadoop/input/
(17)运行测试程序:cd $HADOOP_HOME/;
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /user/hadoop/input /user/hadoop/output
(18)查看运行结果
hdfs dfs -cat /user/hadoop/output/*
(19)通过浏览器查看日志:8088->history->log
(20)删除测试文件,停止所有服务:
hdfs dfs -rm -r /user
rm -f words.txt
停止historyserver:mr-jobhistory-daemon.sh stop historyserver
停止nodemanager:yarn-daemon.sh stop nodemanager
停止resourcemanager:yarn-daemon.sh stop resourcemanager
停止datanode:hadoop-daemon.sh stop datanode
停止namenode:hadoop-daemon.sh stop namenode
通过jps检查
(21)关机,做快照

11、安装yarn完全分布式[在hadoop102节点上实施,除非特别说明]:
(1)切换目录cd $HADOOP_HOME/etc/hadoop,vi yarn-env.sh
export JAVA_HOME=/opt/install/jdk
(2)vi mapred-env.sh
export JAVA_HOME=/opt/install/jdk
(3)vi yarn-site.xml
<!-- 启动yarn工作模式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
(4)cp mapred-site.xml.template mapred-site.xml
(5)vi mapred-site.xml
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定历史服务器工作端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop104:10020</value>
</property>
<!-- 指定历史服务器访问端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop104:19888</value>
</property>
(6)cd $HADOOP_HOME/etc/hadoop
scp * root@hadoop103:`pwd`
scp * root@hadoop104:`pwd`
(7)在102上启动hdfs集群:start-dfs.sh,通过jps检查
(8)在103上启动yarn集群:start-yarn.sh,通过jps检查
(9)在104上启动historyserver:mr-jobhistory-daemon.sh start historyserver,通过jps检查
(10)通过浏览器查看:
http://hadoop102:50070
http://hadoop103:8088
http://hadoop104:19888
(11)运行测试程序并查看运行结果和日志
(12)停止所有服务并通过jps检查
在104上停止historyserver:mr-jobhistory-daemon.sh stop historyserver
在103上停止yarn集群:stop-yarn.sh
在102上停止hdfs集群:stop-dfs.sh
(13)关机做快照

12、通过yarn命令操作程序
(1)查看所有执行的任务,包括正在执行的和已经执行完成的
yarn application -list -appStates ALL
(2)查看正在执行的任务
yarn application -list
(3)停止正在执行的任务
yarn application -kill <Application-Id>
(4)查看节点列表
yarn node -list
(5)查看指定节点工作状态
yarn node -status <Node-Id>