概述
文章目录
- 前言
- 一、Hive的压缩方式
- (一) 概念
- (二) 简介
- (三) 数据分层的压缩方式选择
- (四)开启Map输出阶段压缩
- (五)开启Reduce输出阶段压缩
- 二、 Hive的数据存储格式
- (一)行存储的特点
- (二)列存储的特点
- (三)列式存储的特性
- 总结
前言
#博学谷IT学习技术支持#
由于大数据需要存储的数据较多,如果直接存储原始数据,将会占用较多的硬盘空间,于是就诞生了存储方式和压缩方式,以一定的算法降低数据占用的空间,并且保证数据不丢失,从而提高空间的利用率。
一、Hive的压缩方式
(一) 概念
(1)Hive底层为MapReduce,所以Hive的压缩实际就是MapReduce的压缩
(2)MapRedece的压缩分为Map端结果文件压缩和Reduce端结果文件压缩
(二) 简介
压缩方式常用的有Deflate,Snappy,ZLib,Gzip和Bzip2,不同的压缩方式效率不同;
(1) 从压缩比来说,Bzip2 > ZLib > Gzip > deflate > Snappy,除了Snappy之外的压缩方式可以保证最小的压缩,但是在运算过程中时间消耗较大;
(2)从压缩性能上来说, Snappy > Deflate > Gzip > Bzip2,其中,Snappy压缩和解压缩速度快,压缩比低。
所以一般在生产环境中,经常会采用snappy压缩,以保证运算效率
(三) 数据分层的压缩方式选择
根据每个数据分层的作用,选择不同的压缩方式,从而提高执行的效率;
(1)ODS层适合Zlib,Gz和Bzip2的压缩方式,该层需要存储较多的数据,所以选择压缩比较高的压缩方式,可以节省空间,从而存储更多的数据
(2)DW层和DA层适合Snappy压缩方式,这两层数据的查询较为频繁,数据存储量不大,所以适合压缩和解压缩效率较高的Snappy压缩方式
(四)开启Map输出阶段压缩
开启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 score;
(五)开启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 '/export/data/compress'
select * from score distribute by sid sort by sscore desc;
二、 Hive的数据存储格式
Hive支持的存储方式主要有列式存储和行式存储,其中行式存储有TEXTFILE和SEQUENCEFILE,列式存储有ORC和PARQUET,不同需求下使用不同的存储方式可以提高数据查询效率。
(一)行存储的特点
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
(二)列存储的特点
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法
(三)列式存储的特性
相比于行式存储,列式存储在分析场景下有着许多优良的特性:
1)分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个block中,不参与计算的列在IO时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了IO开销,加速了查询。
2)同一列中的数据属于同一类型,压缩效果显著。列存储往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本。
3)更高的压缩比意味着更小的数据空间,从磁盘中读取相应数据耗时更短。
4)自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。
总结
压缩方式结合数据存储格式可以更好的提高数据查询效率,以及降低数据的空间占用率,相同的磁盘空间存储更多的数据,从而提高磁盘空间的利用率。
最后
以上就是长情身影为你收集整理的大数据之数据的压缩与存储前言一、Hive的压缩方式二、 Hive的数据存储格式总结的全部内容,希望文章能够帮你解决大数据之数据的压缩与存储前言一、Hive的压缩方式二、 Hive的数据存储格式总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复