摘要:从中获取用户对查询树中的表达式进行数据类型检查和基于分区的查询预测所需的元数据信息。生成的执行计划是一个由不同的组成的有向无环图,每个有可能是一个任务,或者元数据信息操作,或者操作。如果任务执行会导致元素局信息的变动,会通知进行元数据修改。
1、 Hive架构 Hive的核心组件包括:本系列文章使用的硬件环境为:centOS 6.5 64bit / 4G RAM 30G HHD
使用的Hive版本为:hive2.0.0 / Hadoop版本为2.6.4 / JDK版本为:1.8.0
UI:用户提交查询或其他系统操作的接口,可能是命令行工具,也可能是基于Web的界面工具
Driver:接收查询的组件,Driver实现了会话的概念,并且提供基于JDBC和ODBC接口的执行和获取的API模型。
Compiler:解析用户查询的组件,对不同的查询块和查询表达式进行语法检查,并最终借助于MetaStore提供的表和分区的元数据信息生成一个执行计划。
Metastore:存储数据仓库中的众多表和分区的结构信息,字段和字段类型信息,读写数据所需的序列化和反序列化的反序列化工具信息,以及对应的数据在HDFS存储的位置信息等。
Execution Engine:执行Compiler生成的执行计划。Compiler生成的执行计划是一个由不同stage组成的有向无环图,Execution Engine管理不同stage之间的依赖关系,然后在合适的系统组件上执行这些stage
Hive任务的执行流程step1:用户通过UI组件提交查询语句或其他指令,UI组件调用Driver组件的命令执行接口
step2:Driver为任务生成一个会话,并且将这个任务提交给Compiler组件。
step3:Compiler从Metastore中获取用户对查询树中的表达式进行数据类型检查和基于分区的查询预测所需的元数据信息。并生成执行计划。Compiler生成的执行计划是一个由不同的stage组成的有向无环图,每个stage有可能是一个MapReduce任务,或者元数据信息操作,或者HDFS操作。如果是MapReduce类型的stage,那么这个Stage会包含一个Map操作树,和Reduce操作树。最后Compiler会向Driver提交生成的执行计划。
step4:Driver生成执行计划之后,向Execution Engine提交执行计划
step5:Execution Engine收到执行计划之后,会根据stage之间的依赖关系,然后向合适的外部组件提交这些stage(不同部署方式会有所不同)。外部组件(比如Hadoop)会将执行结构保存成临时文件。如果任务执行会导致元素局信息的变动,Execution Engine会通知MetaStore进行元数据修改。
step6:Driver通过Execution Engine获取执行结果,并将执行结果返回给终端用户
2、 Hive的数据模型hive的数据组织结构为:
database:和一般关系型数据库(例如mysql,sqlserver)中的database的概念是类似的,其作用主要是将用户建的表进行隔离。实际存储的时候就是一个数据库的所有表存储在一个文件夹中。
tables:表是实际存放数据的地方,和DBMS中类似,HIve中的表实际上也是二维表,分为行和列,不同之处在于hive中除了一些原生类型之外,还支持List和Map类型,当然用户也可以自定义类型
partitions:为了便于用户组织数据,Hive中提供了一个分区的概念,和Oracle中的分区类似,可以按照某个字段的不同取值,将数据组织在不同的分区中。现在Hive支持多级分区,即对分区之后的数据再进行分区,比如公司订单数据,可以先按照日期进行分区,每天一个分区,然后在每天的分区按照销售区域进行分区。实际储存时每个分区实际上就是表目录下的一个子目录,多级分区就是子子目录,依次类推。不是所有的表都必须分区
buckets:Hive中分区的数据可以按照某个字段拆分成多个文件,进行存储。bucket能够允许系统有效的进行基于字段值得抽样。并非所有的表都会使用bucket
row:就是一条数据记录,在默存储方案下,Hive会指定一个航分割符号,对数据进行分割,默认为换行符。行分割符可以在建表的时候指定。
col:一行数据中可能会包含多个列(字段)。字段与字段之间使用列分割符进行分割。默认的列分隔符为