1 YARN简介
为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题?提出的,针对Hadoop 1.0中的MapReduce在扩展性和多框架?持??的不?,提出了全新的资源管理框架 YARN.
Apache YARN(Yet another Resource Negotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于?个分布式的操作系统平 台,?MapReduce等计算程序则相当于运?于操作系统之上的应?程序。
yarn被引?Hadoop2,最初是为了改善MapReduce的实现,但是因为具有?够的通?性,同样可以?持其他的分布式计算模式,?如Spark,Tez等计算框架。
?注意:还有?层应?是运?在MapReduce,Spark或者Tez之上的处理框架,如 Pig,Hive和Crunch等。
2 YARN的设计思想(重点)
2.1 基本思想
yarn的基本思想是将资源管理和作业调度/监视功能划分为单独的守护进程。其思想是拥有?个全局ResourceManager (RM),以及每个应?程序拥有?个 ApplicationMaster (AM)。应?程序可以是单个作业,也可以是?组作业。
?个ResourceManager和多个NodeManager构成了yarn资源管理框架。他们是 yarn启动后?期运?的守护进程,来提供核?服务。
ResourceManager,是在系统中的所有应?程序之间仲裁资源的最终权威,即管理整个 集群上的所有资源分配,内部含有?个Scheduler(资源调度器)
NodeManager,是每台机器的资源管理器,也就是单个节点的管理者,负责启动和监视 容器(container)资源使?情况,并向ResourceManager及其 Scheduler报告使?情况
container:即集群上的可使?资源,包含cpu、内存、磁盘、?络等
ApplicationMaster(简称AM)实际上是框架的特定的库,每启动?个应?程序,都会启动?个AM,它的任务是与ResourceManager协商资源,并与NodeManager?起执?和监视任务
扩展)YARN与MapReduce1的?较
??2.2 Yarn的配置
yarn属于hadoop的?个组件,不需要再单独安装程序,hadoop中已经存在配置?件的设置,本身就是?个集群,有主节点和从节点。
注意:<value></value>之间的值不能有空格
在mapred-site.xml中的配置如下:
<!--?于执?MapReduce作业的运?时框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史任务的内部通讯地址-->
<property>
<name>MapReduce.jobhistory.address</name>
<value>qianfeng01:10020</value>
</property>
<!--历史任务的外部监听??-->
<property>
<name>MapReduce.jobhistory.webapp.address</name>
<value>qianfeng01:19888</value>
</property>
在 yarn-site.xml中的配置如下:
<!--配置resourcemanager的主机-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>qianfeng01</value>
</property>
<!--配置yarn的shuffle服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定shuffle对应的类 -->
<property>
<name>yarn.nodemanager.auxservices.MapReduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--配置resourcemanager的scheduler的内部通讯地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>qianfeng01:8030</value>
</property>
<!--配置resoucemanager的资源调度的内部通讯地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>qianfeng01:8031</value>
</property>
<!--配置resourcemanager的内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>qianfeng01:8032</value>
</property>
<!--配置resourcemanager的管理员的内部通讯地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>qianfeng01:8033</value>
</property>
<!--配置resourcemanager的web ui 的监控??-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>qianfeng01:8088</value>
</property>
1)启动服务
-1. 启动historyserver,可以访问http://qianfeng01:19888
mr-jobhistory-daemon.sh start historyserver
-2. 启动resourcemanager 监控 http://master:8088
start-yarn.sh
start-all.sh
2) ?志位置
jps:当启动进程时出错了解决步骤:可以查看?志
如果是hdfs上的问题,则查看对应的?志
less 或 tail -1000 $HADOOP_HOME/logs/hadoop-{user.name}- {jobname}-{hostname}.log
如果是yarn,则查看
less 或tail -1000 $HADOOP_HOME/logs/yarn-{user.name}- {jobname}-{hostname}.log
2.3. YARN的Job提交
在MR程序运?时,有五个独?的进程:
- YarnRunner:?于提交作业的客户端程序
- ResourceManager:yarn资源管理器,负责协调集群上计算机资源的分配
- NodeManager:yarn节点管理器,负责启动和监视集群中机器上的计算容器 (container)
- Application Master:负责协调运?MapReduce作业的任务,他和任务都在容器中运?,这些容器由资源管理器分配并由节点管理器进?管理。
- HDFS:?于共享作业所需?件。
整个过程如下图描述:
?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轮询时,知道成功完成,就会通知客户端,并把统计信息输出到控制台
2.4. YARN的三种调度器
2.4.1 什么是Scheduler(调度器)
Scheduler即调度器,根据容量、队列等限制条件(如每个队列分配?定的资源,最多执??定数量的作业等),将系统中的资源分配给各个正在运?的应?程序。
2.4.2 YARN提供的三种内置调度器:
1) FIFO Scheduler(FIFO调度器)
FIFO 为 First Input First Output 的缩写,先进先出。FIFO 调度器将应?放 在?个队列中,按照先 后顺序 运?应?。
这种策略较为简单,但不适合共享集群,因为?的应?会占?集群的所有资 源,每个应?必须等待直到轮到??。
优点:简单易懂,不需要任何配置
缺点:不适合共享集群,?的应?会占据集群中的所有资源,所以每个应?都必须等待, 直到轮到??执?。
如下图所示,只有当job1全部执?完毕,才能开始执?job2
?2) Capacity Scheduler(容量调度器)
容量调度器 Capacity Scheduler 允许多个组织共享?个 Hadoop 集群。使?容量调度器时,?个独?的专?队列保证?作业?提交就可以启动。
优点:?任务不会因为前?有?任务在执?,?只能?直等下去
缺点:这种策略是以整个集群利?率为代价的,这意味着与使?FIFO调度器相?,?作业执?的时间要?上?些。
?如图所示,专?留了?部分资源给?任务,可以在执?job1的同时,不会阻塞job2的执?,但是因为这部分资源是?直保留给其他任务的,所以就算只有?个任务,也?法为其分配全部资源,只能让这部分保留资源闲置着,有着?定的资源浪费问题。
3) Fair Scheduler(公平调度器):
公平调度器的?的就是为所有运?的应?公平分配资源。使?公平调度器时,不需要预留?定量的资源,因为调度器会在所有运?的作业之间动态平衡资源,第?个(?)作业启动时,它也是唯?运?的作 业,因?获得集群中的所有 资源,当第?个(?)作业启动时,它被分配到集群的?半资源,这样每个作业都能公平共享资源。
?
?如图所示,就像是把好?个任务拼接成了?个任务,可以充分利?资源,同时?不会因为?任务在前?执??导致?任务?直?法完成。
|