大数据技术架构(组件)19——Hive:FileFormats(2)

1.5.2、Compression

通过set hive.exec.compress.output命令来查看当前系统环境支持的压缩类型。

org.apache.hadoop.io.compress.GzipCodec,

org.apache.hadoop.io.compress.DefaultCodec,

com.hadoop.compression.lzo.LzoCodec,

com.hadoop.compression.lzo.LzopCodec,

org.apache.hadoop.io.compress.BZip2Codec,

org.apache.hadoop.io.compress.SnappyCodec

各种压缩类型对比

1.5.2.1、ORC With Zlib/Snappy

表描述配置信息:

orc.compress:压缩类型

orc.compress.size:压缩大小

orc.stripe.size:每个strips的大小

orc.row.index.stride:索引之间的行数,必须得大于1000

orc.create.index:是否创建行索引

orc.bloom.filter.columns:创建字段对应的布隆过滤器,字段之间以逗号分隔。

orc.bloom.filter.fpp:布隆过滤器的误报概率

创建表的时候指定:

TBLPROPERTIES ("orc.compress"="ZLIB")

TBLPROPERTIES("orc.compress"="SNAPPY")

TBLPROPERTIES ("orc.compress"="NONE")

1.5.2.2、SequenceFile With Gzip/Bzip2

在一些场景下,可能会先生成压缩文件,然后再导入到Hive中。那么针对中这种已经压缩好的数据,Hive支持一些压缩格式,在读取的时候会自动进行解压缩。比如Gzip或者Bzip2,当然对于一些不可切分的压缩格式,在生成MR任务的时候,Map数就会有所限制,不能很好的发挥算力。

--示例
CREATE TABLE raw (line STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;

最佳实践:

针对上面提到的问题,可以先把源文件加载到一张临时表中,然后写入到支持可切分的文件存储Hive表中,如SequenceFile。

--临时表,用于存储原始压缩文件
CREATE TABLE raw (line STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY 'n';

--目标表,该存储文件是可切分的。
CREATE TABLE raw sequence (line STRING)
    STORED AS SEQUENCEFILE;

--加载数据
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.loggz' INTO TABLE raw;

--设置参数
SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK; 

--压缩方式 NONE/RECORD/BLOCK (see below)
INSERT OVERWRITE TABLE raw sequence SELECT * FROM raw;

1.5.2.3、LZO

配置:

编辑core-site.xml文件

<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value>
</property>
<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.1zo.LzoCodec</value>
</property>

创建

CREATE EXTERNAL TABLE IF NOT EXISTS hive table name (column_1 datatype_1......column_N datatype_N)
PARTITIONED BY (partition_col_1 datatype 1 )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"

查询LZO存储表

SET hive exec.compress.output=true
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec
SET mapreduce.output.fileoutputformat.compress=true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylife512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值