• spark写出常见压缩格式设置


    1. Hadoop之常见压缩格式以及性能对比

    1.压缩的好处和坏处

    好处

    • 减少存储磁盘空间
    • 降低IO(网络的IO和磁盘的IO)
    • 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度

    坏处

    • 由于使用数据时,需要先将数据解压,加重CPU负荷。而且压缩的越狠,耗费的时间越多。

    2.压缩格式

    压缩格式 工具 算法 扩展名 是否支持分割 Hadoop编码/解码器 hadoop自带
    DEFLATE N/A DEFLATE .deflate No org.apache.hadoop.io.compress.DefalutCodec
    gzip gzip DEFLATE .gz No org.apache.hadoop.io.compress.GzipCodec
    bzip2 bzip2 bzip2 .bz2 yes org.apache.hadoop.io.compress.Bzip2Codec
    LZO Lzop LZO .lzo yes(建索引) com.hadoop.compression.lzo.LzoCodec
    LZ4 N/A LZ4 .lz4 No org.apache.hadoop.io.compress.Lz4Codec
    Snappy N/A Snappy .snappy No org.apache.hadoop.io.compress.SnappyCodec

    压缩比:Snappy<LZ4<LZO<GZIP<BZIP2

    3.优缺点
    a. gzip

    优点:压缩比在四种压缩方式中较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便
    缺点:不支持split
    b. lzo

    优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;需要在linux系统下自行安装lzop命令,使用方便
    缺点:压缩率比gzip要低;hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定inputformat为lzo格式)
    c. snappy

    优点:压缩速度快;支持hadoop native库
    缺点:不支持split;压缩比低;hadoop本身不支持,需要安装;linux系统下没有对应的命令
    d. bzip2

    优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便
    缺点:压缩/解压速度慢;不支持native

    4.spark输出压缩文件

    1)RDD输出压缩文件

    import org.apache.hadoop.io.compress.BZip2Codec
    // bzip2 压缩率最高,压缩解压速度较慢,支持split。
    rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])
    
    
    import org.apache.hadoop.io.compress.SnappyCodec
    //snappy json文本压缩率 38.2%,压缩和解压缩时间短。
    rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])
    
    import org.apache.hadoop.io.compress.GzipCodec
    //gzip 压缩率高,压缩和解压速度较快,不支持split,如果不对文件大小进行控制,下次分析可能可能会造成效率低下的问题。
    rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])

    2)spark sql 输出压缩文件

    parquet文件压缩

    parquet为文件提供了列式存储,查询时只会取出需要的字段和分区,对IO性能的提升非常大,同时占用空间较小,即使是parquet的uncompressed存储方式也比普通的文本要小的多。

    sparkConf.set("spark.sql.parquet.compression.codec","gzip")
    dataset.write().parquet("path");

    parquet存储提供了: lzo gzip snappy uncompressed 四种方式

    3) spark sql 的csv文件压缩设置

    df.write.mode(SaveMode.Overwrite).option("compression", "gzip").csv(s"${path}")
  • 相关阅读:
    使用Mysql慢查询日志对有效率问题的SQL进行监控
    wampserver3.1.0安装及配置
    Composer
    HTML5 本地存储(Web Storage)
    HTML5 元素拖动
    生成验证码
    git 基础命令
    POI使用流程
    JDK各版本新特性总结
    dubbo+zookeeper项目搭建
  • 原文地址:https://www.cnblogs.com/yyy-blog/p/12747133.html
Copyright © 2020-2023  润新知