0

ProtoBuf を使用してクラスをシリアル化し、HBase 列に格納しました。単純な集計の Map Reduce ジョブの数を減らしたいので、データをクエリするための SQL のようなツールが必要です。Hive を使用する場合、HBaseStorageHandler を拡張して、各テーブルに独自の Serde を作成することは可能ですか? または、他の適切な解決策が利用可能です。

更新しました:

HBaseテーブルを次のように作成しました

「ハイブ: ユーザー」、「私」を作成します。

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=\x0A\x06kim123\x12\x06kimkim\x1A\x10kim123@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 から挿入されたレコードが表示されません。

ここで何が間違っているのか教えてください。

4

1 に答える 1

0

バイナリprotobufを取り、それを読み取り可能な構造(カンマ区切りまたはjson)に変換するUDFを作成してみてください。値をバイナリ データとしてマッピングする必要があります。

于 2018-03-17T23:39:59.577 に答える