2016-04-01 12 views
3

Ich verwende derzeit KITE API + AVRO, um Java-Objekte zu HBase zu behandeln. Aber wegen verschiedener Probleme suche ich nach einer Alternative. Ich habe gelesen, über:Java-Objekte zu Hbase

  • Phoenix

  • Mutter Hbase Api.

Aber es gibt mehr eine Alternative? . Die Idee ist, die Java-Objekte zu speichern und in Hbase zu laden und sie in einer Java-Anwendung zu verwenden.

Antwort

4

Wenn Sie Ihre Objekte im Value-Teil des KeyValue-Paars speichern, handelt es sich tatsächlich nur um ein Array/eine Folge von Bytes (d. H. Im Code für die KeyValue-Klasse gibt es eine getValue-Methode, die ein Byte-Array zurückgibt).

An diesem Punkt können Sie die Serialisierung ablehnen, und es gibt eine Vielzahl von Bibliotheken, die Sie mit verschiedenen Benutzerfreundlichkeit, Leistungsmerkmalen und Details der Implementierung verwenden können. Avro ist eine Art von Serialisierung Bibliothek, die das Schema mit jedem Datensatz gespeichert werden, aber man könnte theoretisch Gebrauch:

  • Standard-Java-Serialisierung (Serializable implementieren)
  • Kryo
  • Protobuf

Nur um ein paar zu nennen. Vielleicht möchten Sie die verschiedenen Stärken der einzelnen Bibliotheken untersuchen und das Gleichgewicht zwischen der Art der Objekte, die Sie speichern wollen, ausbalancieren (dh ob es sich tatsächlich um die gleiche Art von Objekten handelt oder sind die Typen sehr unterschiedlich? Werden sie es sein?) langlebig dh Jahre und haben die Erwartung der Schemaevolution & Abwärtskompatibilität etc.)

1

Phoenix ist eine JDBC API zu HBase. Es verarbeitet die meisten SQL-Typen (außer Intervallen) - Sie können beliebige Java-Objekte mit dem binären Datentyp speichern. Aber wenn Sie nur binäre Daten speichern, können Sie leicht mit HBase bleiben. Wenn Sie Ihre Daten in Standard-SQL-Typen konvertieren können, ist Phoenix möglicherweise eine gute Option.

1

Wenn Sie mit dem Hadoop/HBase-Code bleiben möchten, können Sie Ihre komplexe Klasse implementieren 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