MapReduce

作者: GakkiLove | 来源:发表于2018-06-22 02:33 被阅读0次

    MapReduce是一种编程模型,用于大规模数据集的并行运算

    在进行MapReduce计算任务的时候,任务被分为两个阶段:Map阶段和Reduce阶段。每个阶段都是用键值对(key/value)形式作为输入(input)和输出(output)

    MapReduce采用的是“分而治之”的策略,一个大规模数据集会被切分成许多独立的分片,这些分片可以被多个Map任务并行处理

    MapReduce框架采用Master/Slave架构,包括一个Master和多个Slave。Master上面运行JobTracker,Slave上面运行TaskTracker。

    MapReduce主要由4个部分组成:

    1. Client
      用户编写的MapReduce程序通过Client提交到JobTracker端
      用户可通过Client提供的一些接口查看作业运行状态
    2. JobTracker
      JobTracker负责资源监控和作业调度
      JobTracker 监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点
      JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务去使用这些资源
    3. TaskTracker
      TaskTracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作
      TaskTracker 使用“slot”等量划分本节点上的资源量(CPU、内存等)。一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用
    4. HDFS
      保存作业的数据、配置信息等等,最后的结果也是保存在HDFS上面

    MapReduce基本架构:


    4162886-22e98e6334639711.png

    MapReduce运行过程:


    5959612-68cf8d92e2358294.png

    MapReduce的计算流程:
    Input Split --> Map --> Combiner(optional) --> Shuffle --> Reduce --> Output

    20160419199999.jpg

    Combine:作用是把同一个key的键值对合并在一起,combine函数把一个map函数产生<key,value>对合并成一个新的<key,value>对,并将新的<key,value>作为输入到reduce函数中

    Partition:作用就是把这些数据归类,主要在Shuffle过程中按照Key值将中间结果分成R份,其中每份都有一个Reduce去负责,可以通过job.setPartitionerClass()方法进行设置,默认的使用hashPartitioner类

    Shuffle:shuffle是map和reduce中间的过程,包含两端的Combine和Partition

    相关文章

      网友评论

          本文标题:MapReduce

          本文链接:https://www.haomeiwen.com/subject/jmyhyftx.html