|
第2章 YARN设计理念与基本架构; m9 x7 j6 H# n+ n/ ]
在第1章, 我们介绍了Hadoop学习环境的搭建方法, 这是学习Hadoop需要进行的最基本的准备工作。 在这一章中, 我们将从
/ O4 Z: Y9 d( G A& Q设计理念和基本架构方面对Hadoop YARN进行介绍, 这也属于准备工作的一部分。 通过本章的介绍将会为下面几章深入剖析3 t. N) i2 u; @7 }$ m6 n6 k
YARN内部实现奠定基础。
( c5 Y: H5 |+ J( R由于MRv1在扩展性、 可靠性、 资源利用率和多框架等方面存在明显不足, Apache开始尝试对MapReduce进行升级改造, 于* H9 ?- f5 o+ _; k
是诞生了更加先进的下一代MapReduce计算框架MRv2。 由于MRv2将资源管理模块构建成了一个独立的通用系统YARN, 这直接. n; Z* U/ O# V& U! G& k
使得MRv2的核心从计算框架MapReduce转移为资源管理系统YARN。 在本章中, 我们将从背景、 设计思想和基本架构等方面对
) X- c* ~4 V2 M: [YARN框架进行介绍。
" w9 B& ]! X% ]2.1 YARN 产生背景
2 R/ k% c1 S; V0 v+ \8 ^. \2 N3 d- F2.1.1 MRv1 的局限性
8 |$ d1 q7 Z( J6 f& n; p- }YARN是在MRv1基础上演化而来的, 它克服了MRv1中的各种局限性。 在正式介绍YARN之前, 我们先要了解MRv1的一些局) p: X) Q; z0 J4 r
限性, 这可概括为以下几个方面:
6 D+ h3 m( |* Y, Z❑扩展性差8 `# p8 {8 z$ z: \0 E( [
。 在MRv1中, JobTracker同时兼备了资源管理和作业控制两个功能, 这成为系统的一个最大瓶颈, 严重制约了Hadoop集群扩展
$ _) F8 z4 P" K2 p' a1 w& e性。9 h4 B5 K9 x# r6 s2 w
❑可靠性差5 ?0 i( p/ c* I
。 MRv1采用了master/slave结构, 其中, master存在单点故障问题, 一旦它出现故障将导致整个集群不可用。
' X6 C h1 ~" U2 D6 f7 v❑资源利用率低( ?7 m1 A8 }( O8 k
。 MRv1采用了基于槽位的资源分配模型, 槽位是一种粗粒度的资源划分单位, 通常一个任务不会用完槽位对应的资源, 且其他5 a* p( \; \' b/ U" l5 o
任务也无法使用这些空闲资源。 此外, Hadoop将槽位分为Map Slot和Reduce Slot两种, 且不允许它们之间共享, 常常会导致一种7 H+ k. h) [9 Y* H5 o2 S3 ]1 ^) ~5 i7 f
槽位资源紧张而另外一种闲置( 比如一个作业刚刚提交时, 只会运行Map Task, 此时Reduce Slot闲置) 。* }( r3 r# l) C9 D( O5 @
❑无法支持多种计算框架
, J* [$ I" S; @( d/ u。 随着互联网高速发展, MapReduce这种基于磁盘的离线计算框架已经不能满足应用要求, 从而出现了一些新的计算框架, 包括* X, V1 S; o) f1 B
内存计算框架、 流式计算框架和迭代式计算框架等, 而MRv1不能支持多种计算框架并存。( D3 m1 W: r+ c$ `% }/ h- F
为了克服以上几个缺点, Apache开始尝试对Hadoop进行升级改造, 进而诞生了更加先进的下一代MapReduce计算框架
% n+ ?: |- L4 J! t- ? l+ m- |$ Y- UMRv2。 正是由于MRv2将资源管理功能抽象成了一个独立的通用系统YARN, 直接导致下一代MapReduce的核心从单一的计算框; `) R: O( f) L$ k# M
架MapReduce转移为通用的资源管理系统YARN。 为了让读者更进一步理解以YARN为核心的软件栈, 我们将之与以MapReduce为
; V0 }+ Q: W+ w* f3 J核心的软件栈进行对比, 如图2-1所示, 在以MapReduce为核心的软件栈中, 资源管理系统YARN是可插拔替换的, 比如选择
# c7 g* B+ |+ V2 V" s! h" u/ bMesos替换YARN, 一旦MapReduce接口改变, 所有的资源管理系统的实现均需要跟着改变; 但以YARN为核心的软件栈则不同,: F) o* a( ~' v' S( c
所有框架都需要实现YARN定义的对外接口以运行在YARN之上, 这意味着Hadoop 2.0可以打造一个以YARN为核心的生态系统。+ ?7 u0 z$ y% V/ D
图2-1 以MapReduce为核心和以YARN为核心的软件栈对比
9 w5 |1 w1 _, U# Y$ D4 U2.1.2 轻量级弹性计算平台
. {* Z/ g8 ?5 F/ q. t2 B- G! y# o随着互联网的高速发展, 基于数据密集型应用的计算框架不断出现, 从支持离线处理的MapReduce, 到支持在线处理的0 x2 z3 T5 c j5 [( @' Q0 W Y8 M5 Y
Storm, 从迭代式计算框架Spark到流式处理框架S4, 各种框架诞生于不同的公司或者实验室, 它们各有所长, 各自解决了某一类
; k" D5 `" k; y5 u应用问题。 而在大部分互联网公司中, 这几种框架可能同时被采用。 比如在搜索引擎公司中, 一种可能的技术方案如下: 网页建
7 F/ g2 U4 [% E2 R立索引采用MapReduce框架, 自然语言处理/数据挖掘采用Spark( 如网页PageRank计算、 聚类分类算法等) , 对性能要求很高的' G: z- O/ ~ l, z
数据挖掘算法用MPI等。 考虑到资源利用率、 运维成本、 数据共享等因素, 公司一般希望将所有这些框架都部署到一个公共的集2 E* T4 h4 W: b+ z8 s
群中, 让它们共享集群的资源, 并对资源进行统一使用, 同时采用某种资源隔离方案( 如轻量级cgroups) 对各个任务进行隔离,
( U8 s( x0 M! q& ~" ^4 s' g4 r这样便诞生了轻量级弹性计算平台, 如图2-2所示。 YARN便是弹性计算平台的典型代表。' G( X' g; q4 L. t! B
从上面分析可知, YARN实际上是一个弹性计算平台, 它的目标已经不再局限于支持MapReduce一种计算框架, 而是朝着对
( k( T4 K. K+ G! r: Z% W: T6 V4 S多种框架进行统一管理的方向发展。
* V1 c2 K2 h; F: Z' I相比于“一种计算框架一个集群”的模式, 共享集群的模式存在多种好处:
/ x; ?; T0 X, b3 O, o' g. i/ }❑资源利用率高
' e- o/ j3 a% C。 如图2-3所示, 如果每个框架一个集群, 则往往由于应用程序数量和资源需求的不均衡性, 使得在某段时间内, 有些计算框架! ?, T( G; q( [
的集群资源紧张, 而另外一些集群资源空闲。 共享集群模式则通过多种框架共享资源, 使得集群中的资源得到更加充分的利用。
4 x: V0 m+ h, o❑运维成本低" {3 s) h( ~/ Z& C
。 如果采用“一个框架一个集群”的模式, 则可能需要多个管理员管理这些集群, 进而增加运维成本, 而共享模式通常需要少数管( e& }6 @, h& `- a
理员即可完成多个框架的统一管理。
) Z% D. D" J; b' N' c+ O图2-2 以YARN为核心的弹性计算平台的基本架构
% X5 Q, I, `# {& B图2-3 共享集群模式使得资源利用率提高
. N) L+ e8 W1 z1 c% Y❑数据共享. R/ Z1 }, Z: ^& W; W5 L0 b
。 随着数据量的暴增, 跨集群间的数据移动不仅需花费更长的时间, 且硬件成本也会大大增加, 而共享集群模式可让多种框架1 o8 d+ S* ^/ `8 B) A2 }0 v
共享数据和硬件资源, 将大大减小数据移动带来的成本。
% \% i4 ~5 [: g
( M6 ^% R- t9 C: @9 o. T6 G6 L |
|