Hive 架构

Hive 架构
图上显示了Hive的主要组件以及与Hadoop的关系。如图所示,Hive的主要部件是:
UI 用户提交查询和其他的操作。当前系统有一个命令行的接口和基于Web的的GUI
Driver 接受query的组件,该组件实现session的概念,以处理和提供基于JDBC/ODBC执行以及颉取的API。
编译器 该组件分析query,在不同的查询块和查询表达式上进行语义分析,并最终通过从metastore中查找表与分区的元信息生成执行计划
Metastore 此组件存储数据仓库里所有的各种表与分区的结构化信息,包括列与列类型信息,序列化器与反序列化器,从而能够读写hdfs中的数据
执行引擎 此组件执行由compiler创建的执行计划。此计划是一个关于阶段的有向无环图。执行引擎管理不同阶段的依赖关系,并在合适的系统组件上执行这些阶段

Hive 查询语言
HiveQL是一个类SQL的查询语言。它模仿SQL语法来创建表,读表到数据,并查询表。HiveQL也允许用户嵌入他们自定义的map-reduce脚本。这些脚本能用任何支持基于行的流式接口的语言写-从标准输入读入并写到标准输出。这种灵活性也有一定的代价:即字符串的转换带来的性能损失。尽管如此,我们看到用户似乎不介意于此,他们自己实现这些脚本。另一个特性是多表插入。在此构造下,用户可以在相同的数据上通过一条HiveQL执行多query。Hive优化这些query,从而能共享输入数据的扫描,这样就增加了这些query的几个数量级的吞吐量。
编译器
Parser 将query string转换成解析树的表示
Semantic Analyser 解析树转换成query的内部表示,仍然是基于语句块的而非操作树。此阶段中,列名被校验,*通配符扩展被执行。类型检查和任何隐式的类型转换也在此阶段做。如果是一个分区表,这也是一个普遍的情况,所有该表的表达式被收集起来,这样它们就能用于修剪不需要的分区。如果query有一些制定的样例,它也会被收集起来以被后用
逻辑计划生成器 将query的内部表示转换为逻辑计划,它是一棵操作符树。一些操作符是关系代数符-如filter join等。但有些是hive特有的并被转为一系列的map reduce工作。如reduceSink操作符在mapreduce边界出现。此步也包括对plan做变换以提高性能-如将一系列的join转换为多路join,执行map端的部分的groupby聚集,执行两阶段内的groupby以避免如下情形:当groupingkey出现数据倾斜时一个reducer变成瓶颈。每个操作符包括一个可序列化的描述符。
查询计划生成器 - 将逻辑计划转换为一系列的map-reduce任务。操作符树被递归的遍历,从而它们被打散为一系列mapreduce序列化的可被mapreduce框架与hadoop hdfs接收的任务。reduceSink 操作符是mapreduce的边界,它的描述符包含归减键。reduceSink 的描述符里的归减键被用作mapreduce边界的归减键。如果query被指定了样例与分区,该计划也会包含它们。该计划然后被序列化到一个文件中。
优化器
更多的计划转换会有优化器来做。优化器是一个演化组件。当前,它的规则是:列修剪,谓词下压。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值