设为首页 收藏本站
查看: 689|回复: 0

[经验分享] Hadoop实例练习(二)

[复制链接]

尚未签到

发表于 2018-10-31 07:41:10 | 显示全部楼层 |阅读模式
  实例描述:
  现有两个文件,dedu1.txt和dedu2.txt,数据文件中的每一行都是一个数据,现要对这两个文件进行去重,两个文件内容分别为(同颜色的表示重复的数据):
  dedu1.txt:                                            dedu2.txt:
  2012-3-1 a                                                2012-3-1 b
  2012-3-2 b                                                2012-3-2 a
  2012-3-3 c                                                2012-3-3 b
  2012-3-4 d                                               2012-3-4 d
  2012-3-5 a                                                2012-3-5 a
  2012-3-6 b                                                2012-3-6 c
  2012-3-7 c                                                2012-3-7 d
  2012-3-3 c                                                2012-3-3 c
  考查重点及设计思路:
  考查重点:MapReduce会把相同key值的对发送至同一台reduce机器上进行处理,无论这个key值出现多少次,只要在最终结果输出一次就可以了。所以这里应该把每行数据作为可以key值,value值没有要求,可以设置为空。
  设计思路
  按照默认的TextInputFormat格式每行文本形成一个对,key为行号,value为文本值;
  在Mapper中进行处理时,将key设置为文本值(即Map输入的value值),value设置为空即可,因为此处不需要知道key值得个数等其他信息,所以此时只要比较key是否相等就可判断是否为重复的数据;
  在Reducer中进行处理时,因为所有相同key值得value对都会送至一台reduce机器上调用reduce函数进行处理。在reduce函数中,我们知道reduce函数的输入是一个key值和这个key相对应的一个value列表,所以我们这里我们不管这个key值有多少个value,只要直接将key复制为输出的key值简单的输出一次即可(输出的value设置为空)。
  程序代码如下:
  Mapper类:
public class DeDuMap extends Mapper{  private Text data = new Text();
  public void map(Object key, Text value,Context context)
  throws IOException, InterruptedException{
  data.set(value.toString());
  context.write(data, new Text(""));
  }
  
}
  Reducer类:
public class DeDuReduce extends Reducer{  public void reduce(Text key, Iterable values, Context context)
  throws IOException, InterruptedException{
  context.write(key, new Text(""));
  }
  
}
  主函数:
public class DeDumain {  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: Dedumain  ");
  System.exit(2);
  }
  Job job = new Job(conf,"de du");
  job.setJarByClass(DeDumain.class);
  job.setMapperClass(DeDuMap.class);
  job.setCombinerClass(DeDuReduce.class);
  job.setReducerClass(DeDuReduce.class);
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(Text.class);
  FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
  FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
  System.exit(job.waitForCompletion(true)? 0:1);
  }
  
}
  
  



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628660-1-1.html 上篇帖子: 正式生产环境下hadoop集群的DNS+NFS+ssh免密码登陆配置 下篇帖子: hadoop安装与配置(完全分布模式)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表