Я використовував 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). Вам доведеться переконатись у відображенні значень як бінарних даних.