hadoop学习笔记之二:MapReduce基本编程
原文地址:http://qa.taobao.com/?p=10523
?
?
引言
在本系列的上篇文章中介绍了Hadoop的基本概念和架构,本文将通过一个实例演示MapReduce基本编程。在继续进行前希望能重温下前面的内容,至少理解这张图是怎么回事。
实践
我们选用maven来管理工程,用自己喜爱的m2eclipse插件在eclipse里创建或在命令行里创建一个工程。在pom.xml里加入hadoop依赖。
?
?
public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount "); System.exit(2); } /**创建一个job,起个名字以便跟踪查看任务执行情况**/ Job job = new Job(conf, "word count"); /**当在hadoop集群上运行作业时,需要把代码打包成一个jar文件(hadoop会在集群分发这个文件),通过job的setJarByClass设置一个类,hadoop根据这个类找到所在的jar文件**/ job.setJarByClass(WordCount.class); /**设置要使用的map、combiner、reduce类型**/ job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); job.setReducerClass(WordCountReducer.class); /**设置map和reduce函数的输入类型,这里没有代码是因为我们使用默认的TextInputFormat,针对文本文件,按行将文本文件切割成 InputSplits, 并用 LineRecordReader 将 InputSplit 解析成 <key,value>: 对,key 是行在文件中的位置,value 是文件中的一行**/ /**设置map和reduce函数的输出键和输出值类型**/ job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); /**设置输入和输出路径**/ FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); /**提交作业并等待它完成**/ System.exit(job.waitForCompletion(true) ? 0 : 1); }}?基本上完成一个MapReduce程序就这么简单,复杂的在于job的配置有着复杂的属性参数,如文件分割策略、排序策略、map输出内存缓冲区的大小、工作线程数量等,深入理解掌握这些参数才能使自己的MapReduce程序在集群环境中运行的最优。
小结
本文通过一个实例说明了MapReduce的基本编程模型,希望通过此能加深对MapReduce的理解,在后面的文章中将介绍如何测试MapReduce及如何把作业运行起来。
?
?
?
?