java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2719|回复: 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* Y& d* p" F- N1 u! t* {$ u9 w. w
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员5 R5 }7 B0 Q) E. i4 Z) u7 Z
    可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为# \& j+ m( O5 I
    Map和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
    : c: P7 o- L3 |) I0 @% G务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
    # u3 z( \" x/ A: p# H4 KReduce的执行流程如图13-1所示。
    * y; K) ?/ B; J# n9 j8 r" l图 13-1 MapReduce执行流程  n1 s* [5 Z4 r4 Y& @& O2 ~; p2 n
    MapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、  x  W  ]; J5 W: R/ R
    任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
    " ~: m5 r) U; B; u& M  T程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。
    ( n5 D6 r& @) M/ O2 Y- xMapReduce任务执行流程如下:
    0 R# z6 K/ h$ R! m. I) _8 H1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据+ O' s* X9 z" E/ z
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程5 ~" v, _$ f  e4 m0 W
    序可以根据不同的命令行参数执行不同的行为。/ g8 @4 K- U6 [6 q
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任: l2 z2 j7 [4 Q0 ~8 y
    务分配可以并行执行。
    7 K5 z8 L7 p4 W3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地+ V8 K  U7 ?5 I: N
    读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。! q( G4 T0 |9 b. ~% C3 j# @
    4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<
    ) [8 ?9 z9 l  X& e& lkey,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分( ~& P; D# W! h0 z5 C. X! v: o
    割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。5 @+ H+ m8 e- ^6 v, N; F# M
    5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步8 x  I& V! j8 d  w7 W- j
    将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这
    9 X5 p, }; x8 N  {4 t3 j个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进0 L% s$ H# u% d2 @! }: G
    行排序操作。
    + g" x3 g4 [- q6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,
    + a+ `% l2 q* G' u5 o2 k" ~" Z执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    4 A) J3 B. Y' @例如分布式文件系统Google File System或者分布式表格系统Bigtable。
    ' c8 W/ r( f& q3 u0 v7 X( `MapReduce框架实现时主要做了两点优化:; N( M! ], `/ L1 ?" n$ E
    ●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同
    * Y/ _! I# k- _) V- ^7 B一个机架。通过本地化策略,能够大大减少传输的数据量。) I- K! m4 |+ f& i5 W
    ●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一6 {& k# K; |4 s
    个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即, Y- B% Y4 [4 c8 L4 [
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    5 T' @1 P( d9 W- m1 M$ d1 [务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。6 W4 c2 B$ U2 H1 I. }
    2 A" }' s# U  h) F  i1 B

    8 v3 Y& o3 O0 K& R6 J+ W
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:10 , Processed in 0.131708 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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