wordcount在mapreduce里多么经典,我就不多说了
找了一套分析由wordcount分析到hadoop源码的过程,侧重于hdfs
http://radarradar.iteye.com/blog/289247
http://radarradar.iteye.com/blog/289252
http://radarradar.iteye.com/blog/289254
http://radarradar.iteye.com/blog/289257
http://radarradar.iteye.com/blog/289261
这里有一篇关于mapreduce中对combiner理解的文章
http://blog.csdn.net/guoery/article/details/8529004
这里的几篇侧重于input->split->map->combiner->partitioner->shuffle->reducer->output流程的讲解
http://www.cnblogs.com/forfuture1978/archive/2010/11/14/1877086.html
http://www.cnblogs.com/ggjucheng/archive/2012/04/22/2465782.html
基本上应该可以把wordcount以及hadoop运行机制理解清楚了
在这里还是有一个问题,就是wordcount到底是如何对文件split的
网上都说如果没有job.setInputFormat(),默认的就是TextInputFormat,我在代码里追了半天总算找到了
从wordcount开始,F3一顺追下去
Job job = new Job(conf, "word count");
|
V
this(conf);
|
V
super(conf, null) super是JobContext 类
JobContext类里的 getInputFormatClass()方法
conf.getClass(INPUT_FORMAT_CLASS_ATTR, TextInputFormat.class);
getClass方法 定义 public Class<?> getClass(String name, Class<?> defaultValue)
看到没有,如果INPUT_FORMAT_CLASS_ATTR不存在,就用TextInputFormat.class作为默认的InputFormat
转一下虾皮的文件系统分析:http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html
在调试的时候,System.out 和 System.err 只能看到main里的消息,mapper和reducer的消息是看不到的,因为mapper和reducer是在tasktracer也就是slave上实例化的
打印的调试信息可以通过50030端口查看,具体参考:http://blog.csdn.net/azhao_dn/article/details/8003998