Hive及其架构简介
Hive及其架构简介
Hive是基于Hadoop的数据仓库工具,用于处理和分析大规模数据集。本文将详细介绍Hive的基本概念、架构组件以及HQL(Hive查询语言)的执行流程。
什么是 Hive ?
Hive是一个基于Hadoop的数据仓库,适用于一些高延迟性的应用(离线开发)。它可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,并基于表提供类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive的核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行。需要注意的是,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表是纯逻辑表。
什么是数据仓库?
数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统。同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用。这就是为什么叫“仓库”,而不叫“工厂”的原因。
Hive 架构及组件
Hive的架构主要包括以下几个组件:
Meta store:通常存储在关系型数据库如Mysql/derby中,Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否是外部表等)、表的数据所在目录等。
Driver:驱动程序,包括语法解析器、计划编译器、优化器、执行器。完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有执行引擎调用执行。
解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,对AST进行语法分析,比如SQL语义是否正确、表是否存在、字段是否存在。
编译器(Physical Plan):将AST编译生成逻辑执行计划(DAG)。
优化器(Query Optimizer):对逻辑执行计划进行优化。
执行器(Execution):把逻辑执行计划转换成可以运行的物理计划,就是MapReduce/Spark程序。
HQL 执行流程
HQL的执行流程主要包括以下步骤:
发起请求:从UI发起执行请求到Driver。
获取执行计划:Driver将用户请求发送到编译器获取执行计划。
获取元数据:编译器根据SQL语句中相关表和分区信息从Meta store获取相关元数据。
返回元数据:Meta store向编译器返回对应元数据。
返回执行计划:根据表和分区的元数据对SQL解析和优化,生成逻辑执行计划。该计划是一个DAG图,每个stage对应一个MapReduce的map或者reduce操作。
运行执行计划:将执行计划发送到Execution Engine,执行引擎会将逻辑执行计划提交到Hadoop中以MapReduce形式进行执行。
运行结果获取:Driver将运行结果收集发送给UI。