java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2593|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce- b' U  i% \3 w: m. l
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员  p6 P  i- `9 H. r! a
    可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为
    5 `* ^! V2 S+ r0 lMap和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
    % z4 x/ s( H  F  X务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
    ! B, f% R# D0 w0 [% H6 U1 |Reduce的执行流程如图13-1所示。7 Y1 Q8 Y) a$ \# Y5 i0 S) V: ~
    图 13-1 MapReduce执行流程
    " e* f! X2 ^1 z& w: H* O4 IMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、; a" D$ r$ ]% r
    任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
    * R* h+ k. u2 y  j7 J程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。5 f1 H: M# q: p. f6 Y
    MapReduce任务执行流程如下:
    ' l, x/ u$ D) r  h8 u; k+ t1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据
    ! v, V& x: B0 ^$ ~# I9 J# J输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程
    ! H# u  Q. I( S2 r) {$ u8 p' s序可以根据不同的命令行参数执行不同的行为。
    # k3 Y2 `" D$ n  C& y2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任' H$ B& ]3 V3 ^4 r
    务分配可以并行执行。/ ?1 U0 {/ V7 x% B; f
    3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地
      R5 d. z% z1 `. p1 Y2 B读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。1 b, Z6 D* ?1 V
    4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<5 V& J9 ?$ @$ S; v' @8 |
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分( d% e: d" p0 N  S" r
    割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。! D3 j: K# G! q# q: z/ `8 L
    5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步
    ; c2 a- m' u. E! w$ Q0 D6 A" n5 ]将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这, @) J6 ]0 k% K3 Z" `
    个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进* ]' P8 R4 ~2 R4 f, B9 q
    行排序操作。
    8 ~' d8 t+ k8 I! R6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,
    8 @% a2 W9 R% m4 }, _" M* J执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    9 p0 b) B' l' W8 C9 U+ Q" P例如分布式文件系统Google File System或者分布式表格系统Bigtable。
    6 W# Y# G2 c! f: [MapReduce框架实现时主要做了两点优化:
    % k7 `, |! @* i2 h4 Z●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同- k* S& i1 m2 L2 }4 z1 X
    一个机架。通过本地化策略,能够大大减少传输的数据量。
    9 Y6 R4 F# Q# K! E$ U& v●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一
    6 ~6 v/ H0 b7 k; L- n. M$ u个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即, Z4 }9 e& V: E0 ?4 S. n
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    , {" O" J9 K; U9 ^务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。6 o$ {3 g# ^2 {/ u% u

    / |) v( w( b9 r
    : o. c( o- H- P; x! U! k3 _+ t
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 21:06 , Processed in 0.118803 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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