第二代MapReduce阶段解析
来源:互联网 发布:魔女的心脏知乎 编辑:程序博客网 时间:2024/05/17 04:38
MR1存在的问题:
1、JobTracker 是 Map-reduce 的集中处理点,存在单点故障。
2、JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker fail 的风险,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限。
3、在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单(map数大或reduce数大,说明这个作用大),没有考虑到 cpu/ 内存的占用情况,如果两个大内存消耗的 task 被调度到了一块,很容易出现 OOM内存溢出。
4、在 TaskTracker 端,把资源强制划分为 map task slot 和 reduce task slot(内存槽), 如果当系统中只有 map task 或者只有 reduce task 的时候,会造成资源的浪费,也就是集群资源利用的问题。
重构根本思想是将JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理(ResourceManager)和任务调度/监控(ApplicationMaster)。
ResourceManager全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。ResourceManager 和每一台机器的Node Manager能够管理用户在那台机器上的进程并能对进行计算。
事实上,每一个应用的 ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。
上图中 ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,它在执行过程中不对应用进行监控和状态跟踪(JobTracker有做)。同样,它也不能因为重启或硬件错误造成运行任务的失败。
ResourceManager 是基于应用程序对资源的需求进行调度的,每一个应用程序需要不同类型的资源因此就需要不同的容器(Container)。资源包括:内存,CPU,磁盘,网络等等。
RM提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。调度插件可以基于现有的容量调度和公平调度模型。
上图中 NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向RM汇报。
每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。
Yarn对比MR1的优势
设计上大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的进程分布式化了(ApplicationMaster),更安全。
在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的应用,让更多类型的编程模型能够跑在 Hadoop 集群中。
对资源的表示以内存为单位 ,比之前容易剩余 (map数、Reduce数)slot 数的方式更合理。没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。
MR1中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
Container 是 Yarn 为了将来作资源隔离而提出的一个框架(逻辑概念)。
- 第二代MapReduce阶段解析
- mapreduce 的map shuffle reduce 阶段解析
- 解析第二代身份证号码
- MapReduce作业Map阶段和Reduce阶段重要过程详述(Partitioner、Combiner、Shuffle三个阶段的解析)
- MapReduce的Shuffle阶段
- MapReduce的shuffle阶段
- 第二代map-reduce架构YARN解析
- hadoop mapreduce包含阶段介绍
- HFile Mapreduce阶段的优化
- mapreduce的shuffle阶段详解
- MapReduce详解之shuffle阶段
- 大数据学习笔记之二十九 Hadoop的第二代MapReduce YARN
- MapReduce combiner阶段 与shuffle阶段的区别
- Hadoop学习(9)----MapReduce阶段的Split阶段
- 关于hadoop mapreduce的job cleanup阶段
- mapreduce运行的5个阶段
- 7 MapReduce进阶之shuffle阶段
- MapReduce阶段map的setup() 和cleanup()
- 以面向对象思想写一个js函数
- 指针的类型 指针所指向 指向指针的引用
- 织梦模板下载:驾驶学校汽车类行业网站织梦模板
- 汇编常用指令笔记
- 旋转会对unity中物体的transform.forward的值产生影响
- 第二代MapReduce阶段解析
- sxt6.24
- Android屏幕适配
- 如何选择优质的企业建站织梦模板?
- __webpack_require__(...) is not a function
- Kotlin 中的 return、break 和 continue
- android 快速理解view的事件分发
- 11期6月期刊自荐
- 详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests