

## 3.1 资源调度框架 YARN

面对着已经存储到hdfs海量的日志数据，我们需要对数据进行离线计算，离线计算需要申请资源，hadoop内置了资源管理者-YARN

### 3.1.1 什么是YARN

- Yet Another Resource Negotiator, 另一种资源协调者
- 通用资源管理系统
- 为上层应用提供统一的资源管理和调度，为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

### 3.1.2 YARN产生背景 

- MapReduce1.x存在的问题: 单点故障&节点压力大&不易扩展

  ![](img/hadoop-yarn.jpg)

  - 在Hadoop1.x中MapReduce是Master/Slave结构，在集群中的表现形式为：1个JobTracker带多个TaskTracker；
  - JobTracker：负责资源管理和作业调度
  - TaskTracker：定期向JobTracker汇报本节点的健康状况、资源使用情况以及任务的执行情况；接收来自JobTracker的命令（启动/杀死任务等）并执行接收到的命令;

- 资源利用率低 运维成本高

  ![](img/image-yarn2.png)

- 不同计算框架可以共享同一个HDFS集群上的数据，享受整体的资源调度

  ![](img/hadoop-yarn3.png)

### 3.1.3 YARN架构

![](img/yarn_architecture.gif)

- ①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执行流程

![](img/yarn4.png)

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

