总述

文件存储格式(Text、Sequence、ORC、Parquet)与数据压缩格式(gzip、lzo、snappy、bzip2)的选择是两件事,Text使用Gzip、Bzip2较为推荐,Parquet使用Snappy、Gzip较为推荐。

Hive 语句最终是转化为 MapReduce 程序来执行的,而 MapReduce 的性能瓶颈在与 网络IO 和 磁盘IO,要解决性能瓶颈,最主要的是 减少数据量,对数据进行压缩是个好方式。压缩虽然是减少了数据量,但是压缩过程要消耗 CPU,但是在 Hadoop 中,往往性能瓶颈不在于 CPU,CPU 压力并不大,所以压缩充分利用了比较空闲的 CPU。

其实各种优化手段(存储方案、压缩方案、优化方案),无非就是减少每一个阶段处理的数据量,能够并行处理的尽量并行处理,防止数据倾斜的产生。

1、Hive的数据压缩介绍及使用

1、HIVE的输入编解码器不需要设置,使用文件扩展名自动判断是否支持,Hive的Map、Reduce压缩功能默认不开启;
2、Hive常见的存储格式的区别与应用场景,SequenceFile实现合并小文件,SequenceFile格式与mapreduce;
3、HIVE使用Map、Reduce压缩功能时需要开启hive中间传输数据压缩功能,才可正常使用;
4、snappy最常作为企业数据压缩格式,但不支持切分,而LZO可通过使用索引实现切分;

# 开启hive中间传输数据压缩功能
hive (default)>set hive.exec.compress.intermediate=true;
# snappy可以进行行级、块级压缩
hive (default)>set hive.intermediate.compression.type=BLOCK;
# 设置中间传输数据的压缩方式
hive (default)>set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

# 开启mapreduce中map输出压缩功能
hive (default)>set mapreduce.map.output.compress=true;
# 设置mapreduce中map输出数据的压缩方式
hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
# 开启hive最终输出数据压缩功能
hive (default)>set hive.exec.compress.output=true;
# 设置最终输出压缩编解码器为Gzip
hive (default)>set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

# 开启mapreduce最终输出数据压缩 (即,Reduce输出压缩功能)
hive (default)>set mapreduce.output.fileoutputformat.compress=true;
# 设置mapreduce最终数据输出压缩方式
hive (default)>set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
# 设置mapreduce最终数据输出压缩为块压缩
hive (default)>set mapreduce.output.fileoutputformat.compress.type=BLOCK;

2、文件存储格式

hive 压缩率 存储格式和压缩格式的 hive支持的压缩格式_mapreduce


Hive支持的存储数据的格式主要有:TEXTFILE(行式存储,有明文查验、与其他系统有交互时使用) 、SEQUENCEFILE(行式存储,hadoop原生支持好而在生产中一般不用)、ORC(列式存储,RCFILE的优化,可拆分、压缩比高、节省集群资源)、PARQUET(列式存储,支持嵌套结构的存储、数据格式是语言且平台无关)。

1)行存储的特点

查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

2)列存储的特点

因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

3、测试存储和压缩

比对三种主流的文件存储格式TEXTFILE 、ORC、PARQUET
1、压缩比:ORC > Parquet > Text(Text纯文本记录,是Hive的默认格式)
2、查询速度:三者几乎一致
3、HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名
4、Text存储格式的表可以直接加载明文数据文件,而ORC、PARQUET需要通过其中转插入