hive 压缩编码,
文章目录
- 1. hadoop 压缩编码
- 1.1 MR支持的压缩编码
- 2、编码/解码器
- 3、压缩性能的比较
- 4、压缩配置参数
- 2. hive压缩编码
- 2.1 如何查看hive支持的压缩
- 2.1 hive编码的选择
- 2.2 配置
1. hadoop 压缩编码
1.1 MR支持的压缩编码
| 压缩格式 | 工具 | 算法 | 文件扩展名 | 是否可切分 |
|---|---|---|---|---|
| DEFAULT | 无 | DEFAULT | .deflate | 否 |
| Gzip | gzip | DEFAULT | .gz | 否 |
| bzip2 | bzip2 | bzip2 | .bz2 | 是 |
| LZO | lzop | LZO | .lzo | 否 |
| LZ4 | 无 | LZ4 | .lz4 | 否 |
| Snappy | 无 | Snappy | .snappy | 否 |
2、编码/解码器
为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示
| 压缩格式 | 对应的编码/解码器 |
|---|---|
| DEFLATE | org.apache.hadoop.io.compress.DefaultCodec |
| gzip | org.apache.hadoop.io.compress.GzipCodec |
| bzip2 | org.apache.hadoop.io.compress.BZip2Codec |
| LZO | com.hadoop.compression.lzo.LzopCodec |
| LZ4 | org.apache.hadoop.io.compress.Lz4Codec |
| Snappy | org.apache.hadoop.io.compress.SnappyCodec |
3、压缩性能的比较
| 压缩算法 | 原始文件大小 | 压缩文件大小 | 压缩速度 | 解压速度 |
|---|---|---|---|---|
| gzip | 8.3GB | 1.8GB | 17.5MB/s | 58MB/s |
| bzip2 | 8.3GB | 1.1GB | 2.4MB/s | 9.5MB/s |
| LZO | 8.3GB | 2.9GB | 49.3MB/s | 74.6MB/s |
http://google.github.io/snappy/
在64位模式的Core i7处理器的单核上,Snappy压缩大约250 MB /秒或更高,并以大约500 MB /秒或更高的速度进行解压缩。
4、压缩配置参数
要在Hadoop中启用压缩,可以配置如下参数(mapred-site.xml文件中)
| 参数 | 默认值 | 阶段 | 建议 |
|---|---|---|---|
| io.compression.codecs(在core-site.xml中配置) | org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.Lz4Codec | 输入压缩 | Hadoop使用文件扩展名判断是否支持某种编解码器 |
| mapreduce.map.output.compress | false | mapper输出 | 这个参数设为true启用压缩 |
| mapreduce.map.output.compress.codec | org.apache.hadoop.io.compress.DefaultCodec | mapper输出 | 使用LZO、LZ4或snappy编解码器在此阶段压缩数据 |
| mapreduce.output.fileoutputformat.compress | false | reducer输出 | 这个参数设为true启用压缩 |
| mapreduce.output.fileoutputformat.compress.codec | org.apache.hadoop.io.compress. DefaultCodec | reducer输出 | 使用标准工具或者编解码器,如gzip和bzip2 |
| mapreduce.output.fileoutputformat.compress.type | RECORD | reducer输出 | SequenceFile输出使用的压缩类型:NONE和BLOCK |
2. hive压缩编码
2.1 如何查看hive支持的压缩
查看集群的支持的压缩算法.
lcc@lcc ~$ hive -e "set io.compression.codecs"
返回支持的压缩算法
io.compression.codecs=org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.DeflateCodec,
org.apache.hadoop.io.compress.SnappyCodec,
org.apache.hadoop.io.compress.Lz4Codec
我的返回这个,应该返回空
| 序号 | 压缩格式 | 算法 | 多文件 | 可分割性 | 工具 | 工具压缩后扩展名 |
|---|---|---|---|---|---|---|
| 1 | DEFLATE | DEFLATE | 不 | 不 | 无 | .deflate |
| 2 | Gzip | DEFLATE | 不 | 不 | gzip | .gz |
| 3 | bzip2 | bzip2 | 不 | 是 | bzip2 | .bz2 |
| 4 | LZO | LZO | 不 | 不 | lzop | .lzo |
| 5 | LZ4 | ??? | ?? | ?? | ??? | ??? |
| 6 | Snappy | ??? | ?? | ?? | ??? | ??? |
| 7 | ZLIB | ??? | ?? | ?? | ??? | ??? |
| 8 | ZIP | DEFLATE | 是 | 是,在文件范围内 | zip | .zip |
2.1 hive编码的选择
选择合适的编解码器
对数据做压缩,可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,但对数据做压缩和解压缩总会增加CPU的开销,故最好对那些I/O密集型的作业使用数据压缩——这样的作业会有富余的CPU资源,或者对那些磁盘空间不富裕的系统。
2.2 配置
打开Hive(即由mappe产生的)中间数据文件的压缩功能
HiveQL语句最终会被编译成Hadoop的Mapreduce job,开启Hive的中间数据压缩功能,就是在MapReduce的shuffle阶段对mapper产生的中间结果数据压缩。在这个阶段,优先选择一个低CPU开销的算法。
可以通过参数hive.exec.compress.intermediate来开启和禁用该功能,默认情况下该值值为false,将之设置为true为激活中间数据压缩功能:
<property>
<name>hive.exec.compress.intermediate</name>
<value>true</value>
<description>This controls whether intermediate files produced by Hive between mutiple map-redece job are compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description>
</property>
具体的压缩算法参数配置,这是一个hadoop的配置参数,可以在Hadoop的$HADOOP_HOME/conf/marred-site.xml或$HADOOP_HOME/conf/hive-site.xml配置文件中。SnappyCodec比较适合在这种场景中编解码器,该算法会带来很好的压缩性能和较低的CPU开销:
<property>
<name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
<description>This controls whether intermediate files produced by Hive between mutiple map-redece job are compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description>
</property>
最Hive的数据文件压缩
用户可以对最终生成的Hive表的数据通常也需要压缩。参数hive.exec.compress.output控制这一功能的激活与禁用。用户可以通过节本来打开这个功能,同样也可以在XML配置文件中将该功能配置成全局变量:
<property>
<name>hive.exec.compress.output</name>
<value>true</value>
<description>This controls whether the final outpus of a query( to a local/hdfs file or a Hive table) is compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description>
</property>
将hive.exec.compress.output参数设置成true后,然后选择一个合适的编解码器,如选择SnappyCodec:
<property>
<name>mapred.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
好文章:
https://blog.csdn.net/Wflowerd/article/details/80376036