1、hive简介
- Hive是基于Hadoop的一个数据仓库工具
- Hive可以将结构化的数据文件(eg:按照各字段分类的数据)映射成一张虚表,并提供类SQL查询功能
- Hive默认计算引擎为Map Reduce,还可以使用Tez、Spark
2、hive特点
- 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
- 延展性:Hive支持用户自定义函数,用户可以根据自己需求来实现自己的函数。
- 容错:良好的容错性,节点出现问题SQL仍可完成执行。
3、hive架构
Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图
3.1、客户端Client
- CLI:命令行接口,是最常用的一种用户接口,CLI启动时会同时启动一个Hive副本。CLI是和Hive交互的最简单也是最常用方式,只需要在一个具备完整Hive环境下的Shell终端中键入hive即可启动服务。 用户可以在CLI上输入HQL来执行创建表、更改属性以及查询等操作。不过Hive CLI不适应于高并发的生产环境,仅仅是Hive管理员的好工具。
- JDBC/ODBC: JDBC是java database connection的规范,它定义了一系列java访问各类db的访问接口,因此hive-jdbc其实本质上是扮演一个协议转换的角色,把jdbc的标准协议转换为访问HiveServer服务的协议。hive-jdbc除了扮演网络协议转化的工作,并不承担他的工作,比如sql的合法性校验和解析,一律忽略 。ODBC是一组对数据库访问的标准AP ,它的底层实现源码是采用C/C++编写的。JDBC/ODBC都是通过hiveclient与hiveserver保持通讯的,借助thrfit rpc协议来实现交互。
- HWI:HWI是Hive的web方为接口,提供了一种可以可以通过浏览器来访问Hive的服务
3.2、元数据(Metastore)
- 用于存储hive的元数据, 包括表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等内容。
- 默认存储在自带的derby数据库中,但因为derby无法实现并发,推荐使用MySQL存储Metastore
- hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性。
3.3、驱动器:Driver
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execu