YARN架构
1 RM(ResourceManager) + N NM(NodeManager)
ResourceManager的职责: 一个集群active状态的RM只有一个,负责整个集群的资源管理和调度
(1)处理客户端的请求(启动/杀死)
(2)启动/监控 ApplicationMaster(一个作业对应一个AM)
(3)监控NM
(4)系统的资源分配和调度
NodeManager: 整个集群中有N个,负责单个节点的资源管理和使用以及task的运行情况
(1)定期向RM汇报本节点的资源使用请求和各个Container的运行状态
(2)接受并处理RM的container启停的各种命令
(3)单个节点的资源管理和任务管理
ApplicationMaster:每个应用/作业对应一个,负责应用程序的管理
(1)数据切分
(2)为应用程序向RM申请资源(container),并分配给内部任务
(3)与NM通信以启停task, task是运行在container中的
(4)task监控和容错
Container:
对任务运行情况的描述:cpu、memory、环境变量
YARN执行流程
(1)用户向YARN提交作业
(2)RM为该作业分配第一个container(AM)
(3)RM会与对应的NM通信,要求NM在这个container上启动应用程序的AM
(4)AM首先向RM注册,然后AM将为各个任务申请资源,
(5)AM采用轮询的方式通过RPC协议向RM申请和领取资源
(6)AM申请到资源以后,便和相应的NM通信,要求NM启动任务
(7)NM启动我们作业对应的task
YARN环境搭建以及提交作业到YARN上运行
YARN环境搭建
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
启动yarn:sbin/start-yarn.sh
验证是否启动成功
jps
ResourceManager
NodeManager
web: http://hadoop001:8088
停止yarn: sbin/stop-yarn.sh
提交mr作业到yarn上运行: wc
/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar
hadoop jar /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /input/wc/hello.txt /output/wc/
当我们再次执行该作业时,会报错:
FileAlreadyExistsException:
Output directory hdfs://hadoop001:8020/output/wc already exists
关闭任务
实际工作中,通常不需要自己来操作yarn,但是偶尔需要手动kill任务。
#查看当前任务
yarn application -list
#杀死任务
yarn application -kill application_id
#有时候spark streaming任务开始以后会长期挂着跑,使用yarn可以关闭
yarn application -kill application_1437456051228_1725
#查看任务情况(所占资源等等)
yarn application -status application_id
将运行中的 application 移动到指定的 yarn queue
yarn application -movetoqueue <application_id> -queue <queue_name>
yarn top
查看集群资源情况,正在使用情况
yarn jar <jar> [mainClass] args...
运行jar文件,用户可以将写好的YARN代码打包成jar文件,用这个命令去运行它。