java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2676|回复: 0

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

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

    [LV.Master]出神入化

    2062

    主题

    3720

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66592

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

    发表于 2017-3-20 19:36:42 | 显示全部楼层 |阅读模式
    13.2 MapReduce$ M2 D  Z$ Y; C
    提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
    , a( |6 o- a9 q9 G* ^  W, i可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为
    6 |2 @" r6 M" \2 N1 PMap和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任: f4 [  O8 b9 g' \5 d/ ^
    务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map' W+ b7 y) B! {2 d" |& T
    Reduce的执行流程如图13-1所示。5 A) `$ w2 s+ w* y  P2 g
    图 13-1 MapReduce执行流程
    * b" x4 s2 R8 F) U9 l$ i, NMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、
    ) U0 A( s, D9 y) H任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
    * h  c. V& @  b& z, E* D3 h程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。* V1 W0 u. D' t% ]# c' a
    MapReduce任务执行流程如下:' I( r5 Q% r7 Q9 [9 A4 T
    1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据! w: d+ L9 \' [, A+ Y4 z
    输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程
    ( L" ]+ L$ ?+ N6 }% _序可以根据不同的命令行参数执行不同的行为。$ A0 _5 {0 R( a4 x
    2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任: d8 h  F8 Y# M* P. O
    务分配可以并行执行。. I, `, x9 [  q' D% F" }& j
    3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地% k, ~# ]9 `1 k
    读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。
    & a) d# t( X3 e( i* H4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<* c/ v6 n% z. e$ K2 a" a  H0 l% K
    key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分
    : o5 B$ W9 C" m% c; W割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。
    - n, |/ ~3 e3 \% k3 P* w5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步$ d; q4 N) ]: ?3 Q' p" M0 I
    将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这; r" P( z- M* m
    个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进
    # j% M# n. k2 J8 D行排序操作。0 Q0 W$ G) ]1 D% G2 z
    6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,
    : H6 }  T, r, X执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
    ! H" q$ W6 q) L2 E3 C4 p8 X例如分布式文件系统Google File System或者分布式表格系统Bigtable。: O7 a/ i; C. K( _
    MapReduce框架实现时主要做了两点优化:
    : k) y8 \  v4 I* j; r$ d) A$ E●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同" E4 T- z; F/ [0 Z/ J# I: |
    一个机架。通过本地化策略,能够大大减少传输的数据量。
    0 Q1 s0 W) ~) m4 Q6 g1 Q( \+ V' F●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一% H+ x) [. T! g" [
    个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即3 \5 P, O/ E4 E9 O
    使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任
    7 B1 {/ {0 D; y7 ^6 D6 K& H( [务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。! l+ Z& v1 U  T7 ~7 F1 M

    0 g" P# C4 r$ C
    ' v  F$ F5 s- U# [
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-23 12:50 , Processed in 0.163924 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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