1 hive 的文件存储格式
- TEXTFILE
- SEQUENCEFILE
- AVRO
- RCFILE
- ORC
- PARQUET
1 分类
面向行的:
TEXTFILE、SEQUENCEFLIE、AVRO
面向列的
RCFILE、ORC、PARQUET
2 两种分类的区别
面向行的不是最佳的文件格式,因为即便只查询一列数据,使用面向行存储的文件格式的表都要读取完整的一行数据。
面向列的可以很好的解决面向行存储的问题
3 每种文件格式的说明:
1 TEXTFILE
- 创建表的默认存储格式
- 存储为文本文件,可以被分割和并行处理
- 可以使用压缩:GZIP 、LZO、SNAPPY
2 SEQUENCEFILE
- key/value对的二进制存储格式
- 优点: 比textfile有更好的压缩,支持块压缩
3 AVRO
- 二进制格式文件
- 是一个序列化和反序列化的框架
4 RCFILE
- 先将表分为几个行组
- 对每个行组内的数据进行按列存储,每列数据都是分开存储,即先水平划分,再垂直划分
5 ORC
- 加强版的RCFILE,默认存储块256m
6 PARQUET
- 列式存储的文件格式,与ORC类似
- parquet支持的生态更广
2 表的压缩
hive表进行压缩是常见的优化手段,一些存储方式自带压缩选择。
压缩的优点:
减少存储磁盘空间,降低单节点的磁盘IO。由于压缩后的数据占用的带宽更少,因此可以加快数据在Hadoop集群流动的速度。
压缩的缺点:
需要花费的时间/CPU做数据的压缩和解压缩计算。
支持压缩后分割的方式优点:
可以分割的格式允许单一文件由多个mapper程序处理,可以更好的并行化。
1 SEQUENCEFILE 压缩选择:
NONE、RECORD、BLOCK
注:RECORD压缩率低,一般建议使用BLOCK压缩
2 ORC 压缩选择:
NONE、ZLIB(默认)、SNAPPY
3 PARQUET压缩选择:
LZO
SNAPPY(默认),一般使用impala查询引擎时,选择该压缩类型
Gzip
4 总结
1 对于ORC
1. 压缩格式支持的有限,且都不支持切分,所以适合单个文件不是特别大的场景
2. zlib 压缩率高,但效率差一些;
3. 使用snappy效率高但是,压缩率低
2 对于parquet
1.lzo压缩是支持切分的,所以表的单个文件较大的场景会选择lzo格式
2. Gzip压缩率高,但效率差一些
3. snappy lzo 效率高,但是压缩率低
3 实际项目 文件存储格式 、压缩格式选型时:
1 文件存储格式 orc 、parquet
如果是选择用impala,可考虑 parquet,否则orc压缩率高
2 压缩格式一般是 snappy、lzo
如果是大文件多,追求并发处理,选择 可切分的 parquet+lzo
否则选用 parquet + snappy 或 orc + snappy 、orc + zip