1. YARN产生背景
- Hadoop1.x时:MapReduce1.x存在问题:单点故障&节点压力大不易扩展&不能支持除了MR以外的任务
- MapReduce:Master/Slave架构,一个JobTracker带多个TaskTracker。
- JobTracker:负责资源管理和作业调度。整个集群中只有一个JobTracker,如果出现故障,整个集群就会崩溃。
- TaskTracker:定期向JT汇报本节点的健康状况、资源使用情况、作业执行情况;接受到来自JT的命令:启动/杀死任务。
- 资源利用率&运维成本
- YARN:不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度。
- XXX(Spark/MapReduce/Strom/Flink) on YARN的好处:与其他计算框架共享集群资源,按资源需要分配,进而提高集群资源的利用率。
2. YARN概述
- Yet Another Resource Negotiator
- 通用的资源管理系统
- 为上层应用提供统一的资源调度
3. YARN架构

yarn架构.jpg
- ResourceManager: RM
- 整个集群同一时间提供服务的RM只有一个(生产一般有两个,一主一备),负责集群资源的统一管理和调度。
- 处理客户端请求:提交一个作业,杀死一个作业。
- 监控我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理(重启)。
- NodeManager: NM
- 整个集群中有多个,负责自己本身节点资源管理和使用。
- 定时向RM汇报本节点的资源使用情况。
- 接受并处理来自RM的各种命令:启动Container。
- 处理来自AM的命令。
- 单个节点的资源管理。
- ApplicationMaster: AM
- 每个应用程序对应一个:MR、Spark、负责应用程序的管理。
- 为应用程序向RM申请资源(core、memory),分配给内部Task处理。
- 需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面的。
- Container
- 封装了CPU、Memory等资源的一个容器。
- 是一个任务运行环境的抽象。
- Client
4. YARN执行流程

yarn调用流.jpg
5. YARN环境搭建
- mapred-site.xml
<configuration>
<!--告诉MapReduce,任务跑在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<!--告诉yarn的NodeManage用的哪一个-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 启动YARN相关进程:sbin/start-yarn.sh
- 验证YARN是否启动成功
- 停止YARN相关进程:sbin/stop-yarn.sh
6. 提交作业到YARN执行
- MapReduce作业提交到YARN上运行
- 使用Hadoop MapReduce示例程序:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar
- 启动MR程序:hadoop jar hadoop-mapreduce-examples-3.1.0.jar pi 1 2
- 使用http://localhost:8088 查看结构
网友评论