前言
延续上一篇博文MapReduce学习笔记-模型介绍,工作机制,单词计数(wordCount),我简要叙述了mapreduce的一些基本理论知识和一个单词计数的入门小样例。在mapreduce编程中,基本的编程思路是继承Hadoop Jar包中的类重写map方法和reduce方法,对代码进行优化,我们在此基础上加入自行定义的combiner方法 partition方法等。
上一篇博文中的单词计数demo我们只写了map方法和reduce方法,这里考虑在代码中添加Combiner功能(Combiner放在Map和Reducer中间,可用于减少数据传输量)。
public static void main(String[] args) throws Exception {
//main()函数首先进行Hadoop的相关配置类
Configuration conf = new Configuration(); //创建COnfiguration
//因为HDFS默认情况下是输出文件路径事先不存在 所以 我们在这里新增一个对 已存在输出文件清理的功能
//除了在代码中实现,我们还可以在hdfs 命令行手动删除(比较low的方法)
Path outputPath=new Path(args[1]);
FileSystem file = FileSystem.get(new URI(HDFS_PATH),conf); //这里需要加上hdfs的URI地址
if(file.exists(outputPath)){
//如果存在,则删除
file.delete(outputPath,true);
System.out.println("output path exists,but it's deleted...");
}
Job job = new Job(conf); //创建job
job.setJarByClass(WordCountConbiner.class); //设置job的处理类
job.setJobName("wordcount"); //job名称
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(WordCountMap.class); //配置Map方法的类
job.setReducerClass(WordCountReduce.class); //配置Reduce方法的类
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
//通过job设置Combiner处理类,内在逻辑和reduc