java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2594|回复: 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
    2 I1 v5 w, C* Q8 g  F提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员% ~4 a* i! F( o! Y) s
    可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为% [" N2 C& S" w8 x* b# D3 y2 P& z
    Map和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
    7 Y, f' e# f2 |5 g% V2 l* p; ]) N务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map+ j7 W) t9 ]# ?  [4 Z9 V
    Reduce的执行流程如图13-1所示。1 |, e) c6 c. j# |- s2 m
    图 13-1 MapReduce执行流程
    / N& P4 T+ A+ {9 {" R% y* ^" KMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、
    $ o9 W1 l3 A5 ~( Q任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进& W# h) X. P" Q& Q
    程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。' }; K8 A' }' M0 k  X8 ~
    MapReduce任务执行流程如下:
    * s4 D5 o) H4 f# L% @2 y* z1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据0 V7 F3 ~  m) J3 L9 J$ Y4 k
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程4 Q, w9 j% l1 {( r
    序可以根据不同的命令行参数执行不同的行为。# L& ?6 g, L6 p, r
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任
    1 f9 e1 ]) T# D+ [4 `) U  o务分配可以并行执行。
    4 d4 P) s* O$ J+ }$ x3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地
    ; ~  c. {8 W% i- k5 i& J: t# I: W读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。
    " @' S# q' [5 I6 t9 _+ q' ^% T4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<
    $ N* h! S# c; |% gkey,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分+ d6 X& K" p+ l8 Y, L
    割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。
    . ~  w- \% `. i7 }9 X5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步- _' \/ i" E2 }8 w$ c% |; b' q
    将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这
    ) f5 S  m/ r8 g8 d, T8 l个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进
    ! B$ X- |$ u  k; P行排序操作。
    3 T" K/ h: a- z( G' h6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,3 p" z0 L( v: B
    执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,1 ^2 A- O; L; O( K+ `0 U+ d
    例如分布式文件系统Google File System或者分布式表格系统Bigtable。: i; n4 ]* U& u! ]* p. n2 M4 f* G5 ^
    MapReduce框架实现时主要做了两点优化:" X: Z8 E+ I4 \
    ●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同
    6 E6 a9 \9 Q( k一个机架。通过本地化策略,能够大大减少传输的数据量。
    9 v8 l( [) {$ e0 g0 y●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一
    : ?, J) G2 K) Y8 p1 e个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即
    " M7 E3 F' h( a2 \使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    % x' [! u$ b# h  `1 O6 I) d# y' \务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。0 Z4 _$ s  Y# W4 z4 W0 |
    " j1 J( z" \/ V
    ( e: b3 r- Z* ?3 q- `
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 21:32 , Processed in 0.267472 second(s), 28 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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