`

Hive代码组织及架构简单介绍

 
阅读更多

hive三个主要组件

Serialzers/Deserialzers(trunk/serde)     此组件允许用户自己开发自定义序列化、反序列化文件解析器,hive自身也内置了一些序列化解析类。
MetaStore(trunk/metastore)     此组件是hive的元数据服务器,用来存放数据仓库中所有表和分区的信息,hive元数据建表sql、升级sql脚本都存放在此目录下。
Query Processor(trunk/ql)     此组件用于解析sql生成map/reduce作业,并按照先后顺序执行他们(hive核心包,熟读此包,可了解hive执行流程核心)。

其他组件

Command Line Interface(trunk/cli)     此组件用于处理命令行提交作业。
Hive Server(trunk/service)     此组件所有对外api接口的服务端(通过thrift实现),可用于其他客户端与hive交互,比如jdbc。   
Common(trunk/common)     hive基础代码库,hive各个组件信息的传递也是有此包HiveConf类来管理。
Ant Utilities(trunk/ant)     此组件包含一些ant任务需要的基础代码
Scripts(trunk/bin)     此组件包涵hive里的所有脚本,包括hive CLI的脚本。

hive辅助组件

trunk/conf     此目录包涵hive配置文件hive-default.xml、hive-site.xml
trunk/data     hive测试所用数据
trunk/ivy     管理hive跟hadoop各个版本之间的依赖
trunk/lib     hive运行期间依赖的jar
trunk/testlibs     用于构建单元测试

 Query Processor(hive核心,执行引擎)

Parse and SemanticAnalysis(ql/parse)     此组件主要用于编译sql->Abstract Syntax Trees抽象语法树->QB->Logical Plan->Physical Plan(hive 0.11多表join count(distinct)就在此步骤出错)

Optimizer (ql/optimizer)     基于规则,优化hive作业(not 基于cost),ColumnPruner:列裁剪,Predicate PushDown:谓词下推:将过滤操作推至TableScanOperator之后

Plan Components(ql/plan)     封装内置信息,用于compiler (Parser, SemanticAnalysis and Optimizer) 之间信息传递

MetaData Layer (ql/metadata) 连接hive元数据仓库,获得hive表、分区、列详细信息,用于编译sql语句

Map/Reduce Execution Engine (ql/exec)     执行提交的map/reduce作业

Hadoop Record Readers     hive提交hadoop作业时,文件输入输出工具

Hive Function Framework (ql/udf)     看名字就知道,hive内置udf

Compiler流程

hive编译过程执行流程图

  1. parse,语义分析, 通过antlr解析生成抽象语法树 Driver.compile()
  2. sa,类型检查与语义分析 SemanticAnalyzer.doPhase1Ctx()  。。。列名是否存在
  3. lpg,logic plan generator,查询块到逻辑操作数,SemanticAnalyzer.genPlan()。。。什么cube、rollup操作树都在这一步完工
  4. lpo,logic plan optimizer,逻辑计划优化,SemanticAnalyzer.optimizer()。。。列剪辑、谓语下推、分区剪辑等等
  5. ppg,physical plan generator,生成物理执行计划,SemanticAnalyzer.genMapRedTasks()
  6. ppo,physical plan optimizer,物理执行优化,PhysicalOptimizer.optimize()

hive多表join count(distinct)异常,是因为步骤3 lpg生成的逻辑执行计划有bug

附带hive执行流程图

Driver类是hive最重要的类,了解其run、compile、execute方法,就清楚hive的核心。 

参考文献

hive源码解析:http://blog.csdn.net/lpxuan151009/article/details/7956518

hive编译解析:http://blog.csdn.net/lalaguozhe/article/details/9339679

hive开发者指南:https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide

hive svn地址:http://svn.apache.org/repos/asf/hive/

分享到:
评论

相关推荐

    Hive 入门教程-Apache Hive入门介绍与HQL语法解析

    3. **获取 Hive 源码或可执行代码**:可以通过下载最新的发布包或从 Git 仓库克隆源代码。 4. **配置 Hive**:设置 Hive 如何连接到 Hadoop 和数据库。 5. **启动 Hive**:成功配置后,可以通过命令行界面启动 Hive...

    Laravel开发-hive

    Hive在Laravel中的作用在于提供了一种组织代码的策略。在六边形架构中,应用程序的核心(业务逻辑)被视为一个“岛屿”,周围环绕着“接口适配器”或“端口”。这些适配器负责与外部世界交互,如数据库、HTTP请求或...

    hive500多网盘链接学习包含代码

    【标题】"hive500多网盘链接学习包含代码" 涉及的主要知识点是Apache Hive,一个基于Hadoop的数据仓库工具,用于查询和管理大规模数据集。在这个学习资源中,你将能够深入理解Hive的核心功能和使用场景。 【描述】...

    hive窗口函数

    在处理具有层级关系的数据时,窗口函数可以帮助我们快速地构建出层次化的数据视图,例如按照组织架构层级来展示员工信息。 #### 三、基础窗口函数详解 本文将详细介绍SUM、AVG、MIN、MAX等基础函数,并通过具体的...

    hive安装资料手册.rar

    1. **hive.md**:这可能是一个关于Hive的基础介绍文档,涵盖了Hive的核心概念、架构、工作流程,以及与其他Hadoop组件的交互方式。它可能还包含了Hive的主要特性,如元数据管理、查询优化、数据分桶等。 2. **hive...

    presto-hive-0.67.zip

    它还支持Hive的分桶和分区策略,使得Presto能有效地利用Hive的数据组织方式。 5. **SQL语法**:Presto支持标准的SQL语法,同时也扩展了一些特性,如窗口函数、JOIN优化和复杂聚合操作,提供了一种熟悉的查询语言...

    hadoop的数据仓库hive手册

    - **简单的 SQL 查询**: Hive 定义了一种简单的类似 SQL 的查询语言——HiveQL,使得 SQL 用户能够轻松地查询和分析存储在 Hadoop 中的数据。 - **高度扩展性**: Hive 允许程序员利用 MapReduce 编写自定义的 mapper...

    Hive - A Warehousing Solution Over a Map-Reduce.pdf

    Hive建立在Hadoop之上,支持一种类似于SQL的声明式语言——HiveQL,使得用户能够通过简单的SQL语句来执行复杂的Map-Reduce任务。此外,HiveQL还允许用户插入自定义的Map-Reduce脚本,增强了其灵活性。Hive提供了一个...

    hive,阿帕奇蜂巢.zip

    这个“hive,阿帕奇蜂巢.zip”文件很可能是Hive的源代码或一个配置完整的Hive项目,供开发者研究、学习或部署。 **Hive的主要特点和功能** 1. **SQL-like查询语言**:Hive引入了HQL(Hive Query Language),一种...

    hive 表 dml 操作.zip

    在Hive中,DML主要包括INSERT、UPDATE、DELETE以及SELECT等操作,但需要注意的是,由于Hive的设计目标和架构,UPDATE和DELETE操作与传统SQL有所差异。 1. **INSERT**:这是最基础的数据插入操作。Hive 支持 INSERT ...

    基于Facebook的Hive开发

    本文将详细介绍Facebook如何利用Hive进行高效的数据管理和查询,并分享一些最新的特性和未来发展方向。 #### 什么是Hive? Hive是一种用于管理并查询结构化数据的系统,它构建在Hadoop之上,旨在为大数据提供高效...

    架构设计实践之路

    9. **可维护性与文档**:良好的代码组织结构、注释和规范化的命名有助于团队协作和后期维护。同时,编写详尽的架构设计文档可以帮助团队理解系统整体结构和决策依据。 以上就是“架构设计实践之路”中涵盖的主要...

    广州在线教育行业java架构师岗位介绍JD模板.pdf

    以下是对"广州在线教育行业Java架构师岗位介绍JD模板"的详细解读。 首先,让我们了解Java架构师的主要职责。作为Java架构师,你需要: 1. **主导架构设计和核心模块设计**:这要求你具备深厚的软件工程背景,能够...

    广州在线教育行业java架构师岗位介绍JD模板.docx

    3. **编写代码模板和维护核心模块**:创建和维护系统的核心代码,提高代码复用性和效率。 4. **技术方向和技术培训**:识别技术发展趋势,推动团队的技术进步,组织技术培训,提升团队整体技术水平。 5. **技术支持...

    淘宝数据仓库架构

    - **传统存储计算平台架构**:介绍了基于对节点的CPU/内存、磁盘、网络共享程度的不同架构类型,如完全共享、部分共享与完全不共享。 - **分布式平台设计理念**:强调了异构软硬件平台间的可移植性,以及硬件错误...

    大数据架构师岗位的主要职责概述.pdf

    最后,大数据架构师还负责大数据平台的持续优化,包括代码评审、架构调整和性能提升,以保证产品的可靠性和稳定性。他们指导开发团队进行数据模型的规划和分析模型的构建,分享技术经验,促进团队的技术成长。 综上...

    最好的大数据项目。用flume-kafaka-flume进行日志的读取,在hive设计数仓.zip

    在本项目中,Hive 被用于设计和构建数据仓库,对从 Kafka 中消费的日志数据进行存储和组织,便于后续的分析和挖掘。通过创建合适的表结构和分区策略,可以大大提高查询效率和数据管理的灵活性。 4. Java SpringBoot...

    大数据架构师职位主要职责概述.docx

    2. 技术熟练度:熟悉BI平台、大数据系统技术架构,掌握数据仓库、数据挖掘等相关技术,如Hadoop、Hive、Spark等。 3. 业务理解和洞察:具备制造企业数据分析能力,熟悉相关数据库技术。 4. 沟通与项目管理:需要良好...

    大数据架构师职位主要职责概述.pdf

    总结来说,大数据架构师在组织中扮演着数据资产的规划者和管理者,他们的工作涉及从数据的收集、处理、分析到最终的决策支持全过程,是推动企业数据驱动战略的关键人物。他们不仅需要深厚的理论知识,还需要实践经验...

Global site tag (gtag.js) - Google Analytics