Hadoop中的文件压缩和压缩算法配置详解(转载)

在MapReduce的Shuffle阶段,可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多,那么如何配置hadoop的文件压缩呢,以及hadoop当中的文件压缩支持哪些压缩算法呢?

1、hadoop当中支持的压缩算法

文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输

前面我们的hadoop的版本经过我们重新编译之后,我们可以看到我们的hadoop已经支持所有的压缩格式了,剩下的问题就是我们该如何选择使用这些压缩格式来对我们的MapReduce程序进行压缩。

我们可以使用 bin/hadoop checknative 来查看我们编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包:

bin/hadoop checknative
yum install openssl-devel
[hadoop@node01 hadoop-2.6.0-cdh5.14.2]$ bin/hadoop checknative
20/08/11 17:11:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
20/08/11 17:11:36 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:

hadoop: true /xsluo/install/hadoop-2.6.0-cdh5.14.2/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /lib64/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
hadoop支持的压缩算法

压缩格式 工具 算法 文件扩展名 是否可切分
DEFLATE 无 DEFLATE .deflate 否
Gzip gzip DEFLATE .gz 否
bzip2 bzip2 bzip2 bz2 是
LZO lzop LZO .lzo 否
LZ4 无 LZ4 .lz4 否
Snappy 无 Snappy .snappy 否
各种压缩算法对应使用的java类

压缩格式 对应使用的java类
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
常见的压缩速率比较

压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 135 MB/s 410 MB/s
snappy 8.3GB 1.8GB 172MB/s 409MB/s
在生产环境中常用的压缩算法主要有LZO和snappy等

2、如何开启我们的压缩?

方式一:在代码中进行设置压缩

//设置我们的map阶段的压缩

Configuration configuration = new Configuration();
configuration.set(“mapreduce.map.output.compress”,“true”);
configuration.set(“mapreduce.map.output.compress.codec”,“org.apache.hadoop.io.compress.SnappyCodec”);

//设置我们的reduce阶段的压缩

configuration.set(“mapreduce.output.fileoutputformat.compress”,“true”);
configuration.set(“mapreduce.output.fileoutputformat.compress.type”,“RECORD”);
configuration.set(“mapreduce.output.fileoutputformat.compress.codec”,“org.apache.hadoop.io.compress.SnappyCodec”);
方式二:修改mapred-site.xml进行MapReduce压缩

我们可以修改mapred-site.xml配置文件,然后重启集群,以便对所有的mapreduce任务进行压缩

map输出数据进行压缩:

mapreduce.map.output.compress true mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.SnappyCodec reduce输出数据进行压缩: mapreduce.output.fileoutputformat.compress true mapreduce.output.fileoutputformat.compress.type RECORD mapreduce.output.fileoutputformat.compress.codec org.apache.hadoop.io.compress.SnappyCodec

3、使用hadoop的snappy压缩来对我们的数据进行压缩

这里我们通过修改代码的方式来实现数据的压缩:

//map阶段输出压缩配置
Configuration configuration = new Configuration();
configuration.set(“mapreduce.map.output.compress”,“true”);
configuration.set(“mapreduce.map.output.compress.codec”,“org.apache.hadoop.io.compress.SnappyCodec”);

//reduce阶段输出压缩配置
configuration.set(“mapreduce.output.fileoutputformat.compress”,“true”);
configuration.set(“mapreduce.output.fileoutputformat.compress.type”,“RECORD”);
configuration.set(“mapreduce.output.fileoutputformat.compress.codec”,“org.apache.hadoop.io.compress.SnappyCodec”);
重新打包测试mr程序,

会发现我们的MR运行之后的输出文件都变成了以.snappy的压缩文件。

原文链接:https://blog.csdn.net/weixin_43230682/article/details/107917445?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-3.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-3.nonecase&request_id=5f3387bc2405af26f814ed3e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值