1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.srew;7
8 importorg.apache.hadoop.conf.Configuration;9 importorg.apache.hadoop.fs.FileSystem;10 importorg.apache.hadoop.fs.Path;11 importorg.apache.hadoop.io.IntWritable;12 importorg.apache.hadoop.io.Text;13 importorg.apache.hadoop.mapreduce.Job;14 importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;15 importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;16
17 public classScrewApp {18 public static void main(String[] args) throwsException {19 //实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
20 Configuration conf = newConfiguration();21 //将hdfs写入的路径定义在本地,需要修改默认为文件系统,这样就可以覆盖到之前在core-site.xml配置文件读取到的数据。
22 conf.set("fs.defaultFS","file:///");23 //代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
24 FileSystem fs =FileSystem.get(conf);25 //创建一个任务对象job,别忘记把conf穿进去哟!
26 Job job =Job.getInstance(conf);27 //给任务起个名字
28 job.setJobName("WordCount");29 //指定main函数所在的类,也就是当前所在的类名
30 job.setJarByClass(ScrewApp.class);31 //指定map的类名,这里指定咱们自定义的map程序即可
32 job.setMapperClass(ScrewMapper.class);33 //指定reduce的类名,这里指定咱们自定义的reduce程序即可
34 job.setReducerClass(ScrewReducer.class);35 //设置输出key的数据类型
36 job.setOutputKeyClass(Text.class);37 //设置输出value的数据类型
38 job.setOutputValueClass(IntWritable.class);39 Path localPath = new Path("D:\\10.Java\\IDE\\yhinzhengjieData\\MyHadoop\\MapReduce\\out");40 if(fs.exists(localPath)){41 fs.delete(localPath,true);42 }43 //设置输入路径,需要传递两个参数,即任务对象(job)以及输入路径
44 FileInputFormat.addInputPath(job,new Path("D:\\10.Java\\IDE\\yhinzhengjieData\\MyHadoop\\MapReduce\\screw.txt"));45 //设置输出路径,需要传递两个参数,即任务对象(job)以及输出路径
46 FileOutputFormat.setOutputPath(job,localPath);47 //设置Reduce的个数为2.
48 job.setNumReduceTasks(2);49 //等待任务执行结束,将里面的值设置为true。
50 if (job.waitForCompletion(true)) {51 //当第一个MapReduce结束之后,我们这里又启动了一个新的MapReduce,逻辑和上面类似。
52 Job job2 =Job.getInstance(conf);53 job2.setJobName("Wordcount2");54 job2.setJarByClass(ScrewApp.class);55 job2.setMapperClass(ScrewMapper2.class);56 job2.setReducerClass(ScrewReducer.class);57 job2.setOutputKeyClass(Text.class);58 job2.setOutputValueClass(IntWritable.class);59 Path p2 = new Path("D:\\10.Java\\IDE\\yhinzhengjieData\\MyHadoop\\MapReduce\\out2");60 if(fs.exists(p2)) {61 fs.delete(p2, true);62 }63 FileInputFormat.addInputPath(job2, localPath);64 FileOutputFormat.setOutputPath(job2, p2);65 //我们将第一个MapReduce的2个reducer的处理结果放在新的一个MapReduce中只启用一个MapReduce。
66 job2.setNumReduceTasks(1);67 job2.waitForCompletion(true);68 }69 }70 }