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 № 1Podrí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.