/ / Wie werden die serialisierten ProtoBuf-HBase-Spalten in Hive deserialisiert? - Hive, HBase, Protokoll-Puffer, Hive-Serde, Protobuf-Java

Wie können die serialisierten ProtoBuf-HBase-Spalten in Hive deserialisiert werden? - Hive, HBase, Protokoll-Puffer, Hive-Serde, Protobuf-Java

Ich habe ProtoBufs benutzt, um die Klasse zu serialisieren undin HBase-Spalten speichern. Ich möchte die Anzahl der Map Reduce-Jobs für einfache Aggregationen reduzieren, daher benötige ich SQL-ähnliches Werkzeug zur Abfrage der Daten. Wenn ich Hive verwende, ist es möglich, den HBaseStorageHandler zu erweitern und eigene Serde für jede Tabelle zu schreiben? Oder eine andere gute Lösung ist verfügbar.

Aktualisiert:

Ich habe den HBase-Tisch als erstellt

Erstelle "Bienenstock: Benutzer", "ich"

und eingefügt Benutzerdaten von Java API,

 public static final byte[] INFO_FAMILY = Bytes.toBytes("i");
private static final byte[] USER_COL = Bytes.toBytes(0);
public Put mkPut(User u)
{
Put p = new Put(Bytes.toBytes(u.userid));
p.addColumn(INFO_FAMILY, USER_COL, UserConverter.fromDomainToProto(u).toByteArray());
return p;
}

Mein Scan ergab folgende Ergebnisse:

hbase(main):016:0> scan "hive:users"
ROW                                COLUMN+CELL
kim123                            column=i:x00, timestamp=1521409843085, value=x0Ax06kim123x12x06kimkimx1Ax10kim123@gmail.com
1 row(s) in 0.0340 seconds

Wenn ich die Tabelle in Hive abfrage, sehe ich keine Datensätze. Hier ist der Befehl, den ich verwendet habe, um eine Tabelle zu erstellen.

create external table users(userid binary, userobj binary)
stored by "org.apache.hadoop.hive.hbase.HBaseStorageHandler"
with serdeproperties("hbase.columns.mapping" = ":key, i:0", "hbase.table.default.storage.type" = "binary")
tblproperties("hbase.table.name" = "hive:users");

Wenn ich die Hive-Tabelle abfrage, sehe ich den Datensatz nicht von HBase eingefügt.

Kannst du mir bitte sagen, was hier falsch ist?

Antworten:

0 für die Antwort № 1

Sie könnten versuchen, eine UDF zu schreiben, die den binären Protobuf übernimmt und ihn in eine lesbare Struktur umwandelt (kommagetrennt oder json). Sie müssten sicherstellen, dass Werte als Binärdaten zugeordnet werden.