java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2745|回复: 0

《深入解析YARN架构设计与实现原理》第2章 YARN设计理念与基本架构【2.2】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-4-13 21:21:59 | 显示全部楼层 |阅读模式
    2.2 Hadoop 基础知识9 \5 G, y$ s- y% l
    2.2.1 术语解释) @. {$ ^7 r& s. m
    为了便于本书讲解Hadoop YARN, 本小节对Hadoop涉及的术语进行比较全面的介绍。5 q3 W- W! F% E" H$ b- F8 T  ?  e
    1Hadoop 1.0
    + p7 K' ~" Q# P5 e  P& W6 ~5 q. QHadoop 1.0
    即第一代Hadoop, 由分布式存储系统HDFS和分布式计算框架MapReduce组成, 其中, HDFS由一个NameNode和多- @* o: K- @0 c$ r, I2 [
    DataNode组成, MapReduce由一个JobTracker和多个TaskTracker组成, 对应Hadoop版本为Apache Hadoop 0.20.x1.x0.21.X9 g/ ]! @/ s- Y4 v. g
    0.22.xCDH3 [1]
    3 ~# f( L6 u0 l0 T6 C. Y# g
    2Hadoop 2.0
    4 k: H, o: b  j! HHadoop 2.0
    即第二代Hadoop, 为克服Hadoop 1.0HDFSMapReduce存在的各种问题而提出的。 如图2-4所示, 针对Hadoop+ s6 }4 h" X6 O/ y+ G
    1.0
    中的单NameNode制约HDFS的扩展性问题, 提出了HDFS Federation, 它让多个NameNode分管不同的目录进而实现访问隔离和
    ! h8 F" w( B0 H$ ~# w# \横向扩展, 同时它彻底解决了
    NameNode 单点故障问题; 针对Hadoop 1.0中的MapReduce在扩展性和多框架支持等方面的不足,
    7 q$ \) s* ^5 T, Y% H( [3 H它将
    JobTracker中的资源管理和作业控制功能分开, 分别由组件ResourceManagerApplicationMaster实现, 其中, ResourceManager$ ?- w, V+ F- Z2 h7 J( r) C
    负责所有应用程序的资源分配, 而ApplicationMaster仅负责管理一个应用程序, 进而诞生了全新的通用资源管理框架YARN。 基于
    5 D' s- @. L% d& u+ N% ~: L7 g
    YARN, 用户可以运行各种类型的应用程序( 不再像1.0那样仅局限于MapReduce一类应用) , 从离线计算的MapReduce到在线计
    " k) c0 z4 [* C% s; z* Q. d- g算( 流式处理) 的
    Storm等。 Hadoop 2.0对应Hadoop版本为Apache Hadoop 0.23.x2.xCDH4 [2] $ V- W, J" q, a8 P
    2-4 Hadoop 1.0Hadoop 2.0$ ~% C$ V, N7 @' Y% w
    3MapReduce 1.0MRv1
    9 i" [# l( \& l. QMapReduce 1.0
    计算框架主要由三部分组成, 分别是编程模型、 数据处理引擎和运行时环境。 它的基本编程模型是将问题抽
    3 V, T# E. W! Q象成
    MapReduce两个阶段, 其中Map阶段将输入数据解析成key/value, 迭代调用map()函数处理后, 再以key/value的形式输出到本
    7 N+ k$ e2 G! s" W4 `9 d地目录, 而
    Reduce阶段则将key相同的value进行规约处理, 并将最终结果写到HDFS上; 它的数据处理引擎由MapTask. M/ z8 i" p" d" l
    ReduceTask组成, 分别负责Map阶段逻辑和Reduce阶段逻辑的处理; 它的运行时环境由( 一个) JobTracker和( 若干; ^' C& V& t6 f8 Z! J% |9 n
    个)
    TaskTracker两类服务组成, 其中, JobTracker负责资源管理和所有作业的控制, 而TaskTracker负责接收来自JobTracker的命令* \. h$ E8 W/ _$ N0 f6 J
    并执行它。 该框架在扩展性、 容错性和多框架支持等方面存在不足, 这也促使了
    MRv2的产生。
    % U. l) Z9 h! N; A6 K6 ]7 {, Y2 i
    4MRv2! v+ P% T* H! d% Z; k
    MRv2
    具有与MRv1相同的编程模型和数据处理引擎, 唯一不同的是运行时环境。 MRv2是在MRv1基础上经加工之后, 运行于
    ) z$ L! S. J8 ^+ v" K- [0 T. v; f资源管理框架YARN之上的计算框架MapReduce。 它的运行时环境不再由JobTrackerTaskTracker等服务组成, 而是变为通用资源/ N3 M  x) k# C4 l* A6 y
    管理系统
    YARN和作业控制进程ApplicationMaster, 其中, YARN负责资源管理和调度, 而ApplicationMaster仅负责一个作业的管
    ; E: \  o; C8 T理。 简言之,
    MRv1仅是一个独立的离线计算框架, 而MRv2则是运行于YARN之上的MapReduce
    0 |$ A6 K5 @# D' G2 M8 U
    5YARN' a( D5 H- q% i
    YARN
    Hadoop 2.0中的资源管理系统, 它是一个通用的资源管理模块, 可为各类应用程序进行资源管理和调度。 YARN
    : K: [) l; A5 K+ u5 C& H5 p9 w仅限于
    MapReduce一种框架使用, 也可以供其他框架使用, 比如Tez( 将在第9章介绍) 、 SparkStorm( 将在第10章介绍) 等。
    7 [& O$ u: e5 \
    YARN类似于几年前的资源管理系 统Mesos [3] ( 将在12章介绍) 和更早 的Torque [4] ( 将在6章介绍) 。 由于YARN的通用性, 下
    6 ?- k, n" {+ ^一代
    MapReduce的核心已经从简单的支持单一应用的计算框架MapReduce转移到通用的资源管理系统YARN
    " G# g5 Z- N) W8 P
    6HDFS Federation% N6 v9 C0 X  A/ Z
    Hadoop 2.0
    中对HDFS进行了改进, 使NameNode可以横向扩展成多个, 每个NameNode分管一部分目录, 进而产生了HDFS+ N) q0 E, s5 a( _3 Z
    Federation
    , 该机制的引入不仅增强了HDFS的扩展性, 也使HDFS具备了隔离性。3 \" s; ~% z) w3 B# r
    2.2.2 Hadoop版本变迁
    0 w7 I3 Z0 v$ b8 f
    当前Apache Hadoop版本非常多, 本小节将帮助读者梳理各个版本的特性以及它们之间的联系。 在讲解Hadoop各版本之前,
    0 b! ?& I( f& l; V先要了解
    Apache软件发布方式。 对于任何一个Apache开源项目, 所有的基础特性均被添加到一个称为"trunk"的主代码线( main. q5 X: m: i+ {+ I: |& W
    codeline
    ) , 当需要开发某个重要的特性时, 会专门从主代码线中延伸出一个分支( branch) , 这被称为一个候选发布版- l) a" z' W& G. [
    candidate release) , 该分支将专注于开发该特性而不再添加其他新的特性, 待bug修复之后, 经过相关人士投票便会对外公开成5 B, P3 D$ M7 J1 e
    为发布版(
    release version) , 并将该特性合并到主代码线中。 需要注意的是, 多个分支可能会同时进行研发, 这样, 版本高的分
    ( Q- p: w8 ]$ q* n& d# Z* Z支可能先于版本低的分支发布。
    . J& K4 q8 w6 V, }" c3 r2 c1 a6 k由于
    Apache以特性为准延伸新的分支, 故在介绍Apache Hadoop版本之前, 先介绍几个独立产生Apache Hadoop新版本的重大' f# T* Y$ I; ^9 G3 M( y
    特性:& y9 `! v8 O8 E
    ❑ Append [5] HDFS Append主要完成追加文件内容的功能, 也就是允许用户以Append方式修改HDFS上的文件。 HDFS最初
    9 W; g& ~' d: R/ p& K) T0 l的一个设计目标是支持
    MapReduce编程模型, 而该模型只需要写一次文件, 之后仅进行读操作而不会对其修改, 即"write-onceread-many", 这就不需要支持文件追加功能。 但随着HDFS变得流行, 一些具有写需求的应用想以HDFS作为存储系统, 比如, 有
    " z( o: l5 f+ o' R些应用程序需要往
    HDFS上某个文件中追加日志信息, HBase需使用HDFS具有Append功能 以防止数据丢失 [6] 等。5 I; g8 m* l0 B. ?- J: X: Y3 ?
    ❑ HDFS RAID [7] Hadoop RAID模块在HDFS之上构建了一个新的分布式文件系统DistributedRaidFileSystemDRFS) , 该系! W* y" v; Q' I7 _" I3 r4 ^4 J
    统采用了
    Erasure Codes增强对数据的保护, 有了这样的保护, 可以采用更低的副本数来保持同样的可用性保障, 进而为用户节省- i! m. `% a' v- L
    大量存储空间。8 D4 F% }' V# v; @9 b
    ❑ Symlink [8] : 让HDFS支持符号链接。 符号链接是一种特殊的文件, 它以绝对或者相对路径的形式指向另外一个文件或者
    4 {- x+ ^! B2 N/ O: T& k目录( 目标文件) , 当程序向符号链接中写数据时, 相当于直接向目标文件中写数据。
    / u  @% x# P/ ~" L. O
    ❑ Security [9] HadoopHDFSMapReduce均缺乏相应的安全机制, 比如在HDFS中, 用户只要知道某个blockblockID, 便
    * o: G- Y2 k( ?! C  b0 K9 E可以绕过
    NameNode直接从DataNode上读取该block, 用户可以向任意DataNode上写block; 在MapReduce中, 用户可以修改或者杀
    5 a) {7 h$ c4 Q' V6 W9 a& r0 l掉任意其他用户的作业等。 为了增强
    Hadoop的安全机制, 从2009年起, Apache专门抽出一个团队, 从事为Hadoop增加基于
    & E# Q2 o* w. p$ s% U, j# S
    KerberosDeletion Token的安全认证和授权机制的工作。
    9 H* T6 Z; F: w❑MRv1: 正如前面所述, 第一代MapReduce计算框架由三部分组成: 编程模型、 数据处理引擎和运行时环境。 其中, 编程# T& V% V5 A  m% K9 ]
    模型由新旧
    API两部分组成; 数据处理引擎由MapTaskReduceTask组成; 运行时环境由JobTrackerTaskTracker两类服务组成。! L/ A+ }0 d! m2 |0 @2 v
    ❑ MRv2/YARN [10] MRv2是针对MRv1在扩展性和多框架支持等方面的不足而提出来的, 它将MRv1中的JobTracker包含的
      E4 x0 k$ p0 T7 b3 Y2 j: C资源管理和作业控制两部分功能拆分开来, 分别将由不同的进程实现。 考虑到资源管理模块可以共享给其他框架使用,
    MRv2
    4 p: c, x& u( ]/ _: z) `$ Y其做成了一个通用的
    YARN系统, YARN系统的引入使得计算框架进入了平台化时代。
    ' W( |" A! x7 Q& A: ]
    ❑ NameNode Federation [11] : 针对Hadoop 1.0NameNode内存约束限制其扩展性问题提出的改进方案, 它使NameNode可以
    ! n1 p! W# [- p横向扩展成多个, 其中, 每个
    NameNode分管一部分目录, 这不仅使HDFS扩展性得到增强, 也使HDFS具备了隔离性。; P. l- l5 |. V3 W% ?9 G
    ❑ NameNode HA [12] : 大家都知道, HDFS NameNode存在NameNode内存约束限制扩展性和单点故障两个问题, 其中, 第一
      O1 P0 |" j) \, h5 l个问题通过
    NameNode Federation方案解决, 而第二个问题则通过NameNode热备方案( NameNode HA) 实现。
    4 U6 y( q% |0 H8 W) Z& }. G) J
    20138月为止, Apache Hadoop已经出现四个大的分支, 如图2-5所示。2 d8 A% K7 M8 n! t0 w, M
    2-5 Hadoop版本 变迁图 [13]
    3 G9 ~: @, U3 h7 k8 r! k
    Apache Hadoop的四大分支构成了三个系列的Hadoop版本。
    ) _5 M' [: v' V4 z( Z, n3 r
    10.20.X系列
    * A+ g$ n- _' x/ Q3 j4 [$ D' x2 P
    0.20.2版本发布后, 几个重要的特性没有基于trunk而是在0.20.2基础上继续研发。 值得一提的主要有两个特性: Append
    9 z+ S1 H% J! I6 V: V$ w
    Security。 其中, 含Security特性的分支以0.20.203版本发布, 而后续的0.20.205版本综合了这两个特性。 需要注意的是, 之后的0 {% d- b, b) A% f0 y! f4 g$ N* o
    1.0.0版本仅是0.20.205版本的重命名。 0.20.X系列版本是最令用户感到疑惑的, 因而它们具有的一些特性, trunk上没有, 反之" f  _% t% d4 Y$ [+ s* [. p
    trunk上有的一些特性0.20.X系列版本却没有。/ [0 g$ {0 X! ~5 f, J3 I7 D2 I
    20.21.0/0.22.x系列
    - t3 U( a2 T/ f7 Y  y3 @: D这一系列版本将整个
    Hadoop项目被分割成三个独立的模块, 分别是CommonHDFSMapReduceHDFSMapReduce都对* W6 R# s' C1 I# x' n: [
    Common模块有依赖, 但是MapReduceHDFS并没有依赖, 这样, MapReduce可以更容易运行在其他的分布式文件系统之上, 同  c+ E; _5 Z! {& j* e: o
    时, 模块间可以独立开发。 具体各个模块的改进如下:

    7 j3 w. `# J1 V5 i; g2 S❑Common模块: 最大的新特性是在测试方面添加了Large-Scale Automated Test Framework [14] fault injection framework [15]
    6 g% o9 n0 }8 H+ k, f2 ^- e7 B
    ❑HDFS模块: 主要增加的新特性包括支持追加操作与建立符号连接、 Secondary NameNode改进( secondary namenode被剔1 }; l, T) |! x, k
    除, 取而代之的是
    checkpoint node同时添加一个backup node的角色, 作为NameNode的冷备) 、 允许用户自定义block放置算法等。
    : N1 p# Q/ M) @$ ^5 H5 j
    ❑MapReduce模块: 在作业API方面, 开始启动新MapReduce API, 但仍然兼容老的API' Y$ H3 \0 u% n( ]0 p$ l
    0.22.00.21.0基础上修复了一些bug并进行了部分优化。
    + c0 \# y, K" M3 I+ d1 g& x1 P
    30.23.X系列
    1 Y, w; [3 w: `5 \
    0.23.X是为了克服Hadoop在扩展性和框架通用性方面的不足而提出来的, 它包括基础库Common、 分布式文件系统HDFS、 资
    3 }6 _$ Q, n1 [2 G5 f# M源管理框架
    YARN和运行在YARN上的MapReduce四部分, 其中, 新增的可对接入的各种计算框架( 如MapReduceSpark [16]; e6 Y6 k: O1 |3 Z  P
    等) 进行统一管理, 该发行版自带MapReduce库, 而该库集成了迄今为止所有的MapReduce新特性。
    . l1 o/ j" u9 [* ]! _) x* r
    42.X系列
    / B; L6 B) k( Y2 G
    0.23.x系统一样, 2.X系列属于下一代Hadoop, 与0.23.X相比, 2.X增加了NameNode HAWire-compatibility等新特性。% R+ ~/ K5 \9 d+ P$ |
    2-1总结了Hadoop各个发布版的特性以及稳定性。
    + b5 v6 A6 j/ t7 X5 H3 {1 E" b
    2-1 Hadoop各个发布版特性以及稳定性# r, `& a( i6 T  R0 S7 d9 V( [: R
    0.22.0版本中只有HDFS Security, 没有MapReduce Security+ q, k6 h$ f. D. e9 Q
    本书介绍的
    Hadoop YARN设计思想适用于所有Apache Hadoop 2.x版本, 但涉及具体的体现( 指源代码级别的实现) 时, 则以, c: K) w+ V9 _, \- \" f9 v1 F
    Apache Hadoop 2.2.0及更高稳定版本为主。
    9 J& n4 Q7 n& d1 n5 o3 L
    [1] 下载地址为http://archive.cloudera.com/cdh/3/
    ) p2 I8 i. }1 E# q3 N, P
    [2] 下载地址为http://archive.cloudera.com/cdh4/cdh/4/
    3 N/ B* S" u1 R( A# s; U% e
    [3] 官方网址: http://incubator.apache.org/mesos/3 {7 Z% S) w5 C
    [4] 官方网址: http://www.adaptivecomputing.com/products/open-source/torque/
    7 s! n& a2 c# i0 w; ~6 T3 Z
    [5] 0.20-appendhttps://issues.apache.org/jira/browse/HDFS-2000.21.0-appendhttps://issues.apache.org/jira/browse/HDFS-2653 ~9 u/ q3 v) |1 m
    [6] 参考http://hbase.apache.org/book/hadoop.html
    & P$ S" A+ i# E; n7 b. ]
    [7] 参考http://wiki.apache.org/hadoop/HDFS-RAID https://issues.apache.org/jira/browse/HDFS-503
    : o, [( m; e+ F) Q/ n' F  p
    [8] 参考https://issues.apache.org/jira/browse/HDFS-245
    * w5 Z! r+ R' v' b
    [9] 参考https://issues.apache.org/jira/browse/HADOOP-44874 v  t; T# [8 E. ?
    [10] 参考https://issues.apache.org/jira/browse/MAPREDUCE-279, N' L/ u9 l& Y/ i
    [11] 参考https://issues.apache.org/jira/browse/HDFS-1052
    2 `7 O4 `1 C  `1 ]7 Y5 s1 }- x: s
    [12] 参考https://issues.apache.org/jira/browse/HDFS-16230 x0 ~; L' f6 S. I* C
    [13] 图片修改自http://www.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/6 X% K" a- _5 R  P! d
    [14] 参考https://issues.apache.org/jira/browse/HADOOP-6332) o3 }. t" V# n( \8 _9 [
    [15] 参考https://issues.apache.org/jira/browse/MAPREDUCE-1084
    & B  q7 P; z$ \9 M* I3 @: E% K
    [16] Spark是一种内存计算框架, 支持迭代式计算, 主页是http://www.spark-project.org/  3 N9 J+ y' E9 W8 ~& E& r" h
    : T! r( k9 O3 N% G3 ?

    5 P( d4 }+ T* P, ?5 s; O' L
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-11-21 20:59 , Processed in 0.211914 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表