java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2720|回复: 0

《大规模分布式存储系统》第13章 大数据【13.2】

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

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce: }# x0 U" W* [% x! m! L' S6 p
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
    # E3 p3 _4 f6 n8 U! J/ X' u可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为
      o# O3 A+ w6 K5 K1 Z0 U8 iMap和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
    + U" ?: q1 j( E1 M3 M$ ?4 P务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
    ( h$ Y8 b. z$ Z, v3 n- i- S9 |Reduce的执行流程如图13-1所示。2 f. c$ r  S+ y) s& [' a
    图 13-1 MapReduce执行流程
    * M9 Y- i& k6 V: }: d  P  gMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、9 o- x* c8 U: y. p' x- T1 z
    任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
    5 q6 `/ I4 Y4 K7 `程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。
    / `: k3 _1 |# F% i- w+ EMapReduce任务执行流程如下:
    9 d' ]1 B! I# e6 f9 d9 K1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据. I* x) G5 A0 ]( ]& l
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程) e- z7 ^& w, n2 x. ]3 |, N
    序可以根据不同的命令行参数执行不同的行为。) D" k' F+ r& x1 V* ~; Y
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任. i5 K7 ?+ U! K  Q! _: R; s9 q
    务分配可以并行执行。
    9 l9 Z+ T' K* P: Y% B3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地
    ; n4 X: y. h. B4 B读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。
    ; k1 }% u8 V8 W' M8 N& p4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<4 X# K1 l& ~+ [+ n( N* j7 E
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分4 b3 K( D- Q+ d
    割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。' L! y1 s' l. D# G
    5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步% }& w1 i# ~1 i
    将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这4 }- e1 H  ~: {+ P5 S, D( Y
    个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进2 j% J3 g" r$ c( R2 a% F
    行排序操作。' Z0 ]. A- q1 z8 I1 @' w- z
    6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,' y; r7 R' z6 r2 B' }7 E
    执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    , x* Y& Y, f! i# ~' U( Z, M例如分布式文件系统Google File System或者分布式表格系统Bigtable。
    % R: U3 n4 l. x2 Z9 L; b5 r0 JMapReduce框架实现时主要做了两点优化:& R* }/ d% B+ ?& p4 Q; C6 I! v
    ●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同
    $ Y( e8 y/ y: x; k一个机架。通过本地化策略,能够大大减少传输的数据量。& c, y/ \& @8 E$ q
    ●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一- Y$ E$ m& _7 _5 H
    个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即  R" ~8 u) J9 i$ T
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任% d, I/ a% u$ v* P3 ~
    务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。2 z) C/ h' ~; |( U

    & O( v( [! _2 I. _$ W  Y
    ( H8 L/ r# K8 ?
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:44 , Processed in 0.414342 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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