HBase中,由于row(row key和column family、column qualifier、time stamp)是按照字典序进行排序的,因此,对于short、int、long等类型的数据,通过Bytes.toBytes(…)转换成byte数组后,必须按照大端模式(高字节在低地址,低字节在高地址)存放。对于value,也是同样的道理。因此,在使用Thrift API(C++、Php、Python等)方式时,最好对于row和value都统一按照大端进行pack和unpack处理。
如Hbase的certification表,通过命令scan 'certification',{LIMIT=>5},查询出结果如下:

hbase.png
想解析rowkey:00000509|30-84-54-DD-DA-19|1020002的列discover_times和first_start_time的字节码,使用python的struct模块实现如下:
第一步:在linux服务器上输入python命令
第二步:在python的交互命令行输入import struct
第三步:解析discover_times,使用struct.unpack(">I", "\x00\x00\x00\x01")[0]
第四步:解析first_start_time,使用struct.unpack(">Q", "\x00\x00\x00\x00[\xBC\xB21")[0]
第五步:在另外一个linux的xshell窗口使用date -d@第四步的值,可将时间戳转为能理解的时间格式。

struct.png
注意点:
1、第三步和第四步括号中参数">I"和“>Q”不能把“>”改为"<",因为hbase存储字节数组是大端模式,而“>”代表大端、“<”代表小端。
2、“>I”用于转换4字节的字节码数组,“>Q”用于转换8字节的字节码数组。