HIVE概述和HIVE基本原理
Contents
Hive是基于Hadoop的一个数据仓库工具,它可以将结构化的数据文件(TEXT,ORC,PARQUET等)映射为一张数据库表,并提供简单的类SQL(HQL)查询功能,可以将HQL语句转换MapReduce任务进行运行。
Hive的特点:
- 简单易用。基于SQL表达式语法,兼容大部分SQL-92语义和部分SQL-2003扩展语义。
- 可扩展。Hive基于Hadoop实现,可以自由的扩展集群的规模,一般情况下不需要重启服务。
- 延展性。Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
- 容错性。Hadoop良好的容错性,节点出现问题SQL仍可完成执行。
Hive 命令
hive -f /home/my/hive-script.sql
Hive 基本原理
Hive系统架构
- 接口
- 用户接口主要有是三个:CLI,HWI和ThriftServer
- 最常用的CLI,CLI启动的时候,会同时启动一个Hive Driver。
- ThriftServer是以Thrift协议封装的Hive服务化接口,可以提供跨语言的访问如Python、C++等,并实现了JDBC/ODBC协议。
- HWI提供了一个基于浏览器访问Hive的途径
- 元数据存储(Metastore)
- Hive 将元数据存储在数据库中,如MySQL,Oracle,Derby。
- Hive 中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。
- 驱动器(Driver)
- 编译器:完成词法分析,语法分析,将HQL查询解析成AST;AST生成逻辑执行计划;逻辑执行计划生成物理MR执行计划。
- 优化器:对逻辑执行计划进行优化;对物理执行计划进行优化。
- 执行器:生成的物理执行计划转变成MR Job;提交到Hadoop上面执行。
- Hadoop
- MapReduce计算
- HDFS数据存储
部署方式
内嵌模式:CLI Shell/Driver/MetaStoreCLI均在JVM内部
HiveServer2:
- Driver/MetaStoreCLI均在ThriftServer端
- 提供JDBC/ODBC协议
- 做Session隔离,每个Session内部共享一个Driver
Remote MetaStoreServer
- MetaStore作为一个独立的Thrift服务,而不是每个Driver自己维护一个瘦MetaStore访问DB