Yarn框架深入理解【Yarn集群配置】

2021-05-14 17:21:16 浏览数 (1)

一、Yarn框架产生的背景与原因

我们都知道Hadoop诞生的目标是为了支持十几台机器的搜索服务,但是随着数据的增加,数据的可用性也是一个待解决的问题。但是Hadoop框架的自身问题限制了集群的发展。

首先是,JobTracker和NameNode的单点问题,严重制约了集群的扩展和可靠性。

MapReduce采用了基于slot的资源分配模型,slot是一种粗粒度的资源 划分单位,通常一个任务不会用完槽位对应的资源,且其他任务也无法使用这些空闲资源,同时map的槽位和reduce的槽位是不可以通用的。会导致部分资源紧张,部分资源空闲。

同时为了满足在线计算等新的计算框架,MapReduce这种离线计算框架已经不能满足需求。

使用Yarn可以提高资源利用率:

所有计算框架运行在一个集群中,共享一个集群的资源,做到按需分配

二、Yarn框架介绍 

Yet Another Resource Negotiator     通用资源管理系统

可以为上层框架提供统一的资源管理和调度

JobTracker在 YARN 中JobTracker大约分成了 3 块:

  • 一部分是 ResourceManager,负责 Scheduler 及 ApplicationsManager;
  • 一部分是 ApplicationMaster,负责 job 的生命周期管理;
  • 最后一部分是 JobHistroyServer,负责日志的展 示。 为了支持更多的计算模型,把以前的 TaskTracker 替换成了 NodeManager。NodeManager 管理各种各样的 container。Container 才是真正干活的。计算模型相关的事情可以放在 NodeManager 的一个扩展服务中,如 MAP-REDUCE 的 shuffle。

三、各大模块分析

Client

可以向RM(ResourceManager)提交任务、杀死任务

ResourceManager

RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,包括 scheduler 和 Application Manager, Node Manager

对调度器来说,YARN 提供了多种直接可用的调度器, Fair Scheduler 和 Capacity Scheduler 等。调度器仅根据各个应用程序的资源需求进行资源分配,分配的基本单位是Container,而容器里面是将内存,CPU,网络,磁盘封装到一起。

处理来自客户端的请求:提交、杀死

启动/监控 AM、监控NM

同时用户也可设计自己的调度器。

ApplicationMaster

对应用程序管理器来说,,包括应用程序提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。用户提交的每个应用程序均包含一个 ApplicationMaster,ApplicationMaster可以与RM协商申请获取资源,也可以将得到的任务进行再分配,与NM通信启动对应的Task,同时可以监控所有的任务状态。数据切分,为每个task向RM申请资源(在container执行),与NodeManager通信,实现任务的监控【如某个Task挂掉后需要重启等】

NodeManager

NodeManager 管理 container、资源下载、健康检测后汇报 对节点管理器来说,NM是每个节点上的资源和任务管理器,一方面,它会定时地向 RM 汇报本节点上的 资源使用情况和各个 Container 的运行状态;另一方面,它接收并处理来自 AM 的 Container 启动 / 停止等各种请求。

Container

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、 CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该 Container 中描述的 资源。容器是一个动态划分资源。

Jobhistory 机制

在 MRv1 中,JobHistroy server 是嵌入在 Jobtracker 中的,当有大量的查询 时,对 Jobtracker 造成很大的压力.Yarn中实现一套单独的 JobHistroy server 服务。AggregatedLogDeletionService:日志文件的 管理。  HistoryClientService:提供一些服务供 JobClient 查询。

四、Yarn工作流程

  • 1.客户端Client 向 YARN 中提交应用程序,其中包括 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序等。
  • 2.ResourceManager 为该应用程序分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster。
  • 3 ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤 4~7。
  • 4 ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。 
  • 5. 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
  • 6. NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序 等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  • 7. 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
  • 8. 应用程序运行完成后, ApplicationMaster 向 ResourceManager 注销并关闭自己。

五、Yarn集群配置

node manager在物理上应该跟data node部署在一起

resource manager在物理上应该独立部署在一台专门的机器上

cd /root/apps/hadoop-2.8.5/etc/hadoop

1、修改配置文件:

vi yarn-site.xml

代码语言:javascript复制
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hdp-01</value>
  </property>


  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

其中,名称yarn.resourcemanager.hostname指的是运行ResourceManager机器所在的节点位置;名称yarn.nodemanager.aux-services在hadoop2.2.0版本中是mapreduce_shuffle,一定要看清楚。

修改mapred-site.xml,内容如下(默认是template后缀结尾,去掉后缀改为xml即可)

代码语言:javascript复制
<configuration> 
 <property> 
  <name>mapreduce.framework.name</name> 
  <value>yarn</value> 
 </property> 
</configuration>

其中,名称mapreduce.framework.name指的是使用yarn运行mapreduce程序。

启动了HDFS之后,就可以启动yarn了。执行命令start-yarn.sh即可启动MapReduce集群。

scp这个yarn-site.xml到其他节点

启动yarn集群:start-yarn.sh  (注:该命令应该在resourcemanager所在的机器上执行)

用jps检查yarn的进程,用web浏览器查看yarn的web控制台

http://hdp-01:8088

关于参数yarn-site.xml 修改

http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

六、MapReduce程序在Yarn启动-运行-注销全流程


本文部分参考文章:https://www.jianshu.com/p/bac54467ac3a

本文来源itcats_cn,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处

0 人点赞