Hadoop压缩技术与Hive文件格式详解

目录

文件格式和压缩

 Hadoop压缩概述

压缩格式

 Hive文件格式

 Text File

 ORC

1)文件格式

2)结构

3)建表语句

 Parquet

1)文件格式

2)结构

3)建表语句

 压缩

 Hive表数据进行压缩

1)TextFile

2)ORC

3)Parquet

 计算过程中使用压缩

1)单个MR的中间结果进行压缩

2)单条SQL语句的中间结果进行压缩


文件格式和压缩

 Hadoop压缩概述

压缩格式

压缩格式算法文件扩展名是否可切分
DEFLATEDEFLATE.deflate
GzipDEFLATE.gz
bzip2bzip2.bz2
LZOLZO.lzo
SnappySnappy.snappy

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器:

压缩格式对应的编码/解码器
DEFLATEorg.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.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

Snappy压缩性能:

  • 在Core i7处理器单核64位模式下,Snappy压缩速度约为250 MB/s,解压缩速度约为500 MB/s或更高。

参考链接: [snappy | A fast compressor/decompressorA fast compressor/decompressoricon-default.png?t=O83Ahttp://google.github.io/snappy/]

 Hive文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能至关重要。Hive表数据的存储格式包括text file、orc、parquet、sequence file等。

 Text File

文本文件是Hive默认使用的文件格式。

创建文本文件格式的表语句如下:

CREATE TABLE textfile_table
(
  column_specs
)
STORED AS TEXTFILE;

 ORC

1)文件格式

ORC(Optimized Row Columnar)是一种列式存储的文件格式,能够提高Hive读写数据和处理数据的性能。

与列式存储相对的是行式存储,下图是两者的对比:

 

如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。

 

2)结构

每个Orc文件由Header、Body和Tail三部分组成。每个stripe由Index Data、Row Data和Stripe Footer组成。Tail由File Footer和PostScript组成。

3)建表语句
CREATE TABLE orc_table
(
  column_specs
)
STORED AS ORC
TBLPROPERTIES (property_name=property_value, ...);

ORC文件格式支持的参数如下:

参数默认值说明
orc.compressZLIB压缩格式
orc.compress.size262,144每个压缩块的大小
orc.stripe.size67,108,864每个stripe的大小
orc.row.index.stride10,000索引步长

 Parquet

Parquet是一个通用的列式存储文件格式。

1)文件格式

Parquet文件的基本结构由若干个Row Group和一个Footer(File Meta Data)组成。

2)结构

每个Row Group包含多个Column Chunk,每个Column Chunk包含多个Page。

3)建表语句
CREATE TABLE parquet_table
(
  column_specs
)
STORED AS PARQUET
TBLPROPERTIES (property_name=property_value, ...);

Parquet文件格式支持的参数如下:

参数默认值说明
parquet.compressionuncompressed压缩格式
parquet.block.size134217728行组大小
parquet.page.size1048576页大小

 压缩

 Hive表数据进行压缩

1)TextFile

对于TextFile类型的表,可以通过设置以下参数确保输出结果被压缩:

SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
2)ORC
CREATE TABLE orc_table
(
  column_specs
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="snappy");
3)Parquet
CREATE TABLE parquet_table
(
  column_specs
)
STORED AS PARQUET
TBLPROPERTIES ("parquet.compression"="snappy");

 计算过程中使用压缩

1)单个MR的中间结果进行压缩
SET mapreduce.map.output.compress=true;
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
2)单条SQL语句的中间结果进行压缩
SET hive.exec.compress.intermediate=true;
SET hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据深度洞察

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

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

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

打赏作者

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

抵扣说明:

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

余额充值