MapReduce 关注点:
hadoop MapReduce
作业被分成一系列运行在分布式集群中的
map 任务和
reduce 任务。因此负载是遍布集群中的各个节点的。 map 任务主要负责数据的
载入、解析、转换、和过滤。每个 reduce 任务
负责处理 map 任务输出结果的一个
子集 , 然后 reduce 任务从 mapper 任务处
复制 map 任务的
中间数据,进行
分组和聚合操作。 从
简单的聚合到
复杂的关联以及
笛卡尔积操作。
MapReduce
文件分块Block,Split读块,到Map,到Reduce的过程
下面引用的这个图 特么有点问题。 画错了。
Partitioner 是根据 key 或 value 及 reduce 的数量来决定当前的这对输出数据交给那个 reduce task,默认是对 key 进行 hash 后 再以reduce 数量取模。是为了平均 reduce 的处理能力。Partitioner 的默认内存缓冲区是 100MB,当 mapTask输出更多结果的时候就会将数据
刷入磁盘中形成临时文件,然后再次利用缓冲区进行写。 就是
Spill 过程。溢写是由单独线程来完成,不影响往缓冲区写 map 结果