java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2621|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66375

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce
    7 ]7 B! |/ Z7 N) R: E* {提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
    ! l. \' c" b9 ]- I% |可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为: {3 q) S4 }( y% G7 J
    Map和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任' P; q4 j" @, f( ^' r) s# ~8 K
    务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map/ ?2 J/ k, H1 W; [" J5 n
    Reduce的执行流程如图13-1所示。
    ! B7 U: L, A1 p; {图 13-1 MapReduce执行流程7 F: ]. S$ s: r* P
    MapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、
    9 n6 r. j# W# |. u- ?任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进$ w. b4 _; P& v" r
    程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。: }% ], l3 K& s& S; G( T; S7 V# U) A
    MapReduce任务执行流程如下:# U* u  j% p% b; o# D  r# S
    1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据
    7 S' S$ `) O! {输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程* R2 E* }1 ^: J) y
    序可以根据不同的命令行参数执行不同的行为。! u) L- U0 x  i9 Z* p- P
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任
    ' i2 {% P( [! f: Q, ^6 s1 X& R务分配可以并行执行。* u  Q/ j. z- z
    3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地
    6 B- J5 {3 B  `9 N读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。
    ' b7 ?2 k) w5 P$ }/ M, _4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<) t1 K2 B. N. j  Q5 K1 t; ^" ^
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分
    : \* Q1 a; N0 g- L割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。
    " N; }5 ^) Q- p( G7 y5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步+ c6 Y( G! b4 A$ m
    将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这
    $ E" R8 H; \; e8 L! c1 ?% {个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进9 {2 F# `2 H6 _3 o- ^! ?9 C
    行排序操作。6 E9 t0 O5 |  n, \
    6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,0 \# a8 _  u  h3 G' H
    执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,# X0 {" p" i) U% P8 b8 j" J# R# `; O0 a
    例如分布式文件系统Google File System或者分布式表格系统Bigtable。5 o0 v8 t' H. Y: K/ J
    MapReduce框架实现时主要做了两点优化:
    , X0 S# X. E  E% |, o7 b  |7 w●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同
    : O: y: X6 M+ i" g: y一个机架。通过本地化策略,能够大大减少传输的数据量。
    . Z7 s5 ?1 P* b# V●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一; Z, W1 I# L. ]) `; n, X7 u" ]7 D
    个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即$ n5 i2 I; ~5 L, w  s: L
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    # h9 L$ k* w1 d* C务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。' J+ ~7 M3 g* M' e9 h
    6 F% }& }- i+ j. t3 o+ m2 t
    ' V/ O! N1 j2 h, A5 w+ b+ G
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-12-22 15:35 , Processed in 0.138368 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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