2010-11-03 69 views
3

我拥有需要存储到Hadoop的具有集合字段的复杂对象。我不想通过整个对象树并明确地存储每个字段。所以我只考虑复杂领域的序列化并将其作为一个大件存储。而不是在阅读对象时进行desirialize。那么最好的办法是什么?我虽然想为此使用某种形式的服务,但我希望Hadoop能够处理这种情况。如何将复杂对象存储到hadoop Hbase中?

样本对象的类来存储:

class ComplexClass { 

<simple fields> 

List<AnotherComplexClassWithCollectionFields> collection; 


} 

回答

5

HBase的只有字节数组交易,所以你可以在你认为合适的任何方式序列化你的对象。

串行化对象的标准Hadoop方法是实现org.apache.hadoop.io.Writable接口。然后你可以使用org.apache.hadoop.io.WritableUtils.toByteArray(Writable ... writable)将你的对象序列化成一个字节数组。另外,还有其他一些Hadoop社区用户使用的序列化框架,如Avro,Protocol Buffers和Thrift。所有的都有自己的具体用例,你的研究也是如此。如果你正在做一些简单的事情,那么实现Hadoop的Writable应该足够好。

+0

谢谢。如何将字节数组转换回原始(可写入)对象,这就是反序列化的样子?最好使用Hadoop的serde方法。 – 2013-09-13 13:40:39

+0

@ bajafresh4life:你能帮我解决这个问题吗?我是HBase的新手,并通过简单的步骤指导我。感谢YOu http://stackoverflow.com/questions/24236547/how-to-store-primitive-datatypes-strings-in-a-hbase-column-and-retrieve-them-u – 2014-06-16 04:11:08

相关问题