博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义实现Hadoop Key-Value
阅读量:7042 次
发布时间:2019-06-28

本文共 1119 字,大约阅读时间需要 3 分钟。

hot3.png

自定义实现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())方法完成该类对应比较程序的注册。

转载于:https://my.oschina.net/sdzzboy/blog/164119

你可能感兴趣的文章
认识Android MVP
查看>>
端口镜像 SPAN && RSPAN
查看>>
跨界的一点点感悟
查看>>
在有母版页的页面里使用FindControl的困惑
查看>>
UI设计师面试时必须注意的6大问题
查看>>
无线宽带路由器300M导致的网络故障
查看>>
VMware Virtual SAN 设计与规模调整指南
查看>>
我的友情链接
查看>>
SET-MAP现代诗一首
查看>>
ConfigParser
查看>>
CentOS系统启动
查看>>
浅尝 Windows Server 2016 —— Container 容器:概念
查看>>
配置管理小报091124:*** glibc detected *** double free or corruption (fasttop): 0x08b60068 ***
查看>>
配置管理小报101010:数据库修复方法。
查看>>
Linux安装配置apache
查看>>
PHP 调试利器 debug_print_backtrace
查看>>
SQL 结果集标识
查看>>
20分钟轻松制作移动网站
查看>>
java开发的基本算法
查看>>
用于Raspberry Pi 的Linux 操作系统已经可用
查看>>