zoukankan      html  css  js  c++  java
  • Shuffle阶段数据的压缩机制

    shuffle阶段,大量的数据从map阶段输出,发送到reduce阶段,这一过程中,可能会涉及到大量的网络IO

    输出数据较大时,使用hadoop提供的压缩机制对数据进行压缩,可以指定压缩的方式减少网络传输带宽和存储的消耗

    可以对map的输出进行压缩map输出到reduce输入的过程,可以shuffle过程中网络传输的数据量)

    可以对reduce的输出结果进行压缩(最终保存到hdfs上的数据,主要是减少占用HDFS存储)

    1.1. hadoop当中支持的压缩算法

    使用hadoop checknative来查看hadoop支持的各种压缩算法,如果出现opensslfalse,那么就在线安装一下依赖包。

     

    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

     

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

    设置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");

     

    方式二:配置全局的MapReduce压缩

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

    map输出数据进行压缩

    <property>

    <name>mapreduce.map.output.compress</name>

    <value>true</value>

    </property>

    <property>

    <name>mapreduce.map.output.compress.codec</name>

    <value>org.apache.hadoop.io.compress.SnappyCodec</value>

    </property>

    reduce输出数据进行压缩

    <property><name>mapreduce.output.fileoutputformat.compress</name>

           <value>true</value>

    </property>

    <property><name>mapreduce.output.fileoutputformat.compress.type</name>

    <value>RECORD</value>

    </property>

     <property><name>mapreduce.output.fileoutputformat.compress.codec</name>

    <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>

    所有节点都要修改mapred-site.xml,修改完成之后记得重启集群

     

     



  • 相关阅读:
    修改python默认版本
    Ansible基础
    day21
    paramiko上传文件到Linux
    参考书籍
    C++解析三
    块设备
    assert用法
    块设备驱动2
    块设备驱动1
  • 原文地址:https://www.cnblogs.com/TiePiHeTao/p/f097cc586147923ea16dce673c2e5b74.html
Copyright © 2011-2022 走看看