HADOOP之YARN详解

目录

一、YARN的简介

1.1 MapReduce 1.x

1.1.1 MapReduce 1.x的角色

1.2 YARN的介绍

1.3 YARN的设计思想

二 YARN的配置

1. mapred-site.xml

2. yarn-site.xml

​编辑

3. hadoop-env.sh

4. 分发到其他节点

5.YARN的服务启停

6. 任务测试

三 YARN的历史日志

1. 历史日志概述

2. mr-historyserver

1.配置文件

2.分发配置

3. 开启历史服务

四 YARN的Job提交

五 Yarn的命令

六 Yarn的三种调度器

什么是Scheduler(调度器)

YARN提供的三种内置调度器

          1.FIFO Scheduler (FIFO调度器)

七 YARN的队列配置

1. 配置任务队列

2. 默认队列设置

八 YARN的Node Label机制

1. Node Label的介绍

2. 开启标签

3. 标签管理

1. 添加标签

2. 查看标签

3. 删除标签

4. 为节点打上标签

5. 为队列绑定标签

6. 测试


搭建好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任务

1.1.2 MapReduce 1.x执行流程

  1. 提交作业

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

  2. 初始化作业

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

  3. 分配任务

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

  4. 执行任务

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

    1. 拷贝代码到本地

    2. 拷贝任务的信息到本地

    3. 启动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等计算框架。

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

1.3 YARN的设计思想

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

一个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 Server JobTracker
NodeManager TaskTracker
Container Slot

二 YARN的配置

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

1. mapred-site.xml
 <!-- 指定MapReduce作业执行时,使用YARN进行资源调度 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.1</value>
    </property>
2. yarn-site.xml
    <!-- 设置ResourceManager -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoopmaster</value>
    </property>
​
    <!--配置yarn的shuffle服务-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value> 
    </property>
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

验证:http://192.168.68.128:8088/cluster

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

    <!--然后在yarn-site.xml添加配置:  -->  
	<!--yarnweb http通讯地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>0.0.0.0:8088</value>
    </property>

详见:hadoop yarn 历史服务器 web无法访问_yarn webui无法访问历史服务器-CSDN博客

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值里,如下

<property>
   <name>yarn.application.classpath</name>
   <value>
       /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/*
   </value>
</property>

将这段内容编辑进 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

<!-- 历史任务的内部通讯地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoopmaster:10020</value>
</property>
​
<!-- 历史任务的外部监听页面 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoopmaster:19888</value>
</property>

yarn-site.xml

<!-- 开启日志聚集功能 -->
<!-- 开启日志聚集功能后,将会将各个Container的日志保存在yarn.nodemanager.remote-app-log-dir的位置 -->
<!-- 默认保存在/tmp/logs-->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值