Hive
主要由用户接口模块、驱动模型以及元数据存储模块3个模块组成:
用户接口模块
用户接口模块包括CLI
、Hive
网页接口(Hive Web Interface,HWI)、JDBC
、ODBC
、Thrift Server
等,主要实现外部应用对Hive
的访问。用户可以使用以下两种方式来操作数据:
- CLI (command-line shell):
Hive
自带的一个命令行客户端工具,用户可以通过Hive
命令行的方式来操作数据; - HWI (Thrift/JDBC):
HWI
是Hive
的一个简单网页,JDBC
、ODBS
和Thrift Server
可以向用户提供编程访问的接口。用户可以按照标准的JDBC
的方式,通过Thrift
协议操作数据。
驱动模块
驱动模块(Driver)包括编译器、优化器、执行器等,所采用的执行引擎可以是 MapReduce
、Tez
或Spark
等。当采用MapReduce
作为执行引擎时,驱动模块负责把 HiveQL
语句转换成一系列MapReduce
作业,所有命令和查询都会进入驱动模块,通过该模块对输入进行解析编译,对计算过程进行优化,然后按照指定的步骤执行。
元数据存储模块
- 元数据: 元数据(metadata)是 描述数据的数据 ,对于
Hive
来说,元数据就是用来描述HDFS
文件和表的各种对应关系(位置关系、顺序关系、分隔符)。Hive
的元数据存储在关系数据库中(Hive
内置的是Derby
、第三方的是MySQL
),HDFS
中存储的是数据。在Hive
中,所有的元数据默认存储在Hive
内置的Derby
数据库中,但由于Derby
只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用