2016-04-01 5 views
3

私は現在KITE API + AVROを使用して、HBaseへのJavaオブジェクトを処理しています。しかし、さまざまな問題のために私は代替案を探しています。私は約読んでいる :HbaseへのJavaオブジェクト

  • フェニックス

  • ネイティブHBaseのAPIです。

しかし、もっと多くの選択肢がありますか? 。 アイデアは、保存して、Hbaseにjavaオブジェクトをロードし、それらをJavaアプリケーションで使用することです。

答えて

4

KeyValueペアのValue部分にオブジェクトを格納している場合は、実際には配列/バイト列です(KeyValueクラスのコードにはバイト配列を返すgetValueメソッドがあります)。

この時点では、オブジェクトの直列化が行われており、さまざまな使いやすさ、パフォーマンス特性、および実装の詳細について使用できる多数のライブラリがあります。アブロあなたは理論利用にでき、各レコードのスキーマを格納シリアライズライブラリの一種である、しかし:

  • 標準のJavaシリアライゼーション(Serializableを実装)
  • Kryo
  • いるProtobuf

だけいくつか例を挙げると。各ライブラリ&のさまざまな強みを調査して、保存する予定のオブジェクトのタイプとのトレードオフとバランスを調べることができます(つまり、それらはすべて効果的に同じタイプのオブジェクトですか、タイプが大きく異なりますか?長年生きている年、スキーマの進化を期待している&下位互換性など)

1

フェニックスはHBaseへのJDBC APIです。これは、ほとんどの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

関連する問題