本节,主要介绍yarn的基本原理以及资源调度。在hadoop1.0不能满足多系统集成的背景下孕育了yarn的产生。由于多分布式系统可以很好的集成,因此yarn的出现使得整个集群的运维成本大大降低。同时,yarn可以很好的利用集群资源,避免资源的浪费。除此之外,yarn的出现实现了集群的数据共享问题。不同的分布式计算框架可以实现数据的共享,比如hadoop的mapreduce输出可以作为storm的输入。
client发出请求到resourceManager,resourceManager启动Appication master为任务分配相关的资源,分配完成后返回信息到resource Manager,再由resourceManager将任务分发到不同的NodeManager。NodeManager启动Container执行需要的MapReduce工作。
下面根据yarn的工作流程对yarn的工作机制进行解读。首先,client向ResourceManager发出任务请求。Resource Manager指定一个NodeManager启动其ApplicationMaster。ApplicationMaster将计算任务反馈给Resource Manager。ApplicationMaster将任务分割分发到不同的NodeManager。NodeManager启动Task执行work。
yarn具有双层调度策略,ResourceManager将资源分配给ApplicationMaster,ApplicationMaster再将资源分配给NodeManager。而且,yarn具有预留的调度策略。资源不够时,会为Task预留资源,知道积累充足。
yarn具有较好的容错机制。当任务失败,ResourceManager将失败任务告诉ApplicationMaster。由ApplicationMaster处理失败任务。ApplicationMaster会保存已经执行的Task,重启不会重新执行。
yarn支持多类型资源调度,其基于DRF算法实现(论文:“Dominant Resource Fairness: Fair Allocation of Multiple Resource Types”)。而且,其支持多种资源调度器FIFO、Fair Scheduler以及Capacity Scheduler 。最后,yarn支持多租户资源调度器包括支持资源按比例分配、层级队列划分方式以及支持资源抢占 。
yarn支持内存和CPU两种资源隔离。内存是一种“决定生死”的资源。CPU是一种“影响快慢”的资源。其中,内存隔离包括基于线程监控的方案和基于Cgroups的方案。而CPU隔离包括默认不对CPU资源进行隔离和基于Cgroups的方案。
yarn支持的调度语义包括请求某个特定节点/机架上的特定资源量、将某些节点加入(或移除)黑名单,不再为自己分配这些节点上的资 源以及请求归还某些资源。不支持的语义包括请求任意节点/机架上的特定资源量、请求一组或几组符合某种特质的资源、超细粒度资源以及动态调整Container资源 。
yarn是通用的统一资源管理系统,同时运行长应用程序和短应用程序 。长应用程序通常情况下,指永不停止运行的程序 ervice、HTTP Server等。短应用程序指短时间(秒级、分钟级、小时级)内会运行结束的程序 MR job、Spark Job等 。如下图所示,yarn使得集群中各种任务的执行成为可能。
1、MapReduce On YARN
MapReduce的执行过程如上图。首先,clien
t向ResourceManager发出任务请求。
Resource Manager指定一个NodeManager启动其ApplicationMaster。ApplicationMaster将计算任务反馈给Resource Manager。ApplicationMaster将任务分割分发到不同的NodeManager。NodeManager启动Task执行work。
2、DAG计算框架Tez
多个作业之间存在数据依赖关系,并形成一个依赖关系有向 图( Directed Acyclic Graph ),该图的计算称为“DAG计算”。Apache Tez是基于YARN的DAG计算框架其运行在YARN之上,充分利用YARN的资源管理和容错等功能;Tez提供了丰富的数据流(dataflow)API、扩展性良好的“Input-Processor-Output”运行时模型以及动态生成物理数据流关系。
如上图所示,在MapReduce情况下,如果执行wordcount和topK需要启动两个MapReduce Job。但是,如果用Tez只需要启动一个任务。第一个MapReduce实现wordcount,紧接着执行一个reduce作业实现topK。Tez执行的作业类似于树状拓扑结构。Tez的工作原理类似于上述hadoop的执行流程,如下图所示。
Tez 优化技术 包括:
1、ApplicationMaster缓冲池:
1、ApplicationMaster缓冲池:
(1).作业提交到AMPoolServer服务上;
(2).预启动若干个ApplicationMaster,形成一个 ApplicationMaster缓冲池.
2、预先启动Container :ApplicationMaster启动时可以预先启动若干个Container 。
3、Container重用:任务运行完成后,ApplicationMaster不会马上注销它使 用的Container,而是将它重新分配给其他未运行的任务。
Tez 应用场景
1、直接编写应用程序
1、直接编写应用程序
(1).Tez提供了一套通用编程接口;
(2).适合编写有依赖关系的作业。
2、优化Pig、Hive等引擎
(1).下一代Hive:Stinger ;
(2).好处1:避免查询语句转换成过多的MapReduce作业后产 生大量不必要的网络和磁盘IO;
(3).好处2:更加智能的任务处理引擎。
3、流式计算框架Storm
流式(Streaming)计算,是指被处理的数据像流水一样不断流入系统,而系统需要针对每条数据进行实时处理和计算, 并永不停止(直到用户显式杀死进程);传统做法:由消息队列和消息处理者组成的实时处理网络进行实时计算其缺乏自动化、健壮性并且伸缩性差 。因此,storm孕育而生。
如上图所示,Nimbus相当于ResourceManager。Supervisor相当于NodeManager。Nimbus不直接调度Supervisor,而是通过Zookeeper调度。Task中,Spout和Blot相当于Map/Reduce。整个作业是一种拓扑结构。执行以作业流的方式执行。运行在yarn上的storm运行机制类似于hadoop,如下图所示。
4、内存计算框架Spark
spark克服了MapReduce在迭代式计算和交互式计算方面的不足,引入RDD(Resilient Distributed Datasets)数据表示模型。RDD是一个有容错机制,可以被并行操作的数据集合,能够被缓存到内存或磁盘上。
spark如上图所示,可以执行多个stage,最后不同的stage的结果可以合并进行下一步的计算。
Spark在Yarn上的运行机制同样类似于hadoop。
上图为Spark的生态系统。Shark是spark的类sql流语句。sparkStreaming是spark的流式分布式计算框架。Graphx是spark的图计算库MLBase是spark的机器学习库。
上述,我们介绍了Yarn的原理与调度机制。接下来,将逐个讲解各部分。