hive原理(未完。。)

hive就是一个将hiveql(其实是sql的子集或者说一点点的超集)语句转化为一系列可以在Hadoop集群上运行的MR的工具,通常在客户端执行 hive 命令(淘宝有ide,所以不用安装hive啦 )然后输入 SQL 语句后, hive 将 SQL 语句生成多个 MR 的 job ,然后将这些 job 提交给 hadoop 进行执行,完成后,再把结果放入到 hdfs 或者本地的临时文件中。
如下图

hive原理(未完。。)_第1张图片

以下图片摘自淘宝周忱《hive原理》的技术文档hive原理(未完。。)_第2张图片

hive原理(未完。。)_第3张图片

hive原理(未完。。)_第4张图片

hive原理(未完。。)_第5张图片

解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。

一条sql语句的结构:
一条sql主要包括,insert子句,select子句,from子句,groupby子句,以及其他的条件子句,如limit,orderby等,还有join和union等操作符。其中的from子句,一般可以直接跟一个表,多个表(笛卡尔积等同于join),或者一个子查询,或者由join或union连接的两个表,或者两个子查询。包含子查询则意味着sql语句自身会包含这一些递归的操作。

hive对一条sql执行的过程:
一条sql语句(以查询sql为例)的目的最终是将一个表或者若干个表中的所有行数据,一条一条的进行处理,最终生成一组目标记录。为了实现这样的目的,首先将处理过程分解为若干个算子,将初始的表数据记录依次通过这些算子来计算,最终得出结果。
例如:select a from tbl where b>1 order by c,对于这条sql,首先需要一个ts(table scan)算子,从表中读出数据,然后读出的数据经过一个fil(filter)算子,过滤那些不满足条件b>1的数据,最后经过一个fetch算 子,将正确的数据返回。对于任意复杂的sql语句都可以生成这样的算子树进行处理。
hive的原理还是比较复杂,一点点学习中,一口吃不成胖子 。。。

你可能感兴趣的:(hive)