MapReduce 过程详解
一.Map端:
Map节点运行map task任务生成map的输出结果
1.Shuffer的工作内容
- 从运算效率的出发点,map的输出结果有限存储在map节点的内存中.每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲快满时,需要将缓冲区的数据以一个临时文件的形式存储到磁盘中,当整个map task结束后,在对磁盘中的这个临时文件做合并,生成最终的输出文件, 最后等待reduce task来拉取数据.当然当map task的结果不大,能够完全存储在内存缓冲区,且未达到内存缓冲区的阀值,那么就不会有写临时文件到磁盘的操作,也不会有后面的合并
详细过程如下: - map task 执行任务,输入数据的来源: HDFS的block 在mapreduce的概念中,map task读取的是split分片, split与block的关系: 一对一(默认)
说明一下block和split
* Block(物理划分)
文件上传到HDFS.就要划分成数据块,这里的划分属于物理划分,块的大小可配置(默认:第一代为64MB’,第二代为128MB)可以通过dfs.block.size配置, 为保证数据的安全,block采用冗余 机制:默认为3份,可通过dfs.replication配置。注意:当更改块大小的配置后,新上传的文件的块大小为新配置的值,以前上传的文件的块大小为以前的配置值。
* Split(逻辑划分)
Hadoop中的split划分属于逻辑上的划分,目的是为了让map task更好的获取数据,split是通过Hadoop中的InputFormat接口中的getSplit()方法得到的.