Java 个对象到 Hbase
Java objects to Hbase
我目前正在使用 KITE API + AVRO 将 java 对象处理到 HBase。但由于各种问题,我正在寻找替代方案。
我一直在阅读:
凤凰
原生 Hbase Api.
但是还有更多选择吗? .
这个想法是将 java 对象保存并加载到 Hbase 并在 java 应用程序中使用它们。
Phoenix 是 HBase 的 JDBC api。它处理大多数 SQL 类型(间隔除外)——您可以使用二进制数据类型存储任意 java 对象。但是如果你只存储二进制数据,你可以很容易地坚持使用 HBase。如果您可以将数据转换为标准 SQL 类型,Phoenix 可能是一个不错的选择。
如果您将对象存储在 KeyValue 对的值部分,那么它实际上只是一个数组/字节序列(即在 KeyValue class 的代码中有一个 getValue 方法 returns一个字节数组)。
此时,您已开始进行对象序列化,并且您可以使用大量具有各种易用性、性能特征和实现细节的库。 Avro 是一种序列化库,它存储每条记录的模式,但理论上你可以使用:
- 标准Java序列化(实现Serializable)
- 克里奥
- Protobuf
仅举几例。您可能想调查每个库的各种优势及其权衡,并根据您计划存储的对象类型进行权衡(即它们实际上都是同一类型的对象还是类型差异很大?它们会是长寿,即多年,并期待模式演变和向后兼容性等)
如果您想坚持使用 Hadoop/HBase 代码,您可以让复杂的 class 实现 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
我目前正在使用 KITE API + AVRO 将 java 对象处理到 HBase。但由于各种问题,我正在寻找替代方案。 我一直在阅读:
凤凰
原生 Hbase Api.
但是还有更多选择吗? . 这个想法是将 java 对象保存并加载到 Hbase 并在 java 应用程序中使用它们。
Phoenix 是 HBase 的 JDBC api。它处理大多数 SQL 类型(间隔除外)——您可以使用二进制数据类型存储任意 java 对象。但是如果你只存储二进制数据,你可以很容易地坚持使用 HBase。如果您可以将数据转换为标准 SQL 类型,Phoenix 可能是一个不错的选择。
如果您将对象存储在 KeyValue 对的值部分,那么它实际上只是一个数组/字节序列(即在 KeyValue class 的代码中有一个 getValue 方法 returns一个字节数组)。
此时,您已开始进行对象序列化,并且您可以使用大量具有各种易用性、性能特征和实现细节的库。 Avro 是一种序列化库,它存储每条记录的模式,但理论上你可以使用:
- 标准Java序列化(实现Serializable)
- 克里奥
- Protobuf
仅举几例。您可能想调查每个库的各种优势及其权衡,并根据您计划存储的对象类型进行权衡(即它们实际上都是同一类型的对象还是类型差异很大?它们会是长寿,即多年,并期待模式演变和向后兼容性等)
如果您想坚持使用 Hadoop/HBase 代码,您可以让复杂的 class 实现 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