Hive作为数据仓库常用工具之一,在数据量级越来越大的时候,存储问题会暴露出来。那么在之前大部分为了省事方便都会以TextFile*作为存储类型,此类型比较占存储,并且查询效率并不是很高。为了节省集群的存储空间,研究了各种存储类型,网上各类帖子已经把这几类的优缺点和使用场景说的非常明确。我在这稍微提及一下,主要想分享我在使用sqoop抽取数据时进行文件类型转换(parquet)遇到的坑,共享出来希望遇到此问题的朋友借鉴,减少不必要时间消耗。*
一、概述一下各类文件类型的优缺点
1.TextFile
行存储,直接存储文件,数据量级大,磁盘开销大,
优点:数据操作方便,直接使用put上传数据文件,并且可以直接使用cat 查看HDFS上的文件内容
2.SequenceFile
行存储,含有键值对的二进制文件,数据量级大,对于Hadoop生态系统之外的工具不适用,需要通过text文件转化加载。
优点:可压缩、可分割,优化磁盘利用率和I/O
3.rcfile
行列式存储,先将数据按行分块,同一个record在一个块上,避免读一条记录需要读多个block;然后块数据列式存储
缺点:加载时性能消耗较大,需要通过text文件转化加载;读取全量数据性能低(扫描的数据块多效率低 )
优点:可压缩,高效的列存取;查询效率较高。
4.orcfile
列式存储,优化后的rcfile,存储方式和 rcfile 相同
优点:压缩快,快速列存取 ,效率比rcfile高 ,上层presto查询引擎和orc格式兼容性较好
缺点:查询引擎不支持 impala 只能用hive查询数据
5.parquet
列存储,Parquet仅仅是一种存储格式,和语言、平台无关,并且不需要和任何一种数据处理框架绑定,通常使用的查询引擎和计算框架都已适配,并且可以很方便的将其它序列化工具生成的数据转换成Parquet格式。
优点:
1.支持多种(几乎大部分)查询引擎,计算框架,数据模型
2.可以使用更多的压缩算法
3.很好的支持: hive,spark,hadoop streaming,mapreduce,impala
4.查询性能和压缩比虽然没有ORC高但是已经达到相对满意的程度了
如果使用impala组件,使用parquet 存储格式是最好的搭配。根据实际使用情况得知: 使用parquet格式没有采用压缩就已经有 2.3:1 的压缩比了 ,数据量至少比原来减少一半以上,并且不影响原来的查询和计算。
二、sqoop+hive(parquet)
1.hive建表语句
CREATE TABLE