/ / Como desserializar as colunas HBase serializadas do ProtoBuf no Hive? - hive, hbase, buffers de protocolo, hive-serde, protobuf-java

Como desserializar as colunas HBase serializadas ProtoBuf no Hive? - hive, hbase, buffers de protocolo, hive-serde, protobuf-java

Eu usei o ProtoBuf "s para serializar a classe earmazenar nas colunas HBase. Quero reduzir o número de tarefas de Redução de mapa para agregações simples, por isso preciso da ferramenta do SQL para consultar os dados. Se eu usar o Hive, é possível estender o HBaseStorageHandler e escrever nosso próprio Serde para cada tabela? Ou qualquer outra boa solução está disponível.

Atualizada:

Eu criei a tabela HBase como

crie "hive: users", "i"

e inseriu dados do usuário de 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;
}

minha verificação deu resultados como:

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

Quando consulta a tabela no Hive, não vejo nenhum registro. Aqui está o comando que eu usei para criar a tabela.

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

ao consultar a tabela de seção, não vejo o registro inserido do hbase.

Você pode me dizer o que há de errado aqui?

Respostas:

0 para resposta № 1

Você poderia tentar escrever um UDF que usasse o protobuf binário e o convertesse em alguma estrutura legível (separada por vírgula ou json). Você precisaria garantir o mapeamento de valores como dados binários.