文件存储格式
Hive支持的存储数据的格式主要有:TEXTFILE (行存储)、SEQUENCEFILE(行存储)、ORC(列存储)、PARQUET(列存储)。
9.4.1 列式存储和行式存储
如图所示左边为逻辑表,右边第一个为行式存储,第二个为列式存储。
1)行存储的特点
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
2)列存储的特点
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;
ORC和PARQUET是基于列式存储的。
ORC与PARQUET的选择
1、存储空间
orc的压缩比parquet更好,相同大小的文件,orc格式往往占用的空间更小!
但是其实现在硬盘的价格相对于内存和cpu,gpu来说,应该是很便宜的了,所以在这点上你说orc有多大优势,并不见得
存储在hadoop上会有三副本,可以考虑调低副本数(但是就降低了可用性),或者hadoop3.x好像有什么纠删码策略,可以减少副本数(具体没了解过)
2、查询框架
查询往往都是使用不同的框架查询同一份数据,问题在于这些不同的框架对于这个格式的支持度如何?
比如spark默认的数据格式是parquet,也从侧面印证spark对于parquet数据的查询优于orc
比如impala低版本是不支持orc格式的!
比如hive查询orc格式的数据速度更快性能更好!
网友评论