hive> SET hive.exec.compress.output;
hive.exec.compress.output=false
hive>
查看hive当前的codec,默认是bzip2
hive> SET mapreduce.output.fileoutputformat.compress.codec;
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec
hive>
设置一下压缩格式为bzip2,codec也为bzip2,并且创建一张表
hive> SET hive.exec.compress.output=true;
hive> SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
hive> create table test1_bzip2
> row format delimited fields terminated by '||'
> as select * from test1;
1. 常用缩格式
压缩格式需要关注两个因素:
压缩比(Compression Ratio): Snappy < LZ4 < LZO < GZIP < BZIP2
其中,BZIP2的压缩比大概是30%,Snappy/LZ4/LZO的压缩比大概是50%.
解压速度(Compression Speed): Snappy > LZ4 > LZO > GZIP > BZIP2 很明显,压缩速度这张图和上面的图是反过来的,压缩比越大,压缩/解压缩的速度越慢。
使用压缩带来的好处是:减少磁盘空间,减少磁盘的I/O,加速网络传输;同时,压缩带来的CPU消耗是比较高的。而且,压缩速度和压缩比是成反比的,生产中具体压缩方式的选择,是要根据实际的需要来选择(如果是历史数据,选择压缩比大的;如果要求执行速度快的,选择压缩比小的)。
2. 压缩在Hadoop中的应用
Hadoop的jobs都是I/O密集型的,压缩可以加速IO操作;压缩可以减少数据在网络传输时的size,提升性能。压缩格式要支持切割(分片)。
2.1 支持分割(分片)的压缩格式
在上面的压缩格式中,只有bzip2和LZO是支持分割的,且LZO是有条件的(被索引:com.hadoop.compression.lzo.LzoIndexer去创建一个index)分割。
概念理解:
查看机器上的hadoop支持哪些压缩格式(只有编译后的hadoop的才能支持各种压缩方式)
2.2 常用的Codec
2.3 压缩在MapReduce中的应用
MapReduce的三个阶段都可以压缩,map读进来的时候可以压缩,读进来之后解压;reduce读的时候要解压,reduce写出去的时候要压缩。
结论:
2.4 压缩实战
2.4.1 hadoop的压缩
2.4.1.1 修改hadoop配置文件
配置core-site.xml(①)
配置mapred-site.xml(③)
中间一步(②),打开hadoop官网,查看mapred-default.xml配置文件。 修改完配置文件之后要重启hdfs和yarn服务。
2.4.1.2 跑一个MapReduce作业测试
查看结果,输出结果的压缩格式为.bz2,与配置文件一致
2.4.1 hive的压缩
2.4.1.1 在hive创建一张不压缩的表,把数据导进去
此时hdfs上查看一下文件的大小
2.4.1.2 在hive创建一张bzip2的表,把数据导进去(查看hive怎么压缩,打开hive官网,点击compression)
查看hive当前的压缩格式,默认是不压缩的
查看hive当前的codec,默认是bzip2
设置一下压缩格式为bzip2,codec也为bzip2,并且创建一张表
去hdfs上查看文件的大小,文件大小由最初的37.4M变成了450.0K(这里bzip2的压缩比应该是30%左右,因为我的数据本身有很多重复,所以压缩后体积缩小非常大),hdfs上存储的格式也变成了.bz2
特别注意:为了不影响其他用户,通常使用压缩格式的时候不要设置为全局设置,使用完了以后要马上改回来!!