hive原理(未完。。)

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

[img]http://dl.iteye.com/upload/attachment/0078/9485/bb576368-2e11-399a-bfec-8a823a19f3bf.jpg[/img]

以下图片摘自淘宝周忱《hive原理》的技术文档[img]http://dl.iteye.com/upload/attachment/0078/9466/55e0efee-4fc1-3938-b002-319d3ed4b524.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0078/9464/ba9e0d90-0bbb-3da2-8443-afceedca7b6a.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0078/9487/ea2023a7-aa9a-3429-90f7-88ad55489f27.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0078/9489/8a541cca-dd2d-3a62-9ee7-8377d7c959c9.jpg[/img]

解释器、编译器、优化器完成 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语句都可以生成这样的算子树进行处理。
[color=violet]hive的原理还是比较复杂,一点点学习中,一口吃不成胖子 :cry: 。。。[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值