为了优化MapReduce及MR之前的各种工具的性能,在Hadoop内建的数据存储格式外,又涌现了一批各种各样的存储方式。如优化Hive性能的RCFile,以及配合Impala实现出Google Dremel功能(类似甚至是功能的超集)的Parquet等。今天就来一起学习一下HDFS中数据存储的进化历程。
数据摆放结构
数据摆放结构(data placement structure),顾名思义,就是数据如何在HDFS中放置和存储的。这种摆放结构对于像Hive这种,HDFS之上的查询工具来说是非常重要的,摆放的结构和策略会直接影响Hive查询引擎的实现和性能。从Hive的角度来看,数据摆放结构就是:怎样从Hive中关系表的逻辑视图映射到HDFS块数据的物理存储。
从更高的层次来看,不仅仅是HDFS这种分布式系统上的应用,data placement对于传统数据库、NoSQL等系统也都是很重要的:
通常来说,有以下三种数据摆放结构:
Ø 水平的行存储结构
Ø 垂直的列存储结构
Ø 混合型的存储结构
下面就依次看一下这三种存储方式的优缺点。
水平的行存储结构
行存储是最传统的存储方式,经典模型是NSM(The N-ary Storage Model),其优缺点也很明显。优点就是数据加载非常快,因为一行数据都是放在一起的。同时对各种动态workload有很强的适应能力(具体指?)。而缺点