hadoop MapReduce的输出压缩算法的设置(四种方法)

MapReduce的过程中,一个job结束之后,会输出处理完毕的数据集,也就是reduce的处理结果。我们可以将这些结果采用指定的压缩算法输出到指定的文件夹中。

map端数据的压缩:要求是reduce从map端进行数据拉取的时候,传输速度要快,此时适合选择snappy数据压缩算法。

reduce端数据压缩:reduce端数据最终输出到HDFS上进行数据存储,要求是数据的占用空间要小,所以,可以选择gzip进行数据压缩。

常用的四种方法:

方法一:通过配置参数进行传值

原理:这些配置会被加载到conf对象中,供job的mapreduc任务使用。

缺点:对于大长串的参数不建议放在这里,会导致参数传递混乱,建议放在xml中进行配置。

优点:-D传参不用改变源码,这点是十分重要的,要知道,我们的项目都会被打成jar包部署在服务器集群上,不用修改源码即可传参,十分灵活。

在Idea中,在edit Configurations中配置,其实就是通过将参数传给main函数进行设置压缩格式。

格式:-Dname=value

示例:

上图中Program arguments的参数如下(后面两个参数是输入输出路径):

-Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.ip.compress.GzipCodec /tmp/mr/input /tmp/mr/output

方法二:

在Tool接口的run方法中,设置输出格式,添加以下两行代码:

        FileOutputFormat.setCompressOutput(job,true);
        FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

方法三:

在Tool接口的run方法中,利用Configuration对象进行设置,如下:

        conf.set(FileOutputFormat.COMPRESS,"true");
        conf.set(FileOutputFormat.COMPRESS_CODEC,GzipCodec.class.getName());

等价于:

conf.set("mapreduce.output.fileoutputformat.compress","true");
conf.set("mapreduce.output.fileoutputformat.compress.codec",GzipCodec.class.getName());

方法四:通用配置,采用xml

在java的resouces文件中,添加mapred-site.xml文件,文件结构如图:

        

文件的内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
		<name>mapreduce.map.output.compress</name>
		<value>true</value>
		<description>map是否启用压缩</description>
	</property>
	<property>
		<name>mapreduce.map.output.compress.codec</name>
		<value>org.apache.hadoop.io.compress.SnappyCodec</value>
		<description>map采用何种压缩算法</description>
	</property>

	<property>
		<name>mapreduce.output.fileoutputformat.compress</name>
		<value>true</value>
		<description>reduce是否启用压缩</description>
	</property>
	<property>
		<name>mapreduce.output.fileoutputformat.compress.codec</name>
		<value>org.apache.hadoop.io.compress.GzipCodec</value>
		<description>reduce采用何种压缩算法</description>
	</property>

</configuration>

 

总结:

1 加载顺序(从源码可以看出来):首先加载xml配置文件,再加载-D参数,如果遇到和xml相同的参数,那么重写参数。

最后加载的是conf.set,conf.set遇到-D参数相同的设置,则重写。源码如下:

2 优缺点:

-D参数配置:灵活,但是不适合大长串的参数

conf.set()的方式:可以进行单个job任务的mr配置

XML的配置:公司的集群配置有权限设置。同时,所有集群的hadoop项目都会加载这个配置文件。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值