java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2644|回复: 0

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

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

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce$ W4 M8 S0 ]+ g# j7 E, C
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
    7 s( w. h# p: j# S8 r可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为
    % F) u7 O' L0 X8 n8 ]% e1 l8 qMap和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
    7 i* B/ I$ G8 v  F: {9 z* ?务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
    ) `0 r6 r2 U2 _" C$ ]! FReduce的执行流程如图13-1所示。
    % c. i3 i% D: f. q$ x# _- ]图 13-1 MapReduce执行流程
    7 O- v) ^: l, G+ XMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、( E3 B& R+ ], W( p+ l( x! Z  _
    任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
    3 A% y9 q/ E! Y3 B( |程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。
    ' e* R, Y! R' n4 ]$ XMapReduce任务执行流程如下:
    ' `* R. {! V* W- R3 @3 |2 Q1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据" D; g, Z2 O2 y
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程
    ' q$ O$ X1 V* ?' w# z4 g- u$ |* J序可以根据不同的命令行参数执行不同的行为。
    1 s7 R$ S* B9 V/ H2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任- i# T( l/ Q) ~# a0 F- i% _& O8 @
    务分配可以并行执行。
    " v2 a( l! ~3 t9 J3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地4 N1 D6 M$ S! n" H6 f: v# l: N
    读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。% o& d# q/ y8 Y6 ]' X: E
    4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<( O1 Y2 L! o9 j. x1 g
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分
    * E2 m4 b5 A- I4 p0 k割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。
    0 ]/ y- Y; L1 i/ Z5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步
    * O  ~4 A, I8 r1 N6 s6 q将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这5 k  F2 J! K4 |0 x4 q- X' I+ m
    个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进
    ' T) {# \' z1 G" H( ~7 K( I行排序操作。7 ]( ?. I  ?4 q1 j
    6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,
    9 W0 `+ C) }: t0 n+ x: a& ]执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    & d  F+ y! z" n% d- S& @' P5 m例如分布式文件系统Google File System或者分布式表格系统Bigtable。- c( G- B3 h& S
    MapReduce框架实现时主要做了两点优化:6 c  V3 T' D3 x. I2 V* X* S
    ●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同; R; a' |- g; X/ v9 ?: c& V
    一个机架。通过本地化策略,能够大大减少传输的数据量。* T$ ]+ U# B& K% I$ V
    ●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一. C! T' h; w# m
    个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即" b2 P5 r9 u9 w% p0 o
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    3 r* W, V7 U1 m" T) f" B  D  x务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。
    ; l8 b; j8 ^: L5 q# m. S2 E: o: q2 b
    7 N- ~- N+ J; I: H. `9 A7 q
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-22 14:40 , Processed in 0.264174 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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