第四章:离线计算框架MapReduce

  • 将计算过程分为两个阶段,Map和Reduce

    Map阶段并行处理输入数据

    Reduce阶段对Map结果进行汇总

  • Shuffle链接Map和Reduce两个阶段

    Map Task将数据写入到本地磁盘

    Reduce Task从每个Map Task上读取一份数据

  • 仅适合离线批处理

    具有很好的容错性和扩展性

    适合简单的批处理任务

  • 缺点明显

    启动开销大、过多使用磁盘导致效率地下等

    延迟高:完全基于磁盘的计算,每个环节的数据都是落地的硬盘上。

MR架构图

(1)、Master/Slave 架构

(2)、JobTracker

  • Master节点,每个Hadoop集群只有一个JobTracker,管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker。

  • 整个MapReduce计算框架中的主服务(进程),运行作业的“管理者”,负责整个集群的作业控制和资源分配。

  • 不一定必须运行在Namenode上,可以运行在任何节点上。通常不和NN放在一台机器上

  • 通常部署JobTracker的节点,不开启TaskTracker进程。就像NN节点上不开启DataNode进程一样

(3)、TaskTracker

  • Slave节点,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。

  • TaskTracker位于子节点(即Datanode上),独立管理各自的task。

  • 每个TaskTracker负责独立执行具体的task,而JobTracker负责分配task。每个TaskTracker可并行处理多个map以及reduce任务。

  • TaskTracker的一个重要职责就是与JobTracker交互。如果JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他节点处理。

  • Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。

  • Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行。

(4)、水平扩容

  • 增加TaskTracker节点数,达到水平扩容(HDFS是增加Datanode节点数进行扩容),通常运行在Datanode上。

Mapreduce处理流程,以wordCount为例

  • MR计算流程解读

    计算过程阶段:Map-combine-shuffle-Reduce

    Map阶段并行处理输入数据

    Reduce阶段对Map结果进行汇总

    先看每个

    Map阶段默认逐行读入,<key,value> 对;

    Reduce阶段输出, <key , values> 对 。

  • 假如有100台服务器,最终目的是计算出abc总出现次数。

可以如下做:

1、把100T文件分成100份,每份1T存储到每个节点上。并各逐行读取文件得到众多:<abc, 1>, <abc, 1>, <abc, 1>… ,即Map阶段

如果计算过程很慢,可以对此阶段进行压缩

2、要得到全局abc总出现次数的话,而每个节点上都有abc,怎么办? 想到一个办法,先每个节点上局部汇总各自得到一个总数如<abc, 1000> (即Combine阶段),然后再进行全局汇总。

3、把每个节点上Combine的结果进行混淆(网络传输至公共存储HDFS的临时目录/tmp下),为进行全局汇总做准备,即Shuffle阶段

4、要进行abc的全局汇总,必须单线程!所以相同的key必须发给同一个reduce线程进行汇总,即Reduce阶段,得到abc的全局汇总值

其中:1、如果需要代码里不设置Combiner类的话,就没有Combine阶段。会带来什么影响? Shuffle阶段网络传输量增大,增加作业执行时长,增大网络IO负载。所以设置Combiner类是优化利器之一。

2、相同的key必须发给同一个reduce线程进行汇总,处理大key的reduce势必比较慢。这就是数据倾斜。后边课程里会讲如何解决数据倾斜的问题。

3、由于100T不可能平均存储在每个节点上,直接导致每个阶段处理的数据量不同,这是Map阶段数据倾斜。这个无法避免!

相同的KEY必须交给同一个reduce来执行,由于数据在不同节点上分布不均衡如(节点1分配3M、节点2分配3T)。

猜你喜欢

转载自my.oschina.net/zupengliu/blog/1790810
今日推荐