hive架构及使用场景

时间:2024-03-26 22:10:15

一 什么是Hive,它能解决什么问题?

Hive是一个基于Hadoop的数据仓库平台。它通过HDFS进行存储,通过MapReduce执行查询计划,使用类SQL的查询语言HQL作为查询接口。

作用:可以很方便我们进行数据的ETL工作,避免了使用MapReduce来做如此复杂事情。

 

二 Hive的架构

hive架构及使用场景

三 Hive的原理

客户端发起查询请求,比如你在HiveShell发送一条HQL语句,会调用Cli.sh 并调用入口类CliDriver这个类

3.1解析参数,设置一些属性等

3.2创建ConsoleReader,不断的读取控制台参数,直到遇到分号为止

3.3判断这个语句是否编译过,如果没有编译需要先编译,调用Driver#compile方法:

3.3.1创建QueryState对象

3.3.2创建ParserDriver,调用ParserDriver#parse方法进行查询解析,生成ASTNode(抽象语法树),使用的是antlr(根据输入自动生成语法树的开源语法分析器):

生成ASTNode的规则:根据token 创建ASTNode

比如INSERT OVERWRITETABLE access_log SELECT a.user,a.prono,

p.maker,p.priceFROM access_log_hbase a JOIN product_hbase p ON

(a.prono= p.prono)


hive架构及使用场景

3.3.3创建语义分析器SemanticAnalyzer

通过SemanticAnalyzerFactory#get(conf,tree)传入的ASTNode的type创建不同的SemanticAnylyzer,这里应用的是简单工厂模式。

TOK_EXPLAIN=>ExplainSemanticAnalyzer

TOK_EXPLAIN_SQ_REWRITE=>ExplainSQRewriteSemanticAnalyzer

TOK_LOAD=>LoadSemanticAnalyzer

TOK_EXPORT=>ExportSemanticAnalyzer

TOK_IMPORT=>ImportSemanticAnalyzer

TOK_ALTERTABLE=>DDLSemanticAnalyzer

TOK_ALTERVIEW=>DDLSemanticAnalyzer

TOK_QUERY=>SemanticAnalyzer

TOK_CREATEFUNCTIONTOK_DROPFUNCTION=>FunctionSemanticAnalyzer

TOK_ANALYZE=>ColumnStatsSemanticAnalyzer

TOK_UPDATE_TABLE/TOK_DELETE_FROM=>UpdateDeleteSemanticAnalyzer

默认情况就是SemanticAnalyzer

 

3.3.4通过语义分析器BaseSemanticAnalyzer#analyze进行语义分析

#根据语法树创建解析树

=>分析和处理表的别名

=>分析创建表和视图的命令

=>分析form子句的子ASTNode

=>在这过程中,会往QueryBlock填充一些信息(QB: 查询的基本组成单元)

=>根据QB获取元数据:

"a":TableInfo("access_log_hbase")

"p":TableInfo("product_hbase")

 

#遍历QueryBlock, 根据解析树创建操作树OperatorTree


=>根据from从句得到所有的操作信息:循环递归子查询去填充执行计划部分的子查询;然后递归所有的源表,添加