Java对象到Hbase

时间:2016-04-01 15:36:55

标签: java hbase avro phoenix

我目前正在使用KITE API + AVRO来处理HBase的java对象。但由于各种问题,我正在寻找替代方案。 我一直在阅读:

  • 凤凰

  • Native Hbase Api。

但还有更多选择吗? 。 我们的想法是将Java对象保存并加载到Hbase,并在Java应用程序中使用它们。

3 个答案:

答案 0 :(得分:5)

如果您将对象存储在KeyValue对的Value部分中,那么它实际上只是一个数组/字节序列(即在KeyValue类的代码中有一个getValue方法返回一个字节数组)。

此时,您需要进行对象序列化,并且可以使用大量库,具有各种易用性,性能特征和实现细节。 Avro是一种类型化的序列化库,它存储每个记录的模式,但理论上你可以使用:

  • 标准Java序列化(实现Serializable)
  • KRYO
  • 的Protobuf

仅举几例。您可能想要研究每个库的各种优势。它与你计划存储的对象类型之间的权衡和平衡(即它们是否都是有效的相同类型的对象,或者它们在类型上的差异很大?它们是否会长期存在,即数年并且期望模式演变和放大器;向后兼容性等。)

答案 1 :(得分:1)

Phoenix是HBase的JDBC api。它处理大多数SQL类型(间隔除外) - 您可以使用二进制数据类型存储任意Java对象。但是,如果您只存储二进制数据,则可以轻松使用HBase。如果您可以使用标准SQL类型强制数据,那么Phoenix可能是一个不错的选择。

答案 2 :(得分:1)

如果您想坚持使用Hadoop / HBase代码,可以使用复杂的类实现org.apache.hadoop.io.Writable

// Some complex java object
// that implements org.apache.hadoop.io.Writable
SomeObject myObject = new SomeObject();

// write the object to a byte array
// for storage in HBase
byte[] byteArr = WritableUtils.toByteArray(myObject);

Reference