博客 HADOOP之YARN详解(上)

HADOOP之YARN详解(上)

   数栈君   发表于 2024-12-04 14:02  230  0

搭建好hadoop的分布式文件系统(HDFS), 在HDFS上存储数据,将数据进行切块,分布在不同的数据节点进行存储。这些解决了存储问题,下面开始来解决将这些节点上存储的数据文件来做计算。

谷歌发表的一篇论文《GFS》,Nutch团队对这个论文使用Java进行了实现,命名为NDFS,也就是后来的HDFS。谷歌还发表过另一篇论文《MapReduce》, 介绍的就是如何解决分布式文件系统上存储的数据进行计算的问题.也就是一个分布式计算的框架。

需要计算的文件分布在不同节点上,在进行数据计算的时候民有两种方式:

将数据移动到一个节点上,在这个节点上进行数据的计算。

将计算程序分发到每一个数据节点,在每一个节点计算自己的数据。

Hadoop使用第二种计算方式,也就是将计算程序分发到不同的数据节点进行计算。Hadoop官方案例就是分布式的计算程序。而为每个计算任务分配计算资源(内存,CPU),如何协调第一个节点上的计算任务,如何监控每一个节点上的计算任务等。而这些,都由YARN实现.

一、YARN的简介

1.1 MapReduce 1.x

第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成。其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。对应Hadoop版本为Hadoop 1.x, 和0.21.x, 0.22.x。

1.1.1 MapReduce 1.x的角色
client: 作业提交发起者

JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业

TaskTracker: 保持JobTracker通信,在分配的数据片段上执行MapReduce任务

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/818c3b64ffac1bf0410bf53b733fac22..png

1.1.2 MapReduce 1.x执行流程

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/914dcdafea7b4a6720b17edc11957a51..png
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/914dcdafea7b4a6720b17edc11957a51..png

1.提交作业

编写MapReduce程序代码,创建Job对象,并进行配置,比如输入和输出路径,压缩格式等,然后通过JobClient来提交作业.

2.初始化作业

客户端提交完成后,JobTracker会将作业加入队列,然后进行调度,默认的调度方法是FIFO调试方式。

3.分配任务

TaskTracker和JobTracker之间的通信与任务的分配是通过心跳机制完成的。

4.执行任务

申请到任务后,TaskTracker会作如下事情:

拷贝代码到本地

拷贝任务的信息到本地

启动JVM运行任务

5.状态与任务的更新

任务在运行过程中,首先会将自己的状态汇报给TaskTracker,然后由TaskTracker汇总告之JobTracker。任务进度是通过计数器来实现的。

6.作业的完成

JobTracker是在接受到最后一个任务运行完成后,才会将任务标记为成功。此时会做删除中间结果等善后处理工作。

1.2 YARN的介绍

为克服Hadoop 1.0中的HDFS和MapReduce存在的各种问题而提出的,针对Hadoop 1.0中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARM。

Apache YARM(Yet another Resource Negotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序。

YARN被引入Hadoop 2,最初是为了改善MapReduce的实现,但是因为具有足够的通用性,同样可以支持其他的分布式计算模式,比如Spark, Tez等计算框架。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/97b991a5ae0725811b0dbccf20d0c758..png

注意: 还有一层应用是运行在MapReduce, Sqark或者Tez之上的处理框架,如Pig, Hive和Crunch等.

1.3 YARN的设计思想

YARN的基本思想是将资源管理和作业调度/监视功能划分为单独蝗守护进程。其思想是拥有一个全局ResourceManager(RM), 以及每个应用程序拥有一个ApplicationMaster(AM)。应用程序可以是单个作业,也可以是一组作业。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/023f49d0db1be9d4c0d99f2e15ccdff4..png

一个ResourceManager和多个Nodemanager构成了YARM资源管理框架。他们是YARM启动后长期运行的守护进程,来提供核心服务。

ResourceManager

是在系统中的所有应用程序之间仲裁资源的最终权威,即管理整个集群上的所有资源分配,内部含有一个Scheduler(资源调度器)

NodeManager

是每台机器的资源管理器,也就是单个节点的管理者,负责启动和监视容器(container)资源使用情况,并向ResourceManager及其Scheduler报告使用情况

container

即集群上的可使用资源,包含cpu、内存、磁盘、网络等

ApplicationMaster(简称AM)

实际上是框架的特定的库,每启动一个应用程序,都会启动一个AM,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务。

YARN的角色MapReduce 1.x的角色
ResourceManager、Application Master、Timeline ServerJobTracker
NodeManagerTaskTracker
ContainerSlot

二 YARN的配置

YARN属于Hadoop的核心组件,不需要单独安装,只需要修改一些配置文件件即可。

1. mapred-site.xml


mapreduce.framework.name
yarn


yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1


mapreduce.map.env
HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1


mapreduce.reduce.env
HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1
2. yarn-site.xml


yarn.resourcemanager.hostname
hadoopmaster




yarn.nodemanager.aux-services
mapreduce_shuffle

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/f39a41281462bbffad2d87ad90783017..png

3. hadoop-env.sh
#添加如下:
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
4. 分发到其他节点
cd $HADOOP_HOME/etc/
scp -r hadoop hadoopnode1:$PWD
scp -r hadoop hadoopnode2:$PWD
5.YARN的服务启停
 

描叙
命令   
 

开启YARN全部服务
 

start-yarn.sh
 

停止YARN全部服务
 

stop-yarn.sh
 

单点开启YARN相关进程
 

yarn --daemon start resourcemanager yarn --daemon start nodemanager
 

单点关闭YARN相关进程 
 

yarn --daemon stop resourcemanager yarn --daemon stop nodemanager

单点开启YARN相关进程 yarn --daemon start resourcemanager yarn --daemon start nodemanager

单点关闭YARN相关进程 yarn --daemon stop resourcemanager yarn --daemon stop nodemanager
验证:http://192.168.68.128:8088/cluster

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/f01a7fad057b03688ef0c890e8d61695..png

如果此页面启动不起来,需在yarn-site.xml里添加:

  


yarn.resourcemanager.webapp.address
0.0.0.0:8088
6. 任务测试

当开启所有的YARN的进程之后,我们再次运行之前的Hadoop官方案例:wordcount

hadoop jar /usr/local/hadoop-3.3.1/share/hadoop//mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /newInput /output2
hadoop jar /usr/local/hadoop-3.3.1/share/hadoop//mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 10 10

1.错误处理

错误: 找不到或无法加载主类 org.apache.hadoop.mapred.YarnChild

在命令窗口输入下面命令

hadoop classpath

将显示出来的路径添加到 "yarn.application.classpath"的Value值里,如下


yarn.application.classpath

/usr/local/hadoop-3.3.1/etc/hadoop,
/usr/local/hadoop-3.3.1/share/hadoop/common/lib/*,
/usr/local/hadoop-3.3.1/share/hadoop/common/*,
/usr/local/hadoop-3.3.1/share/hadoop/hdfs,
/usr/local/hadoop-3.3.1/share/hadoop/hdfs/lib/*,
/usr/local/hadoop-3.3.1/share/hadoop/hdfs/*,
/usr/local/hadoop-3.3.1/share/hadoop/mapreduce/*,
/usr/local/hadoop-3.3.1/share/hadoop/yarn,
/usr/local/hadoop-3.3.1/share/hadoop/yarn/lib/*,
/usr/local/hadoop-3.3.1/share/hadoop/yarn/*

将这段内容编辑进 yarn-site.xml里面,并重启yarn.

2 错误:

INFO conf.Configuration: resource-types.xml not found INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.

参见:Apache Hadoop 3.0.0 – Hadoop: YARN Resource Configuration

hadoop jar /usr/local/hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 10 10

三 YARN的历史日志

1. 历史日志概述

当在YARN上运行MapReduce的程序的时候,可以在控制台上看到任务的日志输出,以获取到任务的运行状态。同时,YARN也会将日志写在本地的$HADOOP_HOME/logs/userlogs文件夹中,我们可以到文件夹中进行日志的查看,但是这个文件夹中的内容,会随意YARN的重启而被删除掉,那么此时我们将如何查看日志?


此时就需要开启Hadoop的历史日志服务了,Hadoop会将MapReduce的任务日志在HDFS也保留一份,我们可以通过Hadoop的历史任务服务来查看到之前的历史日志!

但是每一个程序会被分布在不同的节点上进行运行,我们在进行任务查看的时候还得一个个的指定节点进行查看,并一个个的找MapTask或者ReduceTask的日志, 很麻烦!预设Yarn提供了历史日志聚合的服务!

顾名思义,就是将每一个程序的历史日志都聚合在一起,存储在HDFS上,方便查看!

2. mr-historyserver

记录MapReduce的历史日志的,接下来从配置开始,到日志聚合,运行任务。

1.配置文件

mapred-site.xml



mapreduce.jobhistory.address
hadoopmaster:10020




mapreduce.jobhistory.webapp.address
hadoopmaster:19888

yarn-site.xml





yarn.log-aggregation-enable
true



yarn.log.server.url
http://hadoopmaster:19888/jobhistory/logs




yarn.log-aggregation.retain-seconds
604800

2.分发配置

[~]# pwd
/usr/local/hadoop-3.3.1/etc/hadoop
[~]# scp mapred-site.xml yarn-site.xml hadoopnode1:$PWD
[~]# scp mapred-site.xml yarn-site.xml hadoopnode2:$PWD

3. 开启历史服务

#重启yarn集群
[~]# stop-yarn.sh
[~]# start-yarn.sh
#打开历史服务
[~]# mapred --daemon start historyserver

#开启之后,通过jps可以查看到 JobHistoryServer 进程,表示开启成功

四 YARN的Job提交

在MR程序运行时,有五个独立的进程:

YarnRunner:用于提交作业的客户端程序

ResourceManager: yarn资源管理器,负责协调集群上计算机资源的分配

NodeManager: yarn节点管理器,负责启动和监视集群中机器上的计算容器(container)

Application Master: 负责协调运行MapReduce作业的任务,他和任务都在容器中运行,这些容器由资源管理分配并由节点管理器进行管理。

HDFS: 用于共享作业所需文件。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/617ed2521984554c46ed074fcbb49297..png

1. 调用waitForCompletion方法每秒轮询作业的进度,内部封装了submit()方法,用于创建JobCommiter实例,并且调用其的submitJobInternal方法。提交成功后,如果有状态改变,就会把进度报告到控制台。错误也会报告到控制台
2. JobCommiter实例会向ResourceManager申请一个新应用ID,用于MapReduce作业ID。这期间JobCommiter也会进行检查输出路径的情况,以及计算输入分片。
3. 如果成功申请到ID,就会将运行作业所需要的资源(包括作业jar文件,配置文件和计算所得的输入分片元数据文件)上传到一个用ID命名的目录下的HDFS上。此时副本个数默认是10.
4. 准备工作已经做好,再通知ResourceManager调用submitApplication方法提交作业。
5. ResourceManager调用submitApplication方法后,会通知Yarn调度器(Scheduler),调度器分配一个容器,在节点管理器的管理下在容器中启动 application master进程。
6. application master的主类是MRAppMaster,其主要作用是初始化任务,并接受来自任务的进度和完成报告。
7. 然后从HDFS上接受资源,主要是split。然后为每一个split创建MapTask以及参数指定的ReduceTask,任务ID在此时分配
8. 然后Application Master会向资源管理器请求容器,首先为MapTask申请容器,然后再为ReduceTask申请容器。(5%)
9. 一旦ResourceManager中的调度器(Scheduler),为Task分配了一个特定节点上的容器,Application Master就会与NodeManager进行通信来启动容器。
10. 运行任务是由YarnChild来执行的,运行任务前,先将资源本地化(jar文件,配置文件,缓存文件)
11. 然后开始运行MapTask或ReduceTask。
12. 当收到最后一个任务已经完成的通知后,application master会把作业状态设置为success。然后Job轮询时,知道成功完成,就会通知客户端,并把统计信息输出到控制台

————————————————

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据资产管理白皮书》下载地址:

《行业指标体系白皮书》下载地址:

《数据治理行业实践白皮书》下载地址:

《数栈V6.0产品白皮书》下载地址:

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群