/ / Як десаріалізувати стовпчики протобуфу з серіалізованими HBase у вулику? - вулик, hbase, протоколи-буфери, вулик-serde, protobuf-java

Як десериализировать серійно оформлені стовпці HBase у ProtoBuf у Hive? - кущ, hbase, протокольні буфери, hive-serde, protobuf-java

Я використовував ProtoBuf "s для серіалізації класу тамагазин у колонках HBase. Я хочу зменшити кількість завдань Map Reduce для простих агрегацій, тому мені потрібен інструмент SQL для запиту даних. Якщо я використовую вулик, чи можна розширити HBaseStorageHandler і написати свій серд для кожної таблиці? Або будь-яке інше хороше рішення є.

Оновлено:

Я створив таблицю HBase як

створити "вулик: користувачів", "i"

і вставив користувацькі дані з 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;
}

моє сканування дало результати:

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

Коли я запитую таблицю у вулику, я не бачу жодних записів. Ось команда, яку я використовував для створення таблиці.

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");

коли я запитую таблицю вуликів, я не бачу запису, вставленого з бази даних.

Скажіть, будь ласка, що тут не так?

Відповіді:

0 для відповіді № 1

Ви можете спробувати написати UDF, який би взяв двійковий протобуф і перетворив його в якусь читабельну структуру (розділені комами або json). Вам доведеться переконатись у відображенні значень як бінарних даних.