Hadoop_常用存储与压缩格式
HDFS文件格式
文件格式 | 版本 |
---|---|
TEXTFILE | 默认格式 |
RCFILE | hive 0.6.0 和以后的版本 |
ORC | hive 0.11.0 和以后的版本 |
PARQUET | hive 0.13.0 和以后的版本,该数据格式企业中最常用 |
AVRO | hive 0.14.0 和以后的版本 |
数据存储的方式
文件格式 | 存储方式 | 说明 | 压缩比 |
---|---|---|---|
textfile | 按行存储 | 不压缩 | |
rcfile | 按列存储 | 14% | |
orcfile | 按列存储 | 每列数据有类似于元数据的索引信息,可以确定列内容, 需要某列信息时可以直接锁定列内容,效率优于 按行存储。压缩出来的文件比例最小,以时间换存储。 |
78% |
parquet | 按列存储 | 比较复杂,支持嵌套数据结构和高效其种类丰富的算法 (以应对不同值分布特征的压缩)压缩率不如orcfile, 时间与压缩比适中。 |
62% |
说明:orc是rcfile的一个优化版本
Hadoop支持压缩格式
压缩格式 | 可分割 | 算法 | 扩展名 | Linux工具 |
---|---|---|---|---|
gzip | 否 | DEFLATE | .gz | gzip |
lzo | 是(加索引) | LZO | .lzo | lzop |
snappy | 否 | Snappy | .snappy | 无 |
Bzip2 | 是 | Bzip2 | .bz2 | bzip2 |
deflate | 否 | DEFLATE | .deflate | 无 |
zip | 是 | ZIP | .zip | zip |
基于128MB文本文件的压缩性能测试横向比较
编码器 | 压缩时间(秒) | 解压缩时间(秒) | 压缩文件大小 | 压缩比率 |
---|---|---|---|---|
Deflate | 6.88 | 6.80 | 24,866,259 | 18.53% |
gzip | 6.68 | 6.88 | 24,866,271 | 18.53% |
bzip2 | 3,012.34 | 24.31 | 19,270,217 | 14.36% |
lzo | 1.69 | 7.00 | 40,946,704 | 30.51% |
lzop | 1.70 | 5.62 | 40,946,746 | 30.51% |
Snappy | 1.31 | 6.66 | 46,108,189 | 34.45% |
- Gzip压缩
优点:压缩率比较高,压缩/解压速度也比较快,hadoop本身支持。
缺点:不支持分片。
应用场景:当每个文件压缩之后在1个block块大小内,可以考虑用gzip压缩格式。
- lzo压缩
优点:压缩/解压速度也比较快,合理的压缩率,支持分片,是Hadoop中最流行的压缩格式,支持Hadoop native库。
缺点:压缩率比gzip要低一些,Hadoop本身不支持,需要安装,如果支持分片需要建立索引,还需要指定inputformat改为lzo格式。
应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越明显。
- snappy压缩
优点:支持Hadoop native库,高速压缩速度和合理的压缩率。
缺点:不支持分片,压缩率比gzip要低,Hadoop本身不支持,需要安装。
应用场景:当MapReduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式。
- bzip2压缩
优点:支持分片,具有很高的压缩率,比gzip压缩率都高,Hadoop本身支持,但不支持native。
缺点:压缩/解压速度慢,不支持Hadoop native库。
应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式,输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况。
总结:压缩比:bzip2 > gzip > lzo > snappy ,压缩速度:snappy > lzo> gzip > bzip2
所有压缩算法都必须在压缩程度和压缩/解压缩速度之间进行权衡。我们必须根据我们的场景选择这些编解码器,假设我们必须对很少查询的数据进行存档,然后我们必须使用像Bzip2这样的编解码器,如果我们经常需要访问我们的数据,我们可以使用像Snappy这样的算法给我们最快的数据压缩和解压缩。
网友评论