hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

本文详细探讨了Hadoop和Hive中的数据压缩技术,包括hive表的存储格式(如TEXTFILE、SEQUENCEFILE、ORC等)、Hadoop支持的压缩格式(如DEFLATE、Gzip、BZip2、Snappy、LZO等)以及Hive的压缩设置。重点对比了LZO、GZ和ORC在Hadoop上的存储方案,并讨论了它们的优缺点和使用场景。建议对I/O密集型任务使用数据压缩,尤其是Snappy压缩,以降低磁盘和网络I/O开销。
摘要由CSDN通过智能技术生成

   数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能。

     而hive中间结果是map输出传给reduce,所以应该使用低cpu开销和高压缩效率,一般最好使用snappy。

------------------------------------------------------------------------------

hive表的存储格式有(参见http://blog.csdn.net/longshenlmj/article/details/51702343)

    TEXTFILE
    SEQUENCEFILE(三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩)

    RCFILE

    ORC

    自定义格式

 

            hive表存储格式是表自身的存储结构,内部涉及存储数据的结构,查询方法,索引构建等等。支持的数据都是hadoop默认支持的。如txt格式文件,或压缩格式zip、lzo、br2等等。hive外部表只能直接加载这些格式的数据。

 

源数据在云上(hdfs)压缩存储

    Hadoop默认支持Gzip和BZip2的解压缩方式,可直接读取(hadoop fs -text命令),但hive只能用TEXTFILE格式的表加载,然后再insertoverwrite 到其他格式的表(比如SEQUENCEFILE表),如果hive其他格式的表想要直接加载压缩格式数据,需要重写INPUTFORMAT和OUTPUTFORMAT文件类

 

压缩格式文件的切分(不支持则hadoop不能并行的进行map操作)

    BZip2和LZO(提供block级的压缩)支持文件切分
    Gzip和Snappy则不支持。 


hadoop中支持的压缩格式

    DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
    gzip org.apache.hadoop.io.compress.GzipCodec
    bzip org.apache.hadoop.io.compress.BZip2Codec
    Snappy org.apache.hadoop.io.compress.SnappyCodec
    LZO:
        org.apache.hadoop.io.compress.LzopCodec或者com.hadoop.compression.lzo.LzopCodec;
        org.apache.hadoop.io.compress.LzoCodec或者com.hadoop.compression.lzo.LzoCodec;


注意:(引自http://ju.outofmemory.cn/entry/63512)
    (1)org.apache.hadoop.io.compress.LzoCodec和com.hadoop.compression.lzo.LzoCodec功能一样,都是源码包中带的,返回都是lzo_deflate文件
    (2)有两种压缩编码可用,即LzoCodec和LzopCodec,区别是:
        1)LzoCodec比LzopCodec更快, LzopCodec为了兼容LZOP程序添加了如 bytes signature, header等信息
        2)LzoCodec作为Reduce输出,结果文件扩展名为”.lzo_deflate”,无法被lzop读取;
        而使用LzopCodec作为Reduce输出,生成扩展名为”.lzo”的文件,可被lzop读取
        3)LzoCodec结果(.lzo_deflate文件)不能由lzo index job的"DistributedLzoIndexer"创建index;且“.lzo_deflate”文件不能作为MapReduce输入(不识别,除非自编inputformat)。而所有这些“.LZO”文件都支持
    综上所述,应该map输出的中间结果使用LzoCodec,reduce输出用 LzopCodec
    
===============================================================================

hive压缩的编解码器(压缩格式)

    执行set io.compression.codecs 可以查看目前hive已加载的所以编解码器(逗号分隔)

    也就是说,参数io.compression.codecs是hadoop的MR读写支持的所有格式支持,如果设置,就必须设置所有支持格式。默认支持,没有必要的话,最好别加。设置多个语法为:

        setio.compression.codecs&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值