上一步中我们在Hadoop中安装了lzo的压缩方式,现在将测试如何在MapReduce程序中使用压缩
在MapReduce中使用压缩,要注意三个位置,分别是map输入文件的压缩格式,map输出的压缩格式,和reduce最终输出的压缩格式
首先配置使用压缩
mapreduce.output.fileoutputformat.compress=true
第二步配置输入文件的压缩格式(如lzo):
mapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat
第三步配置map输出的文件压缩格式(如snappy):
mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
第四步配置reduce输出的文件压缩格式(可不配置,这里配置lzo):
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec
我们随意找个表,查看表结构(这里只拿出来了我们想看的)
desc formatted emp;
# Storage Information
SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat由于hive底层也是跑的MapReduce,现在我们就能知道为什么要设置InputFormat和OutputFormat了。
一般不固定写在配置文件中,而是提交作业的时候手动指定,通过-D 指定参数
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar wordcount \
-D mapreduce.output.fileoutputformat.compress=true \
-D io.compression.codec.lzo.class=com.hadoop.compression.lzo.LzoCodec \
-D mapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat \
-D mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec \
/data/lzo-index/ /out给.lzo文件创建索引
hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer /data/lzo-index/large_wc.txt.lzo