【Hive笔记】8.1——压缩和存储

前言

hadoop是支持好几种格式的数据压缩,不同的压缩格式具有不同的压缩比和解压比。

MR支持的压缩编码
压缩格式工具算法文件扩展名是否可切分
DEFAULTDEFAULT.default
GzipgzipDEFAULT.gz
bzip2bzip2bzip2.bz2
LZOlzopLZO.lzo
SnappySnappy.snappy

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器。如下表所示:

压缩格式对应的编码/解码器
DEFAULTorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

压缩性能比较:

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3G1.8G17.5MB/s58MB/s
bzip28.3G1.1G2.4Mb/9.5Mb/s
LZO8.3G2.9G49.3Mb/s74.6Mb/s

On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

Hadoop压缩参数配置

要在Hadoop中启用压缩,可以配置如下参数。在MR的map输入,map输出,reduce输入,reduce输出都是可以添加压缩的。只是在map输入,reduce输入,会根据压缩文件后缀自己识别到压缩格式。

参数默认值阶段建议
io.compression.codecs (在core-site.xml中配置)org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.Lz4Codec输入压缩Hadoop使用文件扩展名判断是否支持某种编解码器
mapreduce.map.output.compressfalsemapper输出这个参数设为true启用压缩
mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.DefaultCodec等mapper输出使用LZO、LZ4或snappy编解码器在此阶段压缩数据
mapreduce.output.fileoutputformat.compressfalsereducer输出这个参数设为true启用压缩
mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.DefaultCodec等reducer输出使用标准工具或者编解码器,如gzip和bzip2
mapreduce.output.fileoutputformat.compress.typeRECORDreducer输出SequenceFile输出使用的压缩类型:NONE和BLOCK
开启Map输出阶段压缩

开启map输出阶段压缩可以减少job中map和reduce task间数据传输量。具体配置如下:

  1. 开启Hive中间传输数据压缩功能
    hive (default)>set hive.exec.compress.intermediate=true;
  2. 开启mapredue中map输出压缩功能
    hive (default)>set mapreduce.map.output.compress=true;
  3. 设置mapreduce中map输出数据的压缩方式
    hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
开启Reduce输出阶段压缩

当Hive将输出写入到表中时,输出内容同样可以进行压缩。属性hive.exec.compress.output控制着这个功能。用户可能需要保持默认设置文件中的默认值false,这样默认的输出就是非压缩的纯文本文件了。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能。

开启Hadoop支持Snappy

先检查一下hadoop环境:
hadoop checknative
在这里插入图片描述
如果你的hadoop是false 请自行去http://dl.bintray.com/sequenceiq/sequenceiq-bin/ 下载对应版本
然后执行

tar -xvf hadoop-native-64-2.6.0.tar -C $HADOOP_HOME/lib/
tar -xvf hadoop-native-64-2.6.0.tar -C $HADOOP_HOME/lib/native

之后就会出现上图结果。

在安装snappy即可:
安装snappy太麻烦了。。。。还需要重新编译,这里我就不安装了。。。
成功的会在上图中的snappy显示true

最后是一个示例:

  1. 开启hive最终输出数据压缩功能
    hive (default)>set hive.exec.compress.output=true;
  2. 开启mapreduce最终输出数据压缩
    hive (default)>set mapreduce.output.fileoutputformat.compress=true;
  3. 设置maoreduce最终数据输出压缩方式
    hive (default)> set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
  4. 设置mapreduce最终数据输出压缩为块压缩
    hive (default)> set mapreduce.output.fileoutputformat.compress.type=BLOCK;

然后查询结果就不写了。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值