hive中表的存储格式,不仅支持text文本格式,还支持其他很多格式。比如说ORC格式和parquet格式。hive在建表的时候通过stored as 指定格式,如果没有指定格式就默认为textfile格式。
ORC和parquet是列式存储格式,底层是以二进制形式存储。数据存储效率极高,用于查询方便。
hive默认的查询引擎是MapReduce,因此通常说的hive压缩是MapReduce压缩。压缩是指通过算法对数据进行重新编排,降低存储空间,无损压缩。
MapReduce可以对数据在两个阶段进行压缩。
map输出端,减少shuffle的数据量,提高shuffle时网络io的效率。
reduce端,减少文件的大小,降低磁盘的存储空间。
当然压缩会带来一些弊端,浪费时间,消耗CPU,内存,某些优秀的压缩算法需要钱。
下面说明如何配置hive的压缩参数设置。
--设置Hive的中间压缩 也就是map的输出压缩
1)开启 hive 中间传输数据压缩功能
set hive.exec.compress.intermediate=true;
2)开启 mapreduce 中 map 输出压缩功能
set mapreduce.map.output.compress=true;
3)设置 mapreduce 中 map 输出数据的压缩方式
set mapreduce.map.output.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
--设置Hive的最终输出压缩,也就是Reduce输出压缩
1)开启 hive 最终输出数据压缩功能
set hive.exec.compress.output=true;
2)开启 mapreduce 最终输出数据压缩
set mapreduce.output.fileoutputformat.compress=true;
3)设置 mapreduce 最终数据输出压缩方式
set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;
4)设置 mapreduce 最终数据输出压缩为块压缩 还可以指定RECORD
set mapreduce.output.fileoutputformat.compress.type=BLOCK;