逆光之处是快乐 发表于 2019-8-31 11:42:59

Hbase数据膨胀率



各位,问下,hbase数据膨胀率问题,
1003.5M为snappy压缩后的数据量大小
8GB为原数据没有压缩的数据量大小
1GB为LZO压缩后的数据量大小想问下,为什么压缩后hbase数据膨胀率会这么大??????
都达到8倍左右了,这边客户采用bulkload入库数据


s060403072 发表于 2019-9-1 19:27:47

这个就需要了解下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]
查看完整版本: Hbase数据膨胀率