1.背景
这篇文章本身就不长,总共三页半,作者来自Facebook数据基础架构团队。下面正式介绍。
传统的数据集存储方案成本过高,Hadoop则可以作为替代方案:在大规模廉价的商用机器上进行大规模数据存储。Hadoop上可以运行MapReduce,但是mapreduce编程模型的级别非常低,难以维护和重用。
Hive是一种基于Hadoop构建的开源数据仓库解决方案。Hive支持类似SQL的声明性语言查询–HiveQL,它们被编译为在Hadoop上执行的map-reduce作业。此外,HiveQL支持将自定义map-reduce脚本插入查询中。Hive还包括一个类型系统,支持包含基本类型的表,数组和映射的集合,以及相同的嵌套组合。底层IO库可以扩展为以自定义格式查询数据。Hive还包括一个包含模式和统计信息的系统目录Hive-Metastore,它在数据探索和查询优化中很有用。在Facebook中,Hive仓库包含数千个表,其中包含超过700 TB的数据,并且被100多个用户广泛用于报告和临时分析。
2.数据模型
Hive的数据组织为:
- Tables(表):类似于关系型数据库中的表。每个表都有一个相应的HDFS目录。HDFS文件系统目录类似于Linux,以“/”为根目录。表中的数据被序列化并存储在该目录中的文件中。用户可以将表与基础数据的序列化格式相关联。Hive提供内置的序列化格式,主要是利用压缩和延迟反序列化(lazy de-serialization)。用户还可以通过定义用Java编写自定义序列化和反序列化方法(称为SerDe‘s)来添加对新数据格式的支持。每个表的序列化格式存储在系统目录中,并在查询编译和执行期间由Hive自动使用。 Hive还支持存储在HDFS,NFS或本地目录中的外部表。
- 分区(partitions):每个表可以有一个或多个分区,用于确定