3.1 资源调度框架 YARN
面对着已经存储到hdfs海量的日志数据,我们需要对数据进行离线计算,离线计算需要申请资源,hadoop内置了资源管理者-YARN
3.1.1 什么是YARN
- Yet Another Resource Negotiator, 另一种资源协调者
- 通用资源管理系统
- 为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处
3.1.2 YARN产生背景
MapReduce1.x存在的问题: 单点故障&节点压力大&不易扩展
- 在Hadoop1.x中MapReduce是Master/Slave结构,在集群中的表现形式为:1个JobTracker带多个TaskTracker;
- JobTracker:负责资源管理和作业调度
- TaskTracker:定期向JobTracker汇报本节点的健康状况、资源使用情况以及任务的执行情况;接收来自JobTracker的命令(启动/杀死任务等)并执行接收到的命令;
资源利用率低 运维成本高
不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度
3.1.3 YARN架构
- ①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 提交作业 查询作业的运行进度 杀死作业
3.4 YARN执行流程
1,Client提交作业请求
2,ResourceManager接收到请求,在其中一个NodeManager上启动Container,
3,启动的Container为了创建ApplicationMaster
4,ApplicationMaster收到任务后,向ResourceManager申请资源
5,得到批准后,向对应的NodeManager申请启动Container
6,Container启动后,执行对应的任务
3.5 YARN环境搭建
1)mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2)yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
3) 启动YARN相关的进程 sbin/start-yarn.sh
4)验证
jps
ResourceManager
NodeManager
http://node-teach:8088
5)停止YARN相关的进程
sbin/stop-yarn.sh
3.6 提交MapReduce作业到Yarn上运行
体验MapReduce在Yarn中的运算流程:
在hadoop目录下
xxx/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar
在hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar这个jar包上已经内置了很多样例功能,我们取一个简单的测试下:
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 10 20