`
Yinny
  • 浏览: 292764 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

hive原理(未完。。)

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



以下图片摘自淘宝周忱《hive原理》的技术文档







解释器、编译器、优化器完成 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的原理还是比较复杂,一点点学习中,一口吃不成胖子 。。。
  • 大小: 40.5 KB
  • 大小: 26.1 KB
  • 大小: 27.9 KB
  • 大小: 37.5 KB
  • 大小: 38.7 KB
分享到:
评论
1 楼 秦时明月黑 2014-09-01  
你是做大数据开发还是java研发

相关推荐

Global site tag (gtag.js) - Google Analytics