私はProtoBufを使ってクラスをシリアライズしていますHBaseカラムに保存する。 単純集計用のMap Reduceジョブの数を減らしたいので、データを照会するためのツールのようなSQLが必要です。 Hiveを使用する場合、HBaseStorageHandlerを拡張して各テーブルに独自のSerdeを書くことは可能ですか? または他の良い解決策があります。
更新しました:
HBaseテーブルを次のように作成しました。
"hive:users"、 "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
Hiveでテーブルをクエリすると、レコードが表示されません。 これは私がテーブルを作成するために使用したコマンドです。
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");
ハイブテーブルを照会したときに、hbaseから挿入されたレコードが表示されない
ここで何が悪いのか教えてください。
回答:
回答№1は0あなたはバイナリprotobufを取り、それを何らかの可読構造(コンマ区切りまたはjson)に変換するUDFを書くことを試みることができます。値をバイナリデータとしてマップするようにする必要があります。