MapReduce使用压缩以及在MR中的通用做法

上一步中我们在Hadoop中安装了lzo的压缩方式,现在将测试如何在MapReduce程序中使用压缩

  1. 在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
  2. 我们随意找个表,查看表结构(这里只拿出来了我们想看的)

    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了。

  3. 一般不固定写在配置文件中,而是提交作业的时候手动指定,通过-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
  4. 给.lzo文件创建索引

    hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer /data/lzo-index/large_wc.txt.lzo
Author: Tunan
Link: http://yerias.github.io/2018/10/15/hadoop/14/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.