2016-04-01 37 views
3

Şu anda java nesnelerini HBase ile işlemek için KITE API + AVRO kullanıyorum. Fakat çeşitli problemlerden dolayı bir alternatif arıyorum.Java nesneleri Hbase için

  • Phoenix

  • Yerli Hbase Api: Ben okuyorduk.

Ama daha alternatif var mı? . Fikir, java nesnelerini Hbase'e kaydetmek ve yüklemek ve bunları bir java uygulamasında kullanmaktır.

cevap

4

Nesnelerinizi KeyValue çiftinin Değer bölümünde saklıyorsanız, bu yalnızca bir dizi/bayt dizisidir (yani, KeyValue sınıfının kodunda bir bayt dizisi döndüren bir getValue yöntemi vardır).

Bu noktada, serileştirme işlemine itiraz edersiniz ve çeşitli kullanım kolaylığı, performans özellikleri ve uygulama ayrıntılarıyla birlikte kullanabileceğiniz birçok kitaplık vardır. Avro her kayıtla şema saklayan seri kütüphanenin bir türüdür, ancak teorinin kullanımda olabilir:

  • Standart Java seri hale (Serializable uygulamak)
  • Kryo
  • Protobuf

Sadece birkaç isim. Her bir kütüphanenin & muhtelif güçlerini ve bunların saklamayı planladığınız nesnelerin türüne göre dengelenmesini isteyebilirsiniz (örneğin hepsi aynı tür nesneler mi yoksa geniş çapta çeşitlilik gösteriyor mu?) Uzun ömürlü yıllardır ve şema evrimi beklentisi var & geriye dönük uyumluluk vb.)

1

Phoenix, HBase için bir JDBC API'sidir. Çoğu SQL türünü işler (aralıklar hariç) - ikili veri türünü kullanarak rasgele java nesnelerini depolayabilirsiniz. Ancak, sadece ikili verileri depolarsanız, HBase ile kolayca yapışabilirsiniz. Verilerinizi standart SQL türlerinde zorlayabilirseniz, Phoenix iyi bir seçenek olabilir.

1

Hadoop/HBase koduyla bağlanmak istiyorsanız, karmaşık sınıf uygulamanıza org.apache.hadoop.io.Writable sahip olabilirsiniz.

// 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