- 浏览: 398551 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
秦时明月黑:
深入浅出,楼主很有功底
hive编译部分的源码结构 -
tywo45:
感觉好多错误,但还是支持!
HDFS+MapReduce+Hive+HBase十分钟快速入门 -
xbbHistory:
解析的很棒!!
Linux-VFS -
darrendu:
执行这个命令,bin/hadoop fs -ls /home/ ...
Hadoop示例程序WordCount运行及详解 -
moudaen:
请问楼主,我执行总后一条语句时,执行的是自带的1.sql,你当 ...
TPC-H on Hive
Hive 是Apache Hadoop 项目下的一个子项目,是一个底层用Map/Reduce实现的查询引擎,具体的介绍可以查看Hive的wiki 。
入口
Hive有三种用户接口:CLI、Client(JDBC、ODBC、thrift或其他)和WebUI,如下图所示:
图1 Hive的入口
这些用户接口的工作是将用户输入的HQL语句解析成单条命令传递给Driver(包括用户配置,CLI还包括Session信息)。
Driver模块的工作是将HQL语句转化为MapReduce调用,包括主要的三个阶段:
编译:Compile,生成执行计划
优化:Optimize,优化执行计划(当前的Hive实现是在执行前做一次唯一的优化,没有反馈的过程,这使得优化工作只能是rule-based,做不到cost-based)。
执行:Execute,将执行计划提交给Hadoop。
本文主要记录的是Compile过程。
语义解析器
Compile过程的输入是抽象语法树(AST),输出是执行计划。这一过程由Driver调用,但是主要的逻辑在语义解析器中。语义解析器继承自BaseSemanticAnalyser,对每一种HQL命令,有对应的语义解析器类,包括下列:
表1 HQL命令对应的语义解析器
类 HQL命令类别 Task DCLSemanticAnalyzer DCL (taobao dist only) DCLTask DDLSemanticAnalyzer DDL DDLTask ExplainSemanticAnalyzer Explain ExplainTask FunctionSemanticAnalyzer FunctionTask LoadSemanticAnalyzer Load CopyTask MoveTask SemanticAnalyzer DML FetchTask ConditionalTask MapRedTask UserSemanticAnalyzer UserTask
语义解析器的工厂类SemanticAnalyzerFactory负责分发解析任务,它按照AST根节点的类别生成对应的解析器。
语义解析器部分的类图:
生成Operator树
下面以一个select语句为例解析Compile的过程:SELECT
s.name name, count(o.amount) sum_order, sum(o.amount) sum_amount
FROM t_sale s LEFT OUTER JOIN t_order o ON (s.id = o.sale_id)
GROUP BY s.id, s.name
如上所述,select语句由SemanticAnalyzer解析。其他的语义解析器较为简单略去不讲。这一查询语句的AST画出来类似这样:
Operator抽象了Hive中的一次操作。首先看一下上面的命令的执行计划
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-1
Map Reduce
Alias -> Map Operator Tree:
s
TableScan
alias: s
Reduce Output Operator
key expressions:
expr: id
type: int
sort order: +
Map-reduce partition columns:
expr: id
type: int
tag: 0
value expressions:
expr: id
type: int
expr: name
type: string
o
TableScan
alias: o
Reduce Output Operator
key expressions:
expr: sale_id
type: int
sort order: +
Map-reduce partition columns:
expr: sale_id
type: int
tag: 1
value expressions:
expr: amount
type: int
Reduce Operator Tree:
Join Operator
condition map:
Left Outer Join0 to 1
condition expressions:
0 {VALUE._col0} {VALUE._col1}
1 {VALUE._col4}
outputColumnNames: _col0, _col1, _col7
Select Operator
expressions:
expr: _col0
type: int
expr: _col1
type: string
expr: _col7
type: int
outputColumnNames: _col0, _col1, _col7
Group By Operator
aggregations:
expr: count(_col7)
expr: sum(_col7)
keys:
expr: _col0
type: int
expr: _col1
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2, _col3
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
Stage: Stage-2
Map Reduce
Alias -> Map Operator Tree:
hdfs://hdpnn.cm3:9000/group/tbdev/shaojie/hive-tmp/1908438422/10002
Reduce Output Operator
key expressions:
expr: _col0
type: int
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: int
expr: _col1
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
expr: _col3
type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(VALUE._col0)
expr: sum(VALUE._col1)
keys:
expr: KEY._col0
type: int
expr: KEY._col1
type: string
mode: mergepartial
outputColumnNames: _col0, _col1, _col2, _col3
Select Operator
expressions:
expr: _col1
type: string
expr: _col2
type: bigint
expr: _col3
type: bigint
outputColumnNames: _col0, _col1, _col2
File Output Operator
compressed: true
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.TextInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Stage: Stage-0
Fetch Operator
limit: -1
可以看到,上面的查询语句包含FilterOperator、SelectOperator等多个Operator,且Operator节点之间构成一颗Operator树。以后我们还会多次回顾这个执行计划。
PS:严格意义上的Operator节点之间的关系构成的结构是一个图。用树结构来描述语法是很自然的,例如AST,但树结构不足以描述语义,示例的
SELECT命令中,需要两次扫描表的操作,join操作需要基于扫描表的结果进行,这在Operator树中描述为“JoinOperator的父节点
为t_order表TableScan和t_sale表TableScan(多个父节点)”。
除了上述情况外,Operator树一般是退化为链表的树形结构,例外是所有的子查询又会是一颗子树。
SemanticAnalyzer通过一系列genXXXPlan方法来生成这颗Operator树。
发表评论
-
hive serde
2011-04-13 15:34 2873一、背景 1、当进程在进行远程通信时,彼此可以发送各种类型的 ... -
hive 用mysql存储元信息
2011-01-22 15:22 1362http://www.tech126.com/hive-m ... -
hive编译部分的源码结构
2011-01-13 16:47 2564很少在博客里写翻译的东西, 这次例外. 原文在这儿 . ... -
hive执行作业时reduce任务个数设置为多少合适?
2011-01-12 15:31 2527Hive怎样决定reducer个数? Hadoop ... -
hive 源码结构分析(编译器)
2011-01-06 16:52 6606Hive 是将 SQL 语句转换成 h ... -
hive中关于partition的操作
2011-01-06 10:51 2308hive > create table mp (a s ... -
hive mapjoin
2010-12-15 21:35 2129insert overwrite table cross ... -
Hive QL
2010-12-15 10:47 1674Hive 的官方文档中对查 ... -
hive数据模型
2010-12-06 19:48 2644Hive 中所有的数据都存储在 HDFS 中 ... -
SequenceFile的压缩和分片
2010-12-06 19:43 2419Compressed Data Storage Kee ... -
hive的一些资料整理
2010-12-06 16:23 1538解释器、编译器、优 ... -
hive的存储格式
2010-12-06 13:05 2412hive有textFile,SequenceFile,RCFi ... -
TPC-H on Hive
2010-12-03 17:40 40781)下载TPC-H的代码,用来 ... -
hive show table显示不出表的问题
2010-12-03 11:30 5455问题:在hive中运行 show table时,以前存在的表显 ... -
hive运行实例
2010-12-02 21:18 1853实际示例 创建一个表 CREATE TABLE u_dat ... -
源码编译hive
2010-12-02 19:00 3527hive -hiveconf hive.root.logger ... -
hive报Invalid maximum heap size: -Xmx4096m错误解决方法
2010-11-29 10:25 2429mongodb@krusiting-laptop:~/hive ... -
Hive Installation and Configuration
2010-11-25 20:13 672http://wiki.apache.org/hadoop/H ...
相关推荐
apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...
含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...
02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...
dbeaver连接hive时需要的驱动包hive-jdbc-uber-2.6.5.0-292.jar
hive-jdbc-3.1.2-standalone适用于linux
hive-jdbc-1.2.1-standalone.jar hive-jdbc驱动jar包,欢迎下载
hive-jdbc-2.1.1-cdh6.2.0(ieda等jdbc链接hive2.1.1);cdh6.2.0安装的hive2.1.1
hive JDBC jar包全家桶。由于项目使用,此jar包从国外下载费了好大劲,现分享给大家。 cdh6.3.2版本的
Hive连接的jar包——hive-jdbc-3.1.2-standalone.jar,使用数据库连接软件连接数据仓库时需要使用相应的驱动器驱动,希望对大家有所帮助
hive-jdbc-uber-2.6.5.0-292.jar驱动
hive-jdbc-2.3.7-standalone,可用dbeaver连接hive数据库,在工具中进行数据库记录的新增改查
hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" > "Driver Manager...") and hit the ...
hive-jdbc-uber-2.6.5.0-292.jar 驱动下载,hive-jdbc-uber-2.6.5.0-292.jar,hive-jdbc-uber-2.6.5.0-292.jar
Missing Hive Execution Jar: /hive/hive1.2.1/lib/hive-exec-*.jar
jdbc连接hive所需的一个包 ( hive-jdbc-3.1.2.jar)
hive-jdbc-2.1.0.jar
hive2.1.1 show create table 表名,hive中文乱码,替换hive-exec-2.1.1.jar
用java连接hive所必须的jar包,包括hadoop-commmon-2.6.4以及hive-jdbc-1.2.1-standalone
hive旅游-hive旅游系统-hive旅游系统源码-hive旅游管理系统-hive旅游管理系统java代码-hive旅游系统设计与实现-基于springboot的hive旅游系统-基于Web的hive旅游系统设计与实现-hive旅游网站-hive旅游网站代码-hive...