Hadoop默认支持Gzip和BZip2的解压缩方式,可直接读取(hadoop fs -text命令),但hive只能用TEXTFILE格式的表加载,然后再insertoverwrite 到其他格式的表(比如SEQUENCEFILE表),如果hive其他格式的表想要直接加载压缩格式数据,需要重写INPUTFORMAT和OUTPUTFORMAT文件类。
BZip2和LZO(提供block级的压缩)支持文件切分,Gzip和Snappy则不支持。 不支持则hadoop不能并行的进行map操作。
hadoop中支持的压缩格式
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gzip org.apache.hadoop.io.compress.GzipCodec
bzip org.apache.hadoop.io.compress.BZip2Codec
Snappy org.apache.hadoop.io.compress.SnappyCodec
LZO:
org.apache.hadoop.io.compress.LzopCodec或者com.hadoop.compression.lzo.LzopCodec;
org.apache.hadoop.io.compress.LzoCodec或者com.hadoop.compression.lzo.LzoCodec;
可以查看目前hive已加载的所以编解码器
set io.compression.codecs;
中间结果压缩
set hive.exec.compress.intermediate=true;
set hive.intermediate.compression.codec=org.apache.Hadoop.io.compress.LzoCodec;
map结果压缩最好使用snappy的,因为压缩的前提是map输出非常大,影响io,如果中间结果数据集比较小反而会拖慢速度。
设置map输出结果压缩
Set mapred.map.output.compression.codec=org.apache.Hadoop.io.compress.SnappyCodec;
最终输出结果压缩
hive.exec.compress.output和mapred.output.compression.codec是hive-site.xml中的配置参数,
而mapred.output.compress 和mapred.output.compression.codec 是hdfs-site.xml的配置参数。
都可以配置实现。
Hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)