「Hive 进阶篇」一、详解存储格式及压缩方式
一、前言
hive 优化除了有 hql 语句逻辑优化,hql 参数调优等等,还有一个不起眼的细节容易被忽视掉,那便是 hive 数仓模型表的存储格式和压缩方式,hive 底层数据是依托在 hadoop,以 HDFS 文件存储在集群上的,hive 数仓模型表选择一个合适的存储格式和压缩方式也是 hive 优化的一点。本篇就来聊一聊这块知识点吧。😄
通过大纲提问式进行概览,你能通过文章学到什么:
1. hive 主要有几种存储格式 &压缩方式
2. 每种存储格式和压缩方式的细节
3. 什么场景使用什么存储格式 &压缩方式
二、存储格式
hive 主要有 textfile、sequencefile、orc、parquet 这四种存储格式,其中 sequencefile 很少使用,常见的主要就是 orc 和 parquet 这两种,往往也搭配着压缩方式合理使用。
建表声明语句是:stored as textfile/orc/parquet
1. Textfile
行式存储,这是 hive 表的默认存储格式,默认不做数据压缩,磁盘开销大,数据解析开销大,数据不支持分片(即代表着会带来无法对数据进行并行操作)
2. Orc
行列式存储,将数据按行分块,每个块按列存储,其中每个块都存储着一个索引,支持 none 和 zlib 和 snappy 这 3 种压缩方式,默认采用 zlib 压缩方式,不支持切片,orc 存储格式能提高 hive 表的读取写入和处理的性能。
3. Parquet
列式存储,是一个面向列的二进制文件格式(不可直接读取),文件中包含数据和元数据,所以该存储格式是自解析的,在大型查询时效率很快高效,parquet 主要用在存储多层嵌套式数据上提供良好的性能支持,默认采用 uncompressed 不压缩方式。
聊聊什么是行存储引擎,什么是列存储引擎
行存储引擎:同一条数据的不同字段都在相邻位置,所以当要查找某一条记录所有数据时行存储查询速度比较快列存储引擎:以列来聚集数据,相同字段的值聚集在一起,所以当查询某一个指定列的所有数据时,列存储查询速度比较快
三、压缩方式
hive 主要支持 gzip、zlib、snappy、lzo 这四种压缩方式。压缩不会改变元数据的分割性,即压缩后原来的值不变。
建表声明语句是:tblproperties("orc.compress"="SNAPPY")
压缩方式的评判标准主要有以下几点:
压缩比,越高越好
压缩时间,越快越好
已经压缩后是否可以再分割,可分割的话则可以为多个 mapper 程序并行处理,提高大数据分布式计算并行度
针对压缩方式做一个小结对比:
压缩率的话:gzip 压缩率最佳,但压缩解压缩速度较慢
压缩速度的话:snappy 压缩解压缩速度最佳,但压缩率较低
是否可切片的话:gzip/snappy/zlib 是不支持切片,而 lzo 支持切片
四、总结
适场景而选定压缩方式
数据量极其大且不经常用来做计算的数据,可采用 GZip,因为其压缩占比最高,但压缩解压缩速度最慢。
数据量不大且经常需要用来计算的数据,可采用 Snappy 或者 Lzo,常常还用来搭配 orc 和 parquet 存储格式实现大幅度的数据压缩存储。
适场景而选定存储格式
hive 生产环境下时常是采用 orc 或者 parquet 这 2 种存储格式,但最好是做好统一,别一个数仓里的表存储格式百花齐放
我建议就是数仓各层统一采用 orc 存储格式,拥有一定的压缩率且压缩解压缩速度也适中
orc 存储格式默认搭配的 zlib 压缩方式适合用作数仓 ODS 层表设计,因为这层一般是业务贴源层来入库数据和备份,查询频率打不大,而 orc 存储格式搭配 snappy 压缩方式适合用作数仓 DW 层表设计,这公共层表一般查询较频繁,所以要考虑下查询时解压缩速度
一般数据量预测会很大的话才不选用 orc 存储格式,主要是为了避免 map 端数据倾斜,因为 orc+snappy 不支持分割文件操作,所以压缩文件只会被一个任务读取,压缩文件很大的话就会造成 mapper 处理该文件极其耗时,这就是所谓的 map 读取文件出现数据倾斜
整理了一份
hive优化总结思维导图
和hive优化详细PDF文档
,有需要可 评论区留言 or 文末原文链接 获取 PDF 文档保存本地吧,学习和复习都是绝佳。
分享就到此结束了,建议收藏吸纳消化,博文不易,欢迎👏🏻点赞+转发
微信公众号推文链接:https://mp.weixin.qq.com/s/RndQKF5y9Mto7QfgiiAOvQ
版权声明: 本文为 InfoQ 作者【大数据阶梯之路】的原创文章。
原文链接:【http://xie.infoq.cn/article/1d2a1c4054e1c23ac87b0ff16】。文章转载请联系作者。
评论