MapReduce调度原理
简介
Map:以一条记录为单位做映射(变换、过滤)
Reduce:以一组为单位做计算(分解、缩小、归纳)
Map就是把一坨数据一条条的分开映射成键值对(如下图左半部分)
Reduce就是把Map处理后的具有相同的键的记录整合起来(如下图右半部分)
并行度(map–>切片数量)(reduce–>手动决定)
数据恢复
Split/Block
分隔符(以一条记录为单位)
计算向数据移动:将数据处理逻辑发到不同的机器上,对应的机器“就地取材”,这样节省了大量成本
计算框架
-
JobTracker:
-
资源管理
-
任务调度
-
-
Tasktracker:
-
任务管理
-
资源汇报给
JobTracker
-
-
客户端
-
根据每次的计算数据,咨询
Namenode
元数据(block),算split
,得到一个切片的清单,例如切片 文件 偏移量 字节数 节点 split01 A 0 500 n1 n2 n3 split02 B 400 300 n2 n3 n4 -
生成计算程序未来运行相关的xml
-
把 jar split清单 xml 上传到hdfs的目录中 (副本数为10)
-
调用JobTracker,告知文件存储在hdfs的那些地方
-
过程
- 客户端根据数据的计算量,算出切片清单,生成xml文件
- 客户端将jar,split清单,xml文件上传到hdfs中 (副本数量为10)
- 客户端通知JobTracker,告知文件存放位置
- JobTracker收到启动程序后,从hfds取split清单
- JobTracker根据自己收到的TaskTracker汇报的资源(NN内存等信息),确定每一个Split对应的map应该去哪一个节点 [PS:心跳汇报时JobTracker会取回Tasktracker分配的任务信息]
- TaskTracker在心跳取回任务后,从hdfs下载对应的文件到本机
- TaskTracker最终启动任务描述的MapTask、ReduceTask (代码在某一个节点被启动,通过客户端上传,TaskTracker下载 [计算向数据移动])
可能遇到的问题
- JobTracker容易有单点故障
- JobTracker压力过大,可能有延迟等一系列问题
- JobTracker集成了资源管理和任务调度,两者耦合,导致未来新的计算框架不能复用资源管理(各自实现资源管理,无法相互感知,有争强)