`
superlxw1234
  • 浏览: 552186 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44533
社区版块
存档分类
最新评论

Hive的原理与不足

    博客分类:
  • hive
阅读更多

转自:http://yuntai.1kapp.com/?p=1035

 

架构

1

 

  • 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);

相应物理查询计划:

2

不足

执行引擎

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)去节省不必要的内存拷贝,从而又带来了性能提升。

 

分享到:
评论
1 楼 cc3514772b 2013-09-01  
limit无法和sort融合起来,很多情况下,用堆排序来融合limit与sort会更加高效
见https://issues.apache.org/jira/browse/HIVE-3562  觉得不好为什么不自己去改??

相关推荐

    Hive原理与实现

    ### Hive原理与实现 #### 一、Hive的概述与意义 Hive 是一个构建于 Hadoop 之上的数据仓库工具,它提供了类 SQL 的查询语言(HQL),使得用户可以方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集...

    用于Hive原理与技术开发的数据集之stocks.csv

    用于Hive原理与技术开发的数据集

    Hive原理及使用笔记(精华版)

    Hive的核心原理是将HiveQL查询语句转换为一个或多个MapReduce作业来执行。Hive处理的数据存储在Hadoop的分布式文件系统(HDFS)中,分析数据时底层实现依赖于MapReduce,而执行程序则在YARN(Yet Another Resource ...

    hive原理1介绍

    ### Hive原理介绍 #### Hive概述 Hive是一个构建在Hadoop之上的数据仓库工具,它主要解决了Hadoop中数据管理的复杂性问题。通过将结构化的数据文件映射为一张数据库表,Hive提供了SQL查询的功能,使得数据分析人员...

    hive的原理分析

    这里详细的介绍了hive的原理,形象的分析了hive的原理,流程

    大规模数据查询Hive及Impala技术原理及架构.pdf

    ### 大规模数据查询Hive及Impala技术原理及架构 #### 第一部分:Hive数据查询分析技术和实例介绍 **一、Hive简介** Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户轻松地将结构化数据文件映射为表,并利用 ...

    hive原理及查询优化

    学习掌握hive原理及查询优化的必备之书学习掌握hive原理及查询优化的必备之书

    用于Hive原理与技术开发的数据集之dividends.csv

    用于Hive原理与技术开发的数据集

    HiveSQL编译原理

    HiveSQL编译原理是大数据处理领域中的一个重要概念,它主要涉及到如何将用户提交的SQL语句转换为可执行的MapReduce或者Tez任务。在Hadoop生态系统中,Hive作为一个基于HDFS的数据仓库工具,提供了对大规模数据集进行...

    大数据hive实现原理.zip_hive中怎么更新数据

    在《大数据hive实现原理.pdf》和《hive底层就是mapreduce.txt》中,你将找到更多关于Hive如何利用MapReduce执行查询和更新数据的细节,包括数据的分区策略、优化技巧以及Hive与Hadoop生态系统的交互等内容。...

    Hive优化以及执行原理

    Hive作为一个大数据处理工具,广泛应用于数据仓库和分析领域。其优化和执行原理是提高查询效率的关键,以下将深入探讨这两个方面。...同时,随着Hive与其他计算框架如Spark的融合,其执行效率和灵活性也在不断提升。

    hive实现原理

    ### Hive实现原理详解 #### 一、Hive简介与应用场景 Hive 是一款基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能,使 MapReduce 编程更加简单,更具通用性。Hive ...

    Hive 优化以及执行原理

    本篇将深入探讨Hive的优化策略及其执行原理。 一、Hive 优化策略 1. **表分区**:分区是Hive优化的基础,通过将大表划分为小的逻辑部分,可以显著提高查询速度。合理的分区策略应基于查询中常用的过滤条件,例如...

    龙战于野大数据MR原理启动hive查询表分区.docx

    Hive查询表分区的MR原理启动详解 Hive是一款基于Hadoop的数据仓库工具,主要用于处理结构化和半结构化的数据。MR(MapReduce)是Hadoop中的一种编程模型,用于处理大规模数据。在Hive中,MR原理启动是指使用...

    大数据技术基础实验报告-Hive安装配置与应用.doc

    【大数据技术基础实验报告-Hive安装配置与应用】 在大数据处理领域,Apache Hive是一个非常重要的组件,它提供了基于Hadoop的数据仓库工具,用于数据查询、分析以及存储。本实验报告将详细阐述如何安装、配置Hive,...

    Hive 简明教程.pdf

    Hive 简明教程 第一部分:完全以日常使用为目标...所以第二部分主要内容是Hive 原理与优化。 第三部分:讲解Hive 的一系列技术细节,以满足技术人员想了解技术细节的要求,为能更加 高效和灵活地使用Hive 提供技术基础

    Hive SQL 编译过程详解

    - **Distinct的实现原理**:对于单个Distinct字段,Hive会在Map阶段将Group By字段与Distinct字段组合成key,通过Reduce阶段的LastKey机制去重。而对于多个Distinct字段,可以通过两种方法实现:一是使用Hash去重,...

    HiveSQL编译原理.pdf

    Hive的核心原理讲解,主要讲述Hive解析编译SQL语句,生成执行计划的过程。文档涉及关键代码说明。

    Hive总结.docx

    【Hive原理】 Hive是基于Hadoop平台的数据仓库解决方案,它主要解决了在大数据场景下,业务人员和数据科学家能够通过熟悉的SQL语言进行数据分析的问题。Hive并不存储数据,而是依赖于HDFS进行数据存储,并利用...

Global site tag (gtag.js) - Google Analytics