这种HBase数据存储方法是否正确?

时间:2014-06-16 05:47:52

标签: serialization hbase deserialization

这里想要做的是我想在HBase表中存储和检索序列化数据,之后我想要检索它们。我想按照方法。请告诉我,如果我错了。

put.add(streamColumnFamily,streamColumnName,serializedData);

这里的serializedData属性将由HBaseSerialization类处理。想要的是,这种方法是否正确。我能否按原样检索存储的数据。 (int as int,float as float,String as String etc)

1 个答案:

答案 0 :(得分:2)

是的,方法是正确的。 HBase以字节存储所有内容。 你基本上做了像

这样的事情
byte[] key = createSomeKey();

Put put = new Put(key);
put.add(streamColumnFamily,streamColumnName,serializedData); 

HTable h = .... // create HTable from HAdmin 

h.put(put);

您还可以使用本机java序列化机制来序列化和反序列化对象,如下所示:

   public byte[] serialize(Serializable object) throws IOException {


      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

      ObjectOutput stream = new ObjectOutputStream(byteArrayOutputStream);

      stream.writeObject(object);

      stream.flush();

      return byteArrayOutputStream.toByteArray()
    }


public Object deserialize(byte[] bytes){

     ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);

     ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);

     objectInputStream.readObject(); 
   }

此外,如果您正在序列化和反序列化基本对象,如Integer,Long,String ......在Bytes

中有一个名为org.apache.hadoop.hbase.util的良好实用程序类