第二代map-reduce架构YARN解析
需求
我们在考虑hadoop map-reduce框架的时候,最重要需包括:
1. reliability 可靠性,主要是jobtracker,resource manager可靠性
2. availability 可用性
3. scalability 可扩展性,能支撑10000到20000节点的cluster
4. backward compatibility 向后兼容性,支持之前写mapreduce application能不用修改而直接在新的框架上运行
5. evolution 可演化性,使得用户能对于软件栈(hive, pig等)能升级使之兼容
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的时候提供重启
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
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中申请其他资源
AM负责计算资源需求,并转换成Scheduler理解的协议
Map-Reudce Job 执行流程如下:
1. MR JobClient提交job到RM中的ASM而不是JobTracker
2. YARN ASM和Scheduler协调获得MR AM的container,并启动它
3. MR AM启动并注册到ASM中
4. MR JobClient从ASM中获取MR AM的信息,然后直接和AM通信来获取status,counters等等
5. MR AM 计算input-splits,创建所有maps的resource requests
6. AM执行job setup API(Hadoop MR OutputCommitter)
7. AM提交map/reduce tasks的resouce requests到YARN Scheduler,从RM中获得containers,然后从获得的containers中得到合适的task来和NM通信启动container
8. MR AM监控到每个task,如果task fail或者不反应时会重新申请资源
9. MR AM执行OutputCommitter的task cleanup代码
10. 一旦map和reduce tasks都完成了,MR AM会执行OutputCommitter的job commit和abort api
11. job完成,MR AM退出
MapReduce ApplicationMaster有以下部件:
1. Event Dispatcher 中央event的协调器
2. ContainerAllocator 负责将task资源需求转换成resource requests协议
3. ClientService 负责和MR JobClient通信来反馈status,counter,进度信息
4. TaskListener 从map/reduce tasks获取heartbeats
5. TaskUmbilical 从map/reduce tasks获取heartbeat和status信息
6. ContainerLauncher 负责和NM通信来启动容器
7. JobHistoryEventHandler 写job history事件到HDFS
8. Job 负责维护job和tasks的状态
参考:
http://dongxicheng.org/mapreduce-nextgen/nextgen-mapreduce-introduction
https://issues.apache.org/jira/browse/MAPREDUCE-279
第二代map-reduce架构YARN解析的更多相关文章
- 入门大数据---Map/Reduce,Yarn是什么?
简单概括:Map/Reduce是分布式离线处理的一个框架. Yarn是Map/Reduce中的一个资源管理器. 一.图形说明下Map/Reduce结构: 官方示意图: 另外还可以参考这个: 流程介绍: ...
- Hadoop :map+shuffle+reduce和YARN笔记分享
今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...
- Map/Reduce的类体系架构
Map/Reduce的类体系架构 Map/Reduce案例解析: 先以简单的WordCount例程, 来讲解如何去描述Map/Reduce任务. public static void main(Str ...
- 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解(转)
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
- map reduce
作者:Coldwings链接:https://www.zhihu.com/question/29936822/answer/48586327来源:知乎著作权归作者所有,转载请联系作者获得授权. 简单的 ...
- Map/Reduce个人实战--生成数据测试集
背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...
- Map/Reduce之间的Partitioner接口
一.Partitioner介绍 Partitioner的作用是对Mapper产生的中间结果进行分片,以便将同一分组的数据交给同一个Reduce处理,它直接影响Reduce阶段的负载均衡(个人理解:就是 ...
随机推荐
- 顺为资本CEO许达来:为什么说中国创业者很幸福?(附PPT)
顺为资本创始合伙人许达来 编者按:许达来,顺为资本创始合伙人及CEO,代表性投资项目包括小米科技.丁香园.一起作业.加一联创.金山软件及兴达国际等. 本文为许达来在新浪创业举办的新创课活动上的内容分享 ...
- Spring Boot 属性配置和使用(转)
Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...
- Python转码问题的解决方法:ignore,replace,xmlcharrefreplace
比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作 s.decode('gbk').encode('utf-8′) 可是,在实际开发中,我发现,这种办法经常会出现异常: Un ...
- VC中TRACE()的用法
个人总结:最近看网络编程是碰到了TRACE语句,不知道在哪里输出,查了一晚上资料也没找出来,今天终于在CSDN上找到了,真是个高地方啊,方法如下: 1.在MFC中加入TRACE语句 2.在TOOLS- ...
- [置顶] JAVA概述(6)常量,关键字,进制转换
21.关键字.... 变量: 就是将不确定的数据进行存储.也就是需要在内粗恩中开辟一个空间. 整数类型 1个字节 byte 占 8位 -128~~~127 2 ...
- redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用
近期使用redis碰到了多个并发处理同一个缓存的情况.在这样的情况下须要进行加锁机制. 本来想使用java自带的ReadWriteLock进行设置读写锁,这也是上家公司使用的方法. 后来经过商讨,给予 ...
- mysql自动备份(windows)
许多时候,为了数据安全,我们的mysql数据库需要定期进行备份,下面介绍两种在windows下自动备份方法: 1.复制date文件夹备份 ============================ 例子 ...
- 省份、城市、区县三级联动Html代码
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- [置顶] jeecg-framework-3.3.2-RELEASE 最新版本发布
平台介绍 JEECG(J2EE CodeGeneration)是一款基于代码生成器的智能开发平台,引领新开发模式(OnlineCoding模式->代码生成器模式->手工MERGE智能开 ...
- windows下各个浏览器用html5进行h.264大视频播放的性能对比说明
最近在调查windows下哪种浏览器进行大视频播放时候稳定性比较高. 举h.264的4g的视频为例. 选用的浏览器有ie10,firefox,chrome.(因为opera不支持h.264所以没有考虑 ...