跟我一起云计算(2)——YARN
来源:互联网 发布:开网店哪个软件最好 编辑:程序博客网 时间:2024/06/05 15:21
介绍
Apache Hadoop YARN作为hadoop的子项目加入到Hadoop Common (core libraries), Hadoop HDFS (storage) and Hadoop MapReduce (the MapReduce implementation) ,它也是apache的顶级工程。
在Hadoop 2.0中,各个客户端会向运行在YARN上的MapReduce v2框架提交种种MapReduce应用。而在Hadoop 1.0中,各个客户端则向MapReduce v1框架提交MapRecude应用。
这两类API都引用开发者可用的MapRecude框架来创建MapReduce应用。org.apache.hadoop.mapred API是最早的API,最广泛地使用在MapReduce应用的创建中。任何使用mapred API开发的MapReduce v1应用都可以提交至运行在YARN上的MapReduce v2框架,并在该框架中运行。在这种情况下,无须修改该MapReduce应用。
hadoop1.0和2.0的区别
直接看图会看的比较清晰:
作为hadoop2.0的一部分,YARN有资源管理的能力,所以它能够使用多个新的引擎。使用YARN,你能运行多个应用在hadoop上,如下图:
MapReduce2.0——YARN的基本架构
MapReduce在Hadoop 0.23时已经经历了一次大规模更新,新版本的MapReduce2.0被称为YARN或MRv2。
YARN 的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。
ResourceManager 和每个slave结点的NodeManager(NM)构成了数据计算框架。ResourceManager负责最终将资源分配到各个应用程序。 NodeManager是每台机器的框架代理,负责管理容器,监控它们的资源使用情况(CPU,内存,硬盘,网络),同时向 ResourceManager/Scheduler汇报。
针对各个应用程序的ApplicationMaster实际上是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。ApplicationMaster同时负责向Scheduler请求适当的资源容器,跟踪它们的使用状态并监控其进展。
ResourceManager中有两个主要组件:Scheduler和ApplicationsManager。
Scheduler 负责给应用程序分配资源。Scheduler从某种意义上说是一种纯粹的调度,它不监控和跟踪应用程序的状态,另外它也不负责重启应用程序或者硬件故障造成的失败。Scheduler根据应用程序的资源需求执行调度,这些需求基于一个抽象的资源概念Container,包括内存、CPU、硬盘和网络等。
ApplicationsManager负责接收作业提交,将应用程序分配给具体的ApplicationMaster,并负责重启失败的ApplicationMaster。
YARN在接口上兼容于此前的稳定版本(Hadoop 0.20.205),这意味着以前的MapReduce作业重新编译后就可以在YARN下运行。
MapReduce
MapReduce的数据流程图:
MapReduce的问题:
在最初推出的几年,也得到了众多的成功案例,获得业界广泛的支持和肯定,但随着分布式系统集群的规模和其工作负荷的增长,原框架的问题逐渐浮出水面,主要的问题集中如下:
JobTracker 是 Map-reduce 的集中处理点,存在单点故障。
JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker fail 的风险,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限。
在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单,没有考虑到 cpu/ 内存的占用情况,如果两个大内存消耗的 task 被调度到了一块,很容易出现 OOM。
在 TaskTracker 端,把资源强制划分为 map task slot 和 reduce task slot, 如果当系统中只有 map task 或者只有 reduce task 的时候,会造成资源的浪费,也就是前面提过的集群资源利用的问题。
源代码层面分析的时候,会发现代码非常的难读,常常因为一个 class 做了太多的事情,代码量达 3000 多行,,造成 class 的任务不清晰,增加 bug 修复和版本维护的难度。
从操作的角度来看,现在的 Hadoop MapReduce 框架在有任何重要的或者不重要的变化 ( 例如 bug 修复,性能提升和特性化 ) 时,都会强制进行系统级别的升级更新。更糟的是,它不管用户的喜好,强制让分布式集群系统的每一个用户端同时更新。这些更新会让用户为了验证他们之前的应用程序是不是适用新的 Hadoop 版本而浪费大量时间。
YARN的安装
可参考:
YARN的demo
示例可参考:
YARN框架用到的一些设计模式
可以参考:
YARN总结
个人总结了一下,其实主要是以下两点:
1、整合其它应用,比如和storm的整合,可以使用strom-yarn等。
2、将原来JobTracker的工作进一步细分,提高性能。
- 跟我一起云计算(2)——YARN
- 跟我一起云计算(5)——Shards
- 跟我一起云计算(6)——openAPI
- 跟我一起云计算(5)——Shards
- 跟我一起云计算(3)——hbase
- 跟我一起云计算(1)——storm
- 跟我一起学 Hadoop YARN
- 跟我一起写Makefile—概述
- 跟我一起写makefile—陈皓
- 跟我一起写Makefile(2)
- 跟我一起数据挖掘(19)——什么是数据挖掘(2)
- 跟我一起玩嵌入式开发——概述
- 跟我一起写makefile-2(简介2)
- 跟我一起写makefile(1、2)
- 《跟我一起写Makefile》读书笔记(2)
- 跟我一起学STL(2)——vector容器详解
- 转———跟我一起学makefile(-)
- 跟我一起写 Makefile (一)——Makefile 介绍
- C++ 操作符重载 的学习
- 如何用消息系统避免分布式事务?
- Socket编程(C语言实现):socket()函数英文翻译
- Blowin' in the wind
- 【leetcode】【Easy】【448. Find All Numbers Disappeared in an Array】【正负位标记】【Array】
- 跟我一起云计算(2)——YARN
- Python 中的缺失值及其处理
- 基于Redis+MySQL+MongoDB存储架构应用
- 几种常用加密算法比较
- spark Runtime内幕解密
- C#导入程序
- STL queue的使用
- java发送邮件
- 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink