2016-04-01 4 views
3

В настоящее время я использую KITE API + AVRO для обработки объектов Java для HBase. Но из-за различных проблем я ищу альтернативу. Я читал о:Объекты Java для Hbase

  • Phoenix

  • Native Hbase Апи.

Но есть ли еще альтернатива? , Идея состоит в том, чтобы сохранить и загрузить объекты Java в Hbase и использовать их в Java-приложении.

ответ

4

Если вы сохраняете свои объекты в части Value пары KeyValue, это действительно просто массив/последовательность байтов (например, в коде для класса KeyValue существует метод getValue, который возвращает массив байтов).

На данный момент вы планируете сериализацию объектов, и есть множество библиотек, которые вы можете использовать с различной простотой использования, характеристиками производительности и деталями реализации. Avro является один тип библиотеки сериализации, которая хранит схему с каждой записью, но вы могли бы в использовании теории:

  • Стандартная сериализация (реализации Serializable)
  • Kryo
  • Protobuf

Просто назвать несколько. Вы можете исследовать различные сильные стороны каждой библиотеки & своих компромиссов и баланса, которые против типа объектов, которые вы планируете хранить (т. Е. Все они являются фактически одним и тем же типом объекта или широко варьируются по типу? долговечные, то есть годы и ожидающие эволюции схемы. & обратная совместимость и т. д.)

1

Phoenix - это JDBC api для HBase. Он обрабатывает большинство типов SQL (кроме интервалов) - вы можете хранить произвольные java-объекты с использованием двоичного типа данных. Но если вы только сохраняете двоичные данные, вы можете легко придерживаться HBase. Если вы можете принуждать свои данные к стандартным типам SQL, Phoenix может быть хорошим вариантом.

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

Смежные вопросы