reduce 数据倾斜_Hadoop基础-MapReduce的数据倾斜解决方案

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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值