Day46_Hive高阶

本文详细介绍了Hive的高级特性,包括压缩、存储格式、Hadoop压缩算法比较、Hive事务的背景知识和实现原理,以及视图和物化视图的概念、好处及使用方法。此外,还讨论了数据同步问题和拉链表的设计与实现,旨在提升Hive数据处理的效率和性能。
摘要由CSDN通过智能技术生成

五、压缩和存储

在实际工作当中,hive当中处理的数据,一般都需要经过压缩,可以使用压缩来节省我们的MR处理的网络带宽

  • 压缩优点:

减少存储磁盘空间,降低单节点的磁盘IO。

由于压缩后的数据占用的带宽更少,因此可以加快数据在Hadoop集群流动的速度,减少网络传输带宽。

  • 压缩缺点:

需要花费额外的时间/CPU做压缩和解压缩计算。

 

(一)Hadoop压缩

a、Hadoop支持的压缩算法

Haodop对文件压缩均实现org.apache.hadoop.io.compress.CompressionCodec接口,所有的实现类都在org.apache.hadoop.io.compress包下。

 

b、压缩算法比较

有不少的压缩算法可以应用到Hadoop中,但不同压缩算法有各自的特点。

压缩格式

工具

算法

文件扩展名

是否可切分

对应的编码/解码器

DEFAULT

DEFLATE

.deflate

org.apache.hadoop.io.compress.DefaultCodec

Gzip

gzip

DEFLATE

.gz

org.apache.hadoop.io.compress.GzipCodec

bzip2

bzip2

bzip2

.bz2

org.apache.hadoop.io.compress.BZip2Codec

LZO

lzop

LZO

.lzo

是(索引)

com.hadoop.compression.lzo.LzopCodec

LZ4

LZ4

.lz4

org.apache.hadoop.io.compress.Lz4Codec

Snappy

Snappy

.snappy

org.apache.hadoop.io.compress.SnappyCodec

存放数据到HDFS中,可以选择指定的压缩方式,在MapReduce程序读取时,会根据扩展名自动解压。例如:如果文件扩展名为.snappy,Hadoop框架将自动使用SnappyCodec解压缩文件。

 

通过上图,我们可以看到哪些压缩算法压缩比更高。

整体排序如下:

Snappy < LZ4 < LZO < GZIP < BZIP2,但压缩比越高,压缩的时间也会更长。以下是部分参考数据:

压缩算法

压缩后占比

压缩

解压缩

GZIP

13.4%

21 MB/s

118 MB/s

LZO

20.5%

135 MB/s

410 MB/s

Zippy/Snappy

22.2%

172 MB/s

409 MB/s

 

d、Mr中开启压缩

1、mapreduce中的压缩

//开启map输出压缩
conf.set("mapreduce.map.output.compress","true");
conf.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.BZip2Codec");
//开启reduce输出压缩
conf.set("mapreduce.output.fileoutputformat.compress","true");
conf.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.GzipCodec");
//压缩类型
conf.set("mapreduce.output.fileoutputformat.compress.type","BLOCK");

2、开启Map输出阶段压缩(MR引擎)

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

1)开启hive中间传输数据压缩功能

set hive.exec.compress.intermediate=true;

2)开启mapreduce中map输出压缩功能

set mapreduce.map.output.compress=true;

3)设置mapreduce中map输出数据的压缩方式

set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

4)执行查询语句

select count(1) from t2;

3、开启Reduce输出阶段压缩

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

案例实操:

1)开启hive最终输出数据压缩功能

set hive.exec.compress.output=true;

2)开启mapreduce最终输出数据压缩

set mapreduce.output.fileoutputformat.compress=true;

3)设置mapreduce最终数据输出压缩方式

set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

4)设置mapreduce最终数据输出压缩为块压缩

set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5)测试一下输出结果是否是压缩文件

insert overwrite local directory '/home/offcn/tmp/hive-reducecompress/' select count(1) from t2;

(二)文件存储格式

Hive支持的存储数的格式主要有:TEXTFILE(行式存储) 、SEQUENCEFILE(行式存储)、ORC(列式存储)、PARQUET(列式存储)。

 

(1)列式存储和行式存储

  • 行式存储:
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值