需求
我们在考虑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解析的更多相关文章

  1. 入门大数据---Map/Reduce,Yarn是什么?

    简单概括:Map/Reduce是分布式离线处理的一个框架. Yarn是Map/Reduce中的一个资源管理器. 一.图形说明下Map/Reduce结构: 官方示意图: 另外还可以参考这个: 流程介绍: ...

  2. Hadoop :map+shuffle+reduce和YARN笔记分享

    今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...

  3. Map/Reduce的类体系架构

    Map/Reduce的类体系架构 Map/Reduce案例解析: 先以简单的WordCount例程, 来讲解如何去描述Map/Reduce任务. public static void main(Str ...

  4. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  5. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  6. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

  7. map reduce

    作者:Coldwings链接:https://www.zhihu.com/question/29936822/answer/48586327来源:知乎著作权归作者所有,转载请联系作者获得授权. 简单的 ...

  8. Map/Reduce个人实战--生成数据测试集

    背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...

  9. Map/Reduce之间的Partitioner接口

    一.Partitioner介绍 Partitioner的作用是对Mapper产生的中间结果进行分片,以便将同一分组的数据交给同一个Reduce处理,它直接影响Reduce阶段的负载均衡(个人理解:就是 ...

随机推荐

  1. Logback相关知识汇总

    例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4格式修饰符,与转换符共同使用:可选的格式修饰符位于“%”和转换符之间.第一个可选修饰符是左对齐 标志 ...

  2. Hdu 2364 Escape

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=2364 这道题的特殊之处在于能转弯时不能直走,必须转弯,所以在行走时,要判断能否转弯,不能转弯 ...

  3. hdu 1875 畅通project再续

    链接:hdu 1875 输入n个岛的坐标,已知修桥100元/米,若能n个岛连通.输出最小费用,否则输出"oh!" 限制条件:2个小岛之间的距离不能小于10米,也不能大于1000米 ...

  4. Android图片异步加载的方法

    很多时候,我们在加载大图片或者需要处理较多图像数据的时候,希望显示效果能好点,不至于因为图片解码耗时产生ANR等情况,不得不说异步加载是个不错的方法.说到异步加载,避免application出现ANR ...

  5. 比赛--找丢失的数--解题报告T

    找丢失的数 题目大意: There is a permutation without two numbers in it, and now you know what numbers the perm ...

  6. CodeForces 546D Soldier and Number Game 打表(求质因子个数)

    题目:戳我这个题与HDUOJ 5317有异曲同工之妙 题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数n,问你n有多少个质因子,不过这里n是通过a!/b!给定的,也就是说n=(a!/ ...

  7. 随手记今天跟的几个iOS项目代码的问题

    休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验.发现.跟进问题. 第一个问题是点击某个cell就挂掉的现象,同事表示必现但挺神奇.由于挂掉的时候没有啥有意义的信息,所以先简单粗 ...

  8. Tomcat 常规配置并通过zabbix 监控 jvm状态

    一:jdk和tomcat基础 apache有两种方式运行php,一是使用模块,二是使用fastcgi nginx也可以通过fastcgi处理动态请求,也可以转发至tomcat tomcat监控主要是监 ...

  9. (Problem 3)Largest prime factor

    The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...

  10. 显示器中关于HS,VS,HBP,VBP参数浅析

    先来解释几个缩写的含义 HSYNC : 水平同步信号(horizontal synchronization signal) VSYNC :  垂直同步(Vertical Sync):场同步 FR : ...