Hadoop Datajoin例子运行时出错的问题

最近用了用Hadoop,要试从两个数据源读取数据再取交集的功能,查了一下就是Hadoop的DataJoin,大喜之下认真看看,网上搜一下相关贴子还不少(细看之后才知道都是抄《Hadoop in Action》的),不过这篇贴子(http://www.cnblogs.com/xuqiang/archive/2011/06/05/2073155.html)做的注解很通俗易懂,很好。

 

试了一下书上的例子,困难重重(我用的是1.0.3)。不过回想起来主要碰到的是两个问题:

  1. 库非要在${HADOOP_HOME}/lib/下才行,所以要做:cp ./contrib/datajoin/hadoop-datajoin-1.0.3.jar ./lib/hadoop-datajoin-1.0.3.jar
  2. 运行时在combine阶段空指针出错,解决方案:
 1     public static class TaggedWritable extends TaggedMapOutput {
 2         private Writable data;
 3         //Note: 加上这个默认构造函数
 4         public TaggedWritable() {
 5                 this.tag = new Text("");
 6                 this.data = new Text("");
 7         }
 8         .........
 9 }
10  
11  
12     public static class TestJoinReducer extends DataJoinReducerBase {
13         protected TaggedMapOutput combine(Object[] tags, Object[] values) {
14                 if (tags.length < 2) return null;
15                 String joinedStr = "";
16                 for (int i=0; i<values.length; i++) {
17                         if (i > 0) joinedStr += ",";
18                         //Note:这样即可,不必象原书那么复杂
19                         TaggedWritable tw = (TaggedWritable)values[i];
20                         String line = ((Text) tw.getData()).toString();
21                         String[] tokens = line.split(",", 2);
22                         joinedStr += tokens[1];
23                 }
24                 TaggedWritable retv = new TaggedWritable(new Text(joinedStr));
25                 retv.setTag((Text) tags[0]);
26                 return retv;
27         }
28     }

 

最后的一点结论:

  • Google大神很强大,各位爱分享的大牛很热心,但解决问题自己多动脑才更好,不要太依赖于别人的现有成果;
  • Datajoin用的仍是Hadoop旧的MapRed库,不知什么时候能更新到MapReduce库;
  • Hive可以更方便的搞定类似问题;

转载于:https://www.cnblogs.com/szlx/archive/2012/08/21/Hadoop_DataJoin_Issue.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值