引言
在大数据领域mapreduce是比较流行的计算框架,可能我们都可以使用mapreduce实现简单的WordCount程序(大数据领域的HelloWorld)。mapreduce基本概念很简单,但hadoop内部实现还是比较复杂的。我尝试从网络和书中梳理出mapreduce的内部详细流程图,但都没有成功。基本所有的教程都是"Map – Sort – Combine – Shuffle – Reduce",当然这可以让我们从宏观上了解mapreduce的运行过程,但如此多的mapreduce调优参数如何使用,分别在那个环节起作用,将各阶段的参数调大或调小有什么影响,如果不了解内部的过程,很难做出优化。所以本文对mapreduce详细的流程进行了梳理。
map阶段
首先是map端,整个mapreduce过程是从InputFormat类开始的,可以在客户端指定该类的实现方式(如:TextInputFormat),他提供了两个主要的方法:getSplit和getRecordReader。getSplit用来对数据进行分片,getRecordReader提供一个迭代器用来读取每个split的每条记录。InputFormat决定了分片的大小,例如文本文件默认的大小是hdfs(由hdfs.blocksize指定)中bl