一、压缩分类
1、Lossless conpression(无损压缩)
压缩和解压缩过程中没有任何数据的丢失
2、Lossy conpression(有损压缩)
JPEG,MP3,MPEG 压缩和解压缩过程中有任何数据的丢失
二、压缩场景
输入
中间
输出
三、压缩注意事项
CPU是否够用,压缩加压缩都耗费资源
四、压缩格式
Compression format | Tool | File extention |
---|---|---|
gzip | gzip | .gz |
bzip2 | bzip2 | .bz2 |
LZO | lzop | .lzo |
Snappy | N/A | .snappy |
五、压缩比
原始文件大小1.4G
Snappy的压缩比:50%
LZ4的压缩比:49%
LZO的压缩比:48%
GZIP的压缩比:32%
BZIP2的压缩比:28%
六、总结
1、压缩比越高压缩时间就越长,不同压缩场景需要选用不同的压缩。
2、选用压缩就是空间与时间的选择
3、如果是老数据/冷数据就采用BZIP2压缩,如果老数据偶尔还会用的到还需考虑是否分片
4、
七、Hadoop配置Mapreduce的压缩
core-site.xml
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
上面配置的是Bzip2的压缩,进入
$HADOOP_HOME/share/hadoop/mapreduce
j进行wordcount的测试
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /data/wc.txt /data/wc_bzip
查看结果文件是带有bz2后缀的
[root@hadoop001 data]# hadoop fs -ls /data/wc_bzip
Found 2 items
-rw-r--r-- 1 root supergroup 0 2017-12-27 11:28 /data/wc_bzip/_SUCCESS
-rw-r--r-- 1 root supergroup 74 2017-12-27 11:28 /data/wc_bzip/part-r-00000.bz2
[root@hadoop001 data]# hadoop fs -text /data/wc_bzip/part-r-00000.bz2
17/12/27 11:29:45 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
17/12/27 11:29:45 INFO compress.CodecPool: Got brand-new decompressor [.bz2]
Hello 3
Hive 1
Spark 3
World 1
hive 1
八、Hive的压缩测试
1、创建表
create table page_views(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
2、加载数据
load data local inpath '/opt/data/page_views.dat' overwrite into table page_views;
查看原表的大小
hadoop fs -du -h /user/hive/warehouse/page_views
18.1 M 18.1 M /user/hive/warehouse/page_views/page_views.dat
3、
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
新建表
create table page_views_bzip2
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
AS SELECT * FROM page_views;
查看新表的大小
hadoop fs -du -h /user/hive/warehouse/page_views_bzip2
3.6 M 3.6 M /user/hive/warehouse/page_views_bzip2/000000_0.bz2
4、
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec
新建表
create table page_views_gzip
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
AS SELECT * FROM page_views;
查看大小
hadoop fs -du -h /user/hive/warehouse/page_views_gzip
5.3 M 5.3 M /user/hive/warehouse/page_views_gzip/000000_0.gz
5、
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
新建表
create table page_views_snappy
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
AS SELECT * FROM page_views;
查看大小
hadoop fs -du -h /user/hive/warehouse/page_views_snappy
8.4 M 8.4 M /user/hive/warehouse/page_views_snappy/000000_0.snappy
以上为临时生效压缩,真正使用需要将具体使用哪种压缩配置到Hive配置文件
网友评论