java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2402|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66105

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce% K0 |% n: O6 U8 V- E
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
    4 I, X/ n% p: C可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为6 j. ^7 c& X' ~) q" {4 G. V! ?0 T+ X
    Map和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任. v+ ?! a* I* `, f3 z
    务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
    : q5 r' G9 q) l" f0 R4 TReduce的执行流程如图13-1所示。7 ~$ a! S  Y) b0 _
    图 13-1 MapReduce执行流程$ h) f6 R6 g2 K) Q$ h
    MapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、) T3 e0 i& ]! w- r/ X# _0 y
    任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进% f! x- n* k" @. E) {
    程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。
    ( m) F5 S! K0 U3 n/ o* P  DMapReduce任务执行流程如下:
    + n- G4 z4 g! [+ Z$ g" A+ P  {1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据! n' W" D3 N. N' c3 w! i
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程$ L. J0 ]5 r7 Z. j
    序可以根据不同的命令行参数执行不同的行为。) p7 Y. u3 M0 j+ A4 H" O
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任7 {/ H' u& B5 R8 ~/ U
    务分配可以并行执行。- d$ y' M4 z8 P& T/ L% n
    3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地) I2 L' _% D/ R4 B6 a( Q
    读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。# M0 V* s5 B4 }: w  b! J. ^) W
    4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<1 J" i5 y; ~7 Q9 _  m5 q
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分
    , V& @# M* R. ?+ B! W2 u割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。  ~2 Y8 w; \9 ?0 Q
    5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步
    6 X! G4 b7 I! ~# b0 d. l* c将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这
    . m: G8 Q" Z6 O: _" |个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进
    . |4 U+ Q: a1 L行排序操作。$ L0 I6 ^, S$ O/ T! c) [
    6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,$ o1 P6 J( f/ W" n
    执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    ; t9 ^9 i4 @0 _6 s1 P) d9 `例如分布式文件系统Google File System或者分布式表格系统Bigtable。2 w* X9 F$ ^+ k& K/ M
    MapReduce框架实现时主要做了两点优化:
    ) Y  M* V7 _" a  P# E●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同# d  N# V  `- w0 F; {/ \
    一个机架。通过本地化策略,能够大大减少传输的数据量。7 M' Y- v, |& A$ l* {- w
    ●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一
    ! B9 F3 D+ H/ t) M; V! N个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即- ^6 }: j  C  @# r9 A- R" C
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    3 b# I4 O3 L0 \6 j4 Z' V9 X务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。
    ) o( z. l8 h) a7 Q5 }9 y7 B$ S/ {6 Y2 l5 d' g5 F
    8 o! \' M. @4 A) Z7 g
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-6 14:36 , Processed in 0.211529 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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