Hadoop基本介绍(4)
Map
Map的输出到内存
- Map的输出先写入环形缓冲区(默认大小100M-可以认为调整)(可以再输出的同时写入数据),当缓冲区内的数据达到阈值(默认0.8-可以人为调整)时,
- 对数据进行flash。flash 出去的数据的数量达到一定量(默认4个)时,进行数据的合并
Reduce数据读取
- Reduce 主动发出拷贝进程(默认5个copy进程)到Map端获取数据。
- 获取到数据后,将数据写入内存,当数据达到阈值,将数据flash出去。
- 当flash出去文件达到一定的量时,进行数据的合并。最终将数据发送给reduce
Map到reduce内存角度宏观流程
Map到reduce处理流程角度宏观步骤
Shuffle阶段
从Map的输出到reduce的输入
-
流程角度
-
内存角度
如何能够让Map执行效率最高
尽量减少环形缓冲区flush的次数(减少IO 的使用)
- 1、调大环形缓冲区的大小,将100M调更大。
- 2、调大环形缓冲区阈值大的大小。
- 3、对Map输出的数据进行压缩。(数据在压缩和解压的过程中会消耗CPU)