MapReduce

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函数产生对合并成一个新的对,并将新的作为输入到reduce函数中

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

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

你可能感兴趣的:(MapReduce)