2010-11-03 5 views
3

У меня есть сложные объекты с полями сбора, которые необходимо было сохранить в Hadoop. Я не хочу проходить через все дерево объектов и явно хранить каждое поле. Поэтому я просто думаю о сериализации сложных полей и храню его как одну большую часть. И чем desirialize это при чтении объекта. Так что это лучший способ сделать это? Я хотя бы об использовании какой-то серилизации для этого, но я надеюсь, что у Hadoop есть средства для решения этой ситуации. КлассКак хранить сложные объекты в хаосе Hbase?

Sample объекта для хранения:

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's Writable должно быть достаточно хорошим.

+0

Спасибо. Как бы вы преобразовали массив байтов в исходный (Writable) объект, вот как выглядит десериализация? Предпочтительно использовать метод Hadoop serde. –

+0

@ bajafresh4life: Не могли бы вы помочь мне в этом. Я действительно новичок в HBase и даю мне легкие шаги. Спасибо ВАМ http://stackoverflow.com/questions/24236547/how-to-store-primitive-datatypes-strings-in-a-hbase-column-and-retrieve-them-u –