Hive 是 Hadoop 项目中的另一个子项目, 它是建立在 Hadoop 基础之上的数据仓库工具, 可以存储, 查询和分析存储在 HDFS 中的大规模数据. 从架构上看, Hive 功能模块包括用户端, 解释器, 元数据存储和分析数据存储. 如下图所示:
Hive 功能结构
用户端: 主要包含命令行 (CLI), 客户端(Client) 和 web 图形化界面(WebGUI). 最常用的是 CLI, 它启动的时候会同时启动一个 Hive 守护进程服务, 使用者可以交互式地输入地输入命令并得到相应的结果输出. Client 是 Hive 的客户端, 用户通过它连接到 Hive 的服务器. Client 模式启动的时候, 需要启动 Hive 服务器所在的节点, 并进行相应的配置. WebGUI 工具允许用户通过浏览器访问 Hive, 使用前要启动 HWI 组件(Hive Web Interface).
解释器: 主要包含执行编译器, 优化器和执行器, 它们完成 HiveQL 查询语句的词法分析, 语法分析, 编译, 优化及计划的生成. 生成的查询计划也会存储在 HDFS 中, 并在随后通过 MapReduce 框架调用执行. 这也体现了 Hive 的核心思想之一, 就是尽量简化 MapReduce 开发的工作量, 使得某些操作和查询的复杂逻辑对使用者完全透明.
元数据存储: Hive 中的元数据包括表的名字, 表的列, 表分区, 表数据所在的目录, 是否为外部表, 等等. 尽管 Hive 采用 NoSQL 的方式进行工作, 但它仍然使用关系型数据库存储元数据, 这点主要是考虑到元数据的规模较小, 而对读写同步的要求很高. 此外, 将元数据的存储从 Hive 的数据服务中解耦出来, 可以大大减少执行语义检查的时间, 也能提高整个系统运行的健壮性. 常用的关系型数据库配置是 MySQL 或 Derby 嵌入式数据库.
分析数据存储: Hive 用于分析的海量数据都存储在 HDFS 之中, 支持不同的存储类型包括纯文本文件, HBase 等文件. 一旦解释器接受了 HiveQL, 那么 Hive 将直接读取 HDFS 的数据, 并将查询逻辑转化成 MapReduce 计算来完成.
来源: http://www.jianshu.com/p/565912df370c