加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

自定义达成Hadoop Key-Value

发布时间:2021-11-21 20:18:34 所属栏目:教程 来源:互联网
导读:自定义实现Value: 如果需要自定义一个一个Value类型,那么需要实现Hadoop预定义接口org.apache.hadoop.io.Writable。Writable包含两个重要的方法:readFields和write,主要用于数据的序列化和反序列化。对于Writable的子类的成员变量必须是Java的基本类型或

自定义实现Value:
 
如果需要自定义一个一个Value类型,那么需要实现Hadoop预定义接口org.apache.hadoop.io.Writable。Writable包含两个重要的方法:readFields和write,主要用于数据的序列化和反序列化。对于Writable的子类的成员变量必须是Java的基本类型或者是其他实现了Writable接口的类型。如果是Java的基本类型则可以使用DataInput的相应方法进行成员变量的读写,例如:
 
int responseSize = in.readInt();
 
String userIP = in.readUTF();
 
如果是实现了Writable接口的类型可以使用该类型的write和readFields方法进行数据的读写,例如:
 
Text name=new Text();
 
name.readFields(in);
 
注意事项:
 
(1)如果过实现接口Writable的自定义类型包含构造函数,一定需要书写参数为空的自定义函数(2)如果Hadoop应用采用了TextOutputFormat作为输出格式并且采用了自定义Key或者Value,因为TextOutputFormat采用value的toString方法进行最后结果的输出,因此在自定义Writable的时候需要根据需要实现一个有意义的toString方法(3)当Hadoop进行输入处理的时候,Hadoop一般会重复使用key或value对象,主要注意上一次读取的数据会不会对本次处理产生影响。
 
 
 
自定义实现Key:
 
作为Hadoop Key,需要具备比较功能,以便hadoop进行分区和排序。因此,Key需要实现两个接口,一个是Writable接口;一个是WritableComparable接口。WritableComparable增加了一个compareTo方法,用来进行对象的比较。
 
注意事项:
 
一般情况下采用compareTo方法就能满足应用需求,但是该方法需要将二进制数据反序列化成对象,因此性能不是特别高。为此,Hadoop一般为每一种Writable类型提供一种RawComparator,用来进行二进制数据的比较。如果需要使用RawComparator,则首先需要继承WritableComparator并自定义实现其中的compare方法;然后,通过 WritableComparator.define(IntWritable.class, new Comparator())方法完成该类对应比较程序的注册。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读