/ / ¿Cómo deserializar las columnas HBase serializadas de ProtoBuf en Hive? - hive, hbase, buffers de protocolo, hive-serde, protobuf-java

¿Cómo deserializar las columnas HBase serializadas de ProtoBuf en Hive? - hive, hbase, protocol-buffers, hive-serde, protobuf-java

He usado ProtoBuf "s para serializar la clase yalmacenar en columnas HBase. Quiero reducir el número de trabajos de Map Reduce para agregaciones simples, por lo que necesito una herramienta similar a SQL para consultar los datos. Si uso Hive, ¿es posible extender HBaseStorageHandler y escribir nuestro propio Serde para cada tabla? O cualquier otra buena solución está disponible.

Actualizado:

Creé la tabla HBase como

crear "colmena: usuarios", "i"

e insertó datos de usuario de la API de Java,

 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;
}

mi escaneo dio 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

Cuando consulto la tabla en Hive, no veo ningún registro. Aquí está el comando que usé para crear la tabla.

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

cuando consulto la tabla de la colmena, no veo el registro insertado desde hbase.

¿Me puede decir qué pasa aquí?

Respuestas

0 para la respuesta № 1

Podría intentar escribir un UDF que tomaría un protobuf binario y lo convertiría en una estructura legible (separada por comas o json). Tendría que asegurarse de asignar valores como datos binarios.