简单聊聊Hadoop MapReduce

2018-04-19  本文已影响110人  远o_O

1、导读

We want to count all the books in the library. You count up shelf 1, I count up shelf 2. That’s map. The more people we get, the faster it goes.
我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
Now we get together and add our individual counts. That’s reduce.
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。

2、MapReduce执行流程分析

2.1概述

2.2 Map Task运行过程

Map Task的整体计算流程如下图所示:


image.png

2.2 Reduce Task运行过程

Reduce Task要从各个Map Task上读取一片数据,经排序后,以组为单位交给用户编写的Reduce()函数处理,并将结果写到HDFS上。
Reduce Task的整体计算流程如下图所示:


image.png

3、MapReduce补充

3.1、关于Input Splite的大小

在这里主要解释为什么最佳分片的大小应该于块大小相同:因为她是确保可以存储在单个节点上的最大输入块大小。如果分片跨越两个数据快,那么对于任何一个HDFS节点,基本上都不可能同时存储这两个数据块,因此分片中的部分数据需要通过网络传输到map任务运行的节点。与使用本地数据运行整个Map任务相比,这种方法显然效率更低。

3.2、关于中间数据

当作业完成后,中间数据即可删除。如果将其放在HDFS进行备份,难免有些小题大做。同时MapReduce采用的容错处理是通过重新调度执行任务来实现的,因此中间数据没有必要保存。

由于中间数据会被Reduce Task远程拷贝,为了尽可能减少数据量以避免不必要的磁盘和网络开销。中间数据将会被存放到Hadoop内部实现的IFile存储格式(格式为:<key-len, value-len, key,value>)的磁盘文件或者内存文件中。同时IFile存储格式支持行压缩。

3.3、关于排序

3.4、关于分组

4、其他图示

image.png image.png image.png image.png
上一篇 下一篇

猜你喜欢

热点阅读