分享

hadoop job解决大数据量关联的一种方法

pig2 发表于 2014-2-15 00:09:37 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 7271
阅读本文可以带着下面问题:
1.解决大数据关联通过那两个类来实现
2.能否通过代码,总结出代码思想



用java写的hadoop程序实现关联,首先重写分发类(PKPartitioner)和比较类(PVComparator):
  1. public static class PKPartitioner<K2 extends WritableComparable<Text>, V2 extends Writable>
  2. extends HashPartitioner<K2, V2>
  3. {
  4. public PKPartitioner() {}
  5. public int getPartition(K2 key, V2 value, int numReduceTasks) {
  6. return (key.toString().split(“\u0002″)[0].hashCode() & Integer.MAX_VALUE) % numReduceTasks;}
  7. }
  8. public static class PVComparator extends WritableComparator {
  9. public PVComparator() {super(Text.class, true);}
  10. private int compareStr(String a, String b) {
  11. String aTokens = a.split(“\u0002″)[0];
  12. String bTokens = b.split(“\u0002″)[0];
  13. return aTokens.compareTo(bTokens);}
  14. public int compare(Object a, Object b) {
  15. String aStr = a.toString();
  16. String bStr = b.toString();
  17. int i = compareStr(aStr, bStr);
  18. return i;}
  19. public int compare(WritableComparable a, WritableComparable b) {
  20. String aStr = a.toString();
  21. String bStr = b.toString();
  22. return compareStr(aStr, bStr);}
  23. }
复制代码
实现思想是,在map输出的key后面加入一个非常用字符(^A),在这个字符之后加上两个不同的字符(用字符序的一大一小,来形成reduce节点上的数据排序,字母序小的排前面)。map分发数据时,以^A前面的原串为标准,在重写的compare函数的配合下相同的key还是会到同一个reduce节点上,以此实现大数据量数据的关联。

PKPartitioner这个类是用来决定map输出时,什么样的key输出到同一个reduce节点(调用setPartitionerClass方法),但不保证到同一个reduce节点的key会在同一个group(即不一定在reduce的同一个iter迭代里)。注:map端当输出buffer到达内存的一定比例时,将内存中的数据写到磁盘,此时会按key进行排序,然后才写入磁盘。

由于PKPartitioner不保证同一个reduce节点的key会到一个group中,所以还需要PVComparator 来指定group的划分方法(调用setOutputValueGroupingComparator方法),一个group即一个iter迭代。

另外,还有一个setOutputKeyComparatorClass方法,这个很容易和setOutputValueGroupingComparator混淆,setOutputValueGroupingComparator是用来觉得group划分,而setOutputKeyComparatorClass是用来决定key的排序。默认情况下,reduce节点上的数据是按key的升序字母序来排的,如果你要改变这个顺序(比如数字序)可以用setOutputKeyComparatorClass来指定自定义的类。


来自群组: Hadoop技术组

没找到任何评论,期待你打破沉寂

ssbpls 发表于 2014-2-15 09:25:35
学习了,东西不错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条