Hbase数据膨胀率
各位,问下,hbase数据膨胀率问题,
1003.5M为snappy压缩后的数据量大小
8GB为原数据没有压缩的数据量大小
1GB为LZO压缩后的数据量大小想问下,为什么压缩后hbase数据膨胀率会这么大??????
都达到8倍左右了,这边客户采用bulkload入库数据
这个就需要了解下snappy原理
压缩过程
变量声明
const char * input; 输入的待压缩的二进制串
unsigned int input_size; 输入的二进制串的字节数
char * output; 压缩后的数据存放位置
unsigned short table[]; 存放input_cur之前的每个字节开始的uint32的偏移,其下标与前边uint32的hash值对应。使用之前必须全部清0.
偏移:匹配开始位置距离串首的长度
第一步:将输入串的大小input_size存储在输出串output的前1-5个字节,将输入的串分割成32k大小的串,循环取出各块进行压缩
第二步:将输出位置emit_next设置为串首,即exmit_next = input,串比较位置ip_next设置为当前位置
第三步:拿到ip_next开始的4个字节转换成uint32然后hash
第四步:将emit_next加上hash值对应table的下标中的值赋给指针candidate
第五步:将当前位置的偏移赋给table
第六步:比较candidate处开始的四个字节转换成uint32与当前位置的uint32是否相等,若相等,执行第七步,否者ip_next自增1,执行第三步
第七步:将emit_next和ip_next之间串的长度和内容存储到output中
第八步:查找当前位置开始的串与candidate开始的串的最大匹配长度matched
第九步:存储匹配信息,包括匹配长度和偏移
第十步:candidate前移mathed长度
第十一步:查看candidate处是否匹配,若匹配,转到第八步;否则emit_next = candidate,ip_next = candidate,执行第十二步
第十二步:检查是否到了串尾,若是则退出,否则转到第三步
更多参考
相关源码:
https://github.com/andikleen/snappy-c
页:
[1]