第二代map-reduce架构YARN解析

背景

最近开始调研YARN-下一代资源管理系统,hadoop 2.0主要由三部分组成Mapreduce, YARN和HDFS,其中HDFS主要增加了HDFS Federation和HDFS HA,Mapreduce是运行在YARN之上的一种编程模型,而YARN是统一资源管理系统,YARN可以认为是HADOOP生态圈的云操作系统,在YARN之上可以运行多种计算编程框架,比如传统的MapReduce,Gigraph图计算,Spark迭代计算,Storm实时流计算模型等等,YARN的引入能极大提高集群的资源利用率,降低运维成本,共享底层数据。HADOOP 1.0发展了6年已经足够稳定,但是YARN出来2年让我们看到更多的优势,各大互联网公司都在往YARN方向迁移,YARN一定是未来。

Hadoop 1.0到2.0的架构演化:

YARN Stack:

需求

我们在考虑hadoop map-reduce框架的时候,最重要需求包括:
1. reliability 可靠性,主要是jobtracker,resource manager可靠性
2. availability 可用性
3. scalability 可扩展性,能支撑10000到20000节点的cluster
4. backward compatibility 向后兼容性,支持之前写mapreduce application能不用修改而直接在新的框架上运行
5. evolution 可演化性,使得用户能对于software stack软件栈(hive, pig, hbase, storm等)能升级使之兼容
6. predictable latency 可预测的延迟时间
7. cluster utilization 集群利用率
其他的需求包括:
1. 支持除了map-reduce之外其他的编程模型,比如图计算,流式计算
2. 支持短时间的services
基于上述的需求,很明显需要对于hadoop架构重新思考,现在的mapreduce框架很慢满足,未来需要一个两层的调度器

下一代MAPREDUCE(YARN)
MRv2拆分了JobTracker两个最重要的功能,Resource Managerment资源管理和Job Scheduling/Monitoring作业调度和监控。会有一个全局的ResourceManager(RM)和每个application独立的一个ApplicationMaster(AM),一个application可以是一个单独的mapreduce job也可以是一个DAG Job。ResourceManager和每个slave节点一个的NodeManager组成了计算框架,对于所有的applications,RM拥有绝对的控制权和对于resource的分配权,而AM则是一个框架下特定的一个库,它会和RM协商资源,同时和NodeManager通信来执行和监控task

ResourceManager有两个组件

1. Scheduler调度器

2. ApplicationsManager (ASM)

MRv2引入了新的概念叫Resource Container(资源容器),它由cpu,内存,disk,network组成,它不同于第一代的map slot和reduce slot,slot只能对于整体node的资源划分粒度很粗,如果slot个数为N,则每个slot就是整台机器资源的1/N,而引入container后,application则可以根据自身的需求动态申请所需的资源。

Scheduler是可插拔的,它来负责分配cluster resources,目前支持的有CapacilityScheduler和FairScheduler

ApplicationsManager负责接收job提交,并且申请第一个container来运行ApplicationMaster,并且在AM failure的时候提供重启

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

NodeManager是每个slave节点上的daemon,它来负责启动application containers,监控resource使用情况(cpu, memory, disk, network),并且汇报给Scheduler

ApplicationMaster从Scheduler中得到合适的containers,并且跟踪他们的状态和进度

YARN v1.0

yarn 1.0 仅仅考虑了memory,每一个node都有多个minimum size of memory(比如512MB或者1GB),ApplicationMaster可以申请多个minimum memory size(注:现在已经支持CPU和memory两种资源隔离,对于内存采用线程监控方式,对于CPU采用cgroups隔离方式)

AM负责计算资源需求(比如input-splits),并且转换成Scheduler能理解的协议,比如<priority,(host,rack,*),memory, #containers>

比如对于map-reduce,AM得到input-splits后,将基于host地址的倒排表和containers数的限制大小提交给RM Scheduler。

Scheduler会尝试匹配相应的host,如果指定的host不能提供resources,就会提供相同rack下或者不同rack下的resources。AM可以接受,也可以拒接这些资源。

Scheduler调度器

在Scheduler和AM之间只有一个API

Response allocate(List<ResourceRequest> ask, List<Container> release)

AM通过一串ResourceRequest来申请资源,并且释放之前分配到的不需要的Containers

返回的Response中包含了一串新分配的Containers,上次AM和RM通信之后已经完成的container状态,集群可用资源量。AM收集完信息,并对失败的任务作出反应,剩余量(headroom)信息可以用来调整之后申请资源的策略,比如调整map和reduce数来防止死锁的情况(全部被map占满,reduce处于饥饿状态)

Resource Monitoring资源监控

Scheduler会从NM中周期性的获得已分配的container的资源使用情况,然后设置container为可用的状态提供给AM

Application submssion

apllication提交的流程如下:

1. 用户(通常在gateway上)提交job到ASM

1). 用户端首先生成一个ApplicationID

2). 打包Application描述定义,上传到HDFS上${user}/.staging/${application_id}

3). 提交application到ASM

2. ASM接受application提交

3. ASM和Scheduler协商获取第一个container来启动AM并启动之

4. 同时ASM提供AM的详细信息给client,使之能监控到progress状态

ApplicationMaster的生命周期

ASM管理着AM的生命周期,ASM负责启动AM,之后ASM监控AM,AM会周期性heartbeat给ASM来保证它还活着,如果failure的时候重启

ApplicationsManager部件

1. SchedulerNegotiator 负责和Scheduler协调来获得启动AM的container

2. AMContainerManager 负责启动和停止AM的container,会和合适的NM通信来完成

3. AMMonitor 负责管理AM的活跃性,如果有必要的话会重启AM

Availability 可用性

ResourceManager会将自己的状态保存在Zookeeper中还保证HA,基于zk状态保存策略可以迅速重启

NodeManager

一旦scheduler分配容器给application,NM就负责启动这些容器,它还保证分配的容器不会超过机器的资源总额

NM也负责task启动时候的环境设置,包括二进制和jar包等等

NM也提供一个service来管理本地节点的存储资源,比如对于map-reduce application会使用shuffle service来存储本地临时的map outputs,并且shuffle到reduce tasks

ApplicationMaster

AM负责和Scheduler协调资源,在NM中执行和监控task,当container失败的时候,需要从Scheduler中申请其他资源

时间: 2024-11-03 20:59:57

第二代map-reduce架构YARN解析的相关文章

Lucene-Hadoop, GFS中Map/Reduce的简单实现

Hadoop是一个用于构建分布式应用程序的框架.Hadoop框架给应用程序透明的提供了一组稳定和可靠的接口.这项技术的实现得易于映射/ 归约编程范式.在这个范式里,一个应用程序被分割成为许多的小的任务块.每一个这样的任务块被集群中的任意一个节点的计算机执行或重新执行.此外,这种范 式还提供了一种分布式的文件系统,这种文件系统用来存储数据于集群中相互间具有高带宽的计算机上.映射/归约和分布式文件系统都被设计成为容错的结构.也 就是说,当集群中某个节点发生了故障整个文件系统或者映射/归约操作仍然能够

Map Reduce - the Free Lunch is not over?

微软著名的C++大师 Herb Sutter在2005年初的时候曾经写过一篇重量级的文章:"The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software",预言OO之后软件开发将要面临的又一次重大变革-并行计算. 摩尔定律统制下的软件开发时代有一个非常有意思的现象:"Andy giveth, and Bill taketh away.".不管CPU的主频有多快,我们始终有办法来利用

Map/Reduce Task JVM堆的大小设置优化

前一阵子发现用户提交的hive query和hadoop job会导致集群的load非常高,经查看配置,发现很多用户擅自将mapred.child.java.opts设置的非常大,比如-Xmx4096m(我们默认设置是-Xmx1024m),  导致了tasktracker上内存资源耗尽,进而开始不断swap磁盘上数据,load飙升 TaskTracker在spawn一个map/reduce task jvm的时候,会根据用户JobConf里面的值设定jvm的参数,然后写入一个taskjvm.sh

Python的filter, map, reduce和zip等内置序列函数

filter, map, reduce, zip都是针对python中的sequence数据类型的内置方法. 名词解释:本文中的iterable是指可迭代对象,包括sequence和iterator,及其他具有可迭代性的container. 1. filter(function, iterable) filter的工作原理是使用第一个参数对象(function或者None)来对第二参数对象iterable进行运算,并根据运算结 果的布尔值来过滤iterable中的元素. 对function返回值

分布式基础学习【二】 —— 分布式计算系统(Map/Reduce)

二. 分布式计算(Map/Reduce) 分布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce 框架所设计的分布式框架.在Hadoop中,分布式文件系统,很大程度上,是为各种分布式计 算需求所服务的.我们说分布式文件系统就是加了分布式的文件系统,类似的定义推广到分 布式计算上,我们可以将其视为增加了分布式支持的计算函数.从计算的角度上看, Map/Reduce框架接受各种格式的键值对文件作为输入,读取计算后,最终生成自定义格式的 输出文件.而从分布式的角

基于Hadoop的Map reduce编程(一)

翻译的一篇国外的关于hadoop mapreduce的文章,文章比较长,先翻译第一部分吧 翻译者:pconlin900 博客:http://pconline900.javaeye.com Hadoop是apache的一个开源的map-reduce框架,MapReduce是一个并行计算模型,用来处理海量数据.模型思想来源于google的Jeffrey Dean 和 Sanjay Ghemawat,包括map() reduce()两个主要的功能. 这是一个很简单的类似于Hadoop的MapReduc

Hadoop Map/Reduce教程

目的 这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面. 先决条件 请先确认Hadoop被正确安装.配置和正常运行中.更多信息见: Hadoop快速入门对初次使用者. Hadoop集群搭建对大规模分布式集群. 概述 Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集. 一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若

王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()

转载请注明出处:王亟亟的大牛之路 首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!! 本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈) 今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!! 函数式编程 函数是什么? 把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念. 函数式是什么? 函数没有变量,任意一个函数,只要输入

Python内置函数之filter map reduce介绍_python

Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>> N=range(10) >>> print filter(lambda x:x>