转自:http://yuntai.1kapp.com/?p=1035
架构
- UI:用户提交查询请求与获得查询结果。包括三个接口:命令行(CLI)、Web GUI(Hue)和客户端。
- Driver:接受查询请求与返回查询结果。实现了session的概念,以处理和提供基于JDBC/ODBC执行以及颉取的API。
- Compiler: 编译器,分析查询SQL语句,在不同的查询块和查询表达式上进行语义分析,并最终通过从metastore中查找表与分区的元信息生成执行计划。
- Metastore:元数据储存,元数据存储在MySQL或derby等数据库中。元数据包括Hive各种表与分区的结构化信息,包括列与列类型信息,序列化器与反序列化器,从而能够读写hdfs中的数据。
- Execution Engine:执行引擎,执行由compiler创建的执行计划。此计划是一个关于阶段的有向无环图。执行引擎管理不同阶段的依赖关系,通过MapReuce执行这些阶段。
执行流程
- 编译器将Hive SQL 转换成一组操作符(Operator)。
- 操作符是Hive的最小处理单元。
- 每个操作符处理代表一道HDFS操作或MapReduce作业。
- Hive通过ExecMapper和ExecReducer执行MapReduce任务。
编译过程
- Parser:分析器,将SQL转换成抽象语法树。
- Semantic Analyzer:语义分析,将抽象语法树转换成查询块。
- Logic Plan Generator:逻辑查询计划生成器,将查询块转换成逻辑查询计划,该计划是
一棵操作符树。
- LogicalOptimizer:逻辑查询计划优化器。
- Physical Plan Generator:物理查询计划生产器,将逻辑计划转成一些列的MR jobs。
- PhysicalOptimizer:物理查询计划优化器。
例子
HQL:
INSERT OVERWRITE TABLE access_log_temp2
SELECT a.user, a.prono, p.maker, p.price
FROM access_log_hbasea JOIN product_hbasep ON (a.prono= p.prono);
相应物理查询计划:
不足
执行引擎
Hive架构于MapReduce Framework之上,执行计划的灵活性较差,优化器可做的选择很少,例如:Join算法只有Grace Hash Join一种选择,性能更加优秀且稳定的Hybrid Hash Join则无法实现; Map端的Group-by算法只有Hash Group-by一种选择, Reduce端的Group-by只有sort group-by一种选择(不然MapReduce提供的sort就浪费了); limit无法和sort融合起来,很多情况下,用堆排序来融合limit与sort会更加高效。 Join, Group-by, Limit在OLAP,日志分析等任务中非常常用的Operator,而Hive在这3个Operator的实现上都依赖于MapReduce Frameowork提供的partition和sort,好处是实现比较简单,缺点是效率往往不是最优的。 然而,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现。
查询优化器
大多数商用数据仓库使用基于代价的优化器,在生成查询计划时,利用元数据中的统计信息估算每个operator要处理的数据量,选取代价较低的执行 计划。不过,这些商用数据仓库的都起步于基于规则的查询优化器,而Hive正处于这样一个类似的起步阶段。因而Hive查询优化器能做的优化并不多,仅限 于10几条转换规则。
索引和缓冲管理
对于查询来说,索引的作用至关重要,尽管Hive中的partition起到和索引类似的作用,但还比较初级,与并行数据仓库较为完善的索引 (primary,secondary, clustered, unclustered)还有很大差距。当然,Hive也没有缓冲区管理机制,只能依赖于文件系统的缓冲机制;传统的并行数据仓库往往禁用操作系统的缓冲 机制,针对不同的查询的特点设计了多种缓冲机制,从而优化了性能。
内存拷贝开销
内存拷贝会很大程度上拖累系统性能。我们可以注意到,Hive中所有的hash,比较,数值运算操作,都需要操作在Writable Object上,而每次重置(reset)这些Writable Object,都需要将数据从byte array拷贝到这些对象的byte[]成员中。在更精巧的实现中,很多内存拷贝其实是可以避免的,传统的并行数据仓库往往做了很多优化(甚至包含操作系 统内核的优化,比如Teradata的PDE)去节省不必要的内存拷贝,从而又带来了性能提升。
相关推荐
### Hive原理与实现 #### 一、Hive的概述与意义 Hive 是一个构建于 Hadoop 之上的数据仓库工具,它提供了类 SQL 的查询语言(HQL),使得用户可以方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集...
用于Hive原理与技术开发的数据集
Hive的核心原理是将HiveQL查询语句转换为一个或多个MapReduce作业来执行。Hive处理的数据存储在Hadoop的分布式文件系统(HDFS)中,分析数据时底层实现依赖于MapReduce,而执行程序则在YARN(Yet Another Resource ...
### Hive原理介绍 #### Hive概述 Hive是一个构建在Hadoop之上的数据仓库工具,它主要解决了Hadoop中数据管理的复杂性问题。通过将结构化的数据文件映射为一张数据库表,Hive提供了SQL查询的功能,使得数据分析人员...
这里详细的介绍了hive的原理,形象的分析了hive的原理,流程
### 大规模数据查询Hive及Impala技术原理及架构 #### 第一部分:Hive数据查询分析技术和实例介绍 **一、Hive简介** Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户轻松地将结构化数据文件映射为表,并利用 ...
学习掌握hive原理及查询优化的必备之书学习掌握hive原理及查询优化的必备之书
用于Hive原理与技术开发的数据集
HiveSQL编译原理是大数据处理领域中的一个重要概念,它主要涉及到如何将用户提交的SQL语句转换为可执行的MapReduce或者Tez任务。在Hadoop生态系统中,Hive作为一个基于HDFS的数据仓库工具,提供了对大规模数据集进行...
在《大数据hive实现原理.pdf》和《hive底层就是mapreduce.txt》中,你将找到更多关于Hive如何利用MapReduce执行查询和更新数据的细节,包括数据的分区策略、优化技巧以及Hive与Hadoop生态系统的交互等内容。...
Hive作为一个大数据处理工具,广泛应用于数据仓库和分析领域。其优化和执行原理是提高查询效率的关键,以下将深入探讨这两个方面。...同时,随着Hive与其他计算框架如Spark的融合,其执行效率和灵活性也在不断提升。
### Hive实现原理详解 #### 一、Hive简介与应用场景 Hive 是一款基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能,使 MapReduce 编程更加简单,更具通用性。Hive ...
本篇将深入探讨Hive的优化策略及其执行原理。 一、Hive 优化策略 1. **表分区**:分区是Hive优化的基础,通过将大表划分为小的逻辑部分,可以显著提高查询速度。合理的分区策略应基于查询中常用的过滤条件,例如...
Hive查询表分区的MR原理启动详解 Hive是一款基于Hadoop的数据仓库工具,主要用于处理结构化和半结构化的数据。MR(MapReduce)是Hadoop中的一种编程模型,用于处理大规模数据。在Hive中,MR原理启动是指使用...
【大数据技术基础实验报告-Hive安装配置与应用】 在大数据处理领域,Apache Hive是一个非常重要的组件,它提供了基于Hadoop的数据仓库工具,用于数据查询、分析以及存储。本实验报告将详细阐述如何安装、配置Hive,...
Hive 简明教程 第一部分:完全以日常使用为目标...所以第二部分主要内容是Hive 原理与优化。 第三部分:讲解Hive 的一系列技术细节,以满足技术人员想了解技术细节的要求,为能更加 高效和灵活地使用Hive 提供技术基础
- **Distinct的实现原理**:对于单个Distinct字段,Hive会在Map阶段将Group By字段与Distinct字段组合成key,通过Reduce阶段的LastKey机制去重。而对于多个Distinct字段,可以通过两种方法实现:一是使用Hash去重,...
Hive的核心原理讲解,主要讲述Hive解析编译SQL语句,生成执行计划的过程。文档涉及关键代码说明。
【Hive原理】 Hive是基于Hadoop平台的数据仓库解决方案,它主要解决了在大数据场景下,业务人员和数据科学家能够通过熟悉的SQL语言进行数据分析的问题。Hive并不存储数据,而是依赖于HDFS进行数据存储,并利用...