Hive引擎底层初探

京东云开发者
• 阅读 255

1、什么是Hive

Hive是一个基于Hadoop的数据仓库工具,用于处理和分析大规模结构化数据。Hive提供了类似SQL的查询语言(HiveQL),使得熟悉SQL的用户能够查询数据。Hive将SQL查询转换为MapReduce任务,以在Hadoop集群上执行数据处理和分析。

2、Hive起源

回答这个问题之前,先介绍下Hadoop。Hadoop是专门为离线和大数据分析而设计的分布式基础架构。Hadoop的计算模型是MapReduce,将计算任务分割成多个处理单元,并将其分散到一群家用或服务级别的硬件机器上,从而降低成本。但是直接用MapReduce处理大数据会面临难题: •MapReduce开发需要具备较高的底层细节知识,开发难度大,学习成本高 •使用MapReduce框架开发,项目周期长,成本高

在此背景下Hive应运而生。Hive是基于Hadoop的一个数据仓库工具,本质是将SQL转换成MapReduce任务进行运算。将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,极大降低用户使用难度。

3、Hive架构 3.1 基本组成部分

Hive的架构是一个复杂的系统,通过用户接口、元数据存储、驱动器和Hadoop集群等多个组件的协同工作,实现了对大规模数据的高效存储和查询处理。其架构图如下图所示。

  •用户接口模块

这是用户与Hive进行交互的主要方式。Hive提供了多种用户接口,包括CLI(命令行接口)、Client(客户端)、WUI(Web用户界面)以及JDBC/ODBC(允许Java或其他编程语言通过JDBC或ODBC访问Hive)。通过这些接口,用户可以执行HQL(Hive查询语言)语句,进行数据的查询、分析和管理。

BDP平台将页面的SQL转换成SHELL脚本,调用CLI来启动Hive引擎。

 

  •元数据模块

Hive是将数据文件映射成一张表,元数据模块主要负责描述和管理数据存储、表结构、分区信息等,通常存储在关系型数据库中,如MySQL或Derby。

 

 •驱动器(Driver)

驱动器是Hive的核心组件,主要作用是将HiveQL语句转换成一系列的MapReduce(MR)作业。驱动器中包含了解析器、编译器、优化器和执行器等多个子组件。解析器将用户的HQL查询语句转换为抽象语法树(AST),编译器将AST编译成逻辑执行计划,优化器对逻辑计划进行优化,最后执行器将优化后的计划转换成可以运行的物理计划并执行。



  •Hadoop集群

Hive是建立在Hadoop上的数据仓库基础构架,因此Hadoop集群是Hive架构的重要组成部分。Hive使用Hadoop的分布式文件系统(HDFS)进行数据存储,利用Hadoop的MapReduce框架进行大规模数据的计算和处理。

 3.2 Hadoop

Hadoop是开源的分布式存储和计算系统,旨在处理大规模数据集。它最初由Apache软件基金会开发,现已成为处理大数据的行业标准之一。Hadoop主要包括以下核心组件:HDFS、MapReduce。 3.2.1 分布式文件系统(HDFS)

HDFS是Hadoop的分布式文件系统,用于存储大规模数据集。它将数据分布存储在集群中的多台服务器上,通过数据冗余存储来提供容错性和高可靠性。 ◦高可靠性

HDFS它将文件数据划分为多个数据块,并在集群中的多个节点上进行复制存储。每个数据块默认会有多个(通常是三个)副本存储在不同的节点上。这种冗余存储机制确保了即使某个节点或副本发生故障,数据仍然可以从其他副本中恢复,从而保证了数据的高可靠性。 ◦HDFS架构

HDFS采用了主从架构,包括一个NameNode和多个DataNode。NameNode负责管理文件系统的命名空间和元数据信息,而DataNode负责存储实际的数据块。 ◦读取文件的过程: 1.客户端向NameNode请求获取文件,并对请求进行检查。 2.如果请求检查通过,NameNode将查询元数据,向客户端返回文件所在的各个Block的DN地址。 3.客户端拿到DN列表之后,按照Block,根据负载规则请求一台服务器,建立通道读取数据。 4.DN接收到请求后,向客户端传输Block内容。 5.获取到的内容,存入本地缓存,然后写入到输出目标中。

  3.2.2 分布式计算框架(MapReduce)

MapReduce是Hadoop的分布式计算框架,用于在大规模数据集上执行并行计算任务。它将计算任务分解为多个独立的子任务,然后在集群中的多台计算节点上并行执行这些子任务。MapReduce包括Map阶段和Reduce阶段 ,2个阶段。 ◦Map阶段将原始数据分解为更小的数据单元,这些单元可以被并行处理,且彼此之间没有太多依赖。 ◦Reduce阶段则对Map阶段生成的中间结果进行汇总,以得到最终的处理结果。

  4、Hive工作流程

Hive是一个建立在Hadoop之上的数据仓库系统,它提供了类似于SQL的查询语言(HiveQL),使用户可以在大规模数据集上执行查询和分析操作。下面是Hive的工作流程:

1.解析HiveSQL: ◦当用户提交一个HiveSQL查询时,Hive的解析器首先会解析这个查询,将其转换成一个抽象语法树(AST)。 ◦解析器会检查SQL语法的正确性,并将SQL语句的各个部分(如SELECT、FROM、WHERE等)转换为相应的内部表示。 2.语义分析: ◦语义分析阶段会检查查询的语义正确性,确保所有引用的表、列和函数都存在且有效。 ◦在这个阶段,Hive还会获取表的元数据,如列的数据类型、表的分区信息等,为后续的计划生成做准备。 3.生成逻辑执行计划: ◦接下来,Hive会根据解析和语义分析的结果,生成一个逻辑执行计划。这个计划描述了查询的执行步骤,但不涉及具体的物理操作。 ◦逻辑计划通常包括一系列的操作,如扫描表、过滤数据、聚合数据等。 4.逻辑计划优化: ◦在生成逻辑计划后,Hive会对其进行优化,以提高查询的执行效率。 ◦优化可能包括重写查询、消除冗余操作、选择更有效的连接策略等。 5.生成物理执行计划: ◦优化后的逻辑计划会被转换为物理执行计划。物理计划描述了如何在Hadoop集群上实际执行查询。 ◦在这个阶段,Hive会决定将哪些操作映射到MapReduce任务上,以及如何在集群中分配这些任务。 6.执行MapReduce任务: ◦根据物理执行计划,Hive会启动MapReduce任务来执行查询。任务读取的数据来自HDFS。 ◦Map阶段通常负责读取数据并进行一些基本的处理,如过滤和转换。 ◦Reduce阶段则负责聚合数据并生成最终结果。 7.返回结果: ◦当所有MapReduce任务完成后,Hive会收集并整理结果,然后将其返回给用户。

 

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
hive(02)、数据仓库Hive的基本使用
       在上篇《hive(01)、基于hadoop集群的数据仓库Hive搭建实践(https://my.oschina.net/zss1993/blog/1602402)》一文中我们搭建了分布式的数据仓库Hive服务,本文主要是在上文的基础上结合Hadoop分布式文件系统,将结构化的数据文件映射为一张数据库表,将sql语句转换为MapRedu
Stella981 Stella981
3年前
Spark SQL重点知识总结
一、SparkSQL的概念理解SparkSQL是spark套件中一个模板,它将数据的计算任务通过SQL的形式转换成了RDD的计算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。SparkSQL的特点:1、和SparkCore的无缝集成,可以在写整个RDD应用的时候,配
Stella981 Stella981
3年前
Hive Transaction 事务性 小试
  提到Hive一般都会想到,Hive是数据仓库,支持类SQL查询,有很多语法支持,可以嵌套MR,写Transform、写UDF/UDAF等,但是,不支持更新操作。所以Hive的常见也一般都是一次写入,频繁读取。从Hive0.13开始,加入了ACID的新feature,但是0.13的时候还不支持insert、update和delete操作,我也
Stella981 Stella981
3年前
Hive SQL使用过程中的奇怪现象
hive是基于Hadoop的一个数据仓库工具,用来进行数据的ETL,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。HiveSQL是一种类SQL语言,与关系型数据库所支持的SQL语法存在微小的差异。本文对比MySQL和Hive所支持的SQL语法,发现相同的SQL语句在
Stella981 Stella981
3年前
Kylin使用Spark构建Cube
ApacheKylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBayInc.开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。下面是单机安装采坑记,直接上配置和问题解决。找一台干净的机器,把hadoophivehbase从原有节点分别拷贝一
Stella981 Stella981
3年前
Hive和HBase有哪些区别与联系及适用场景
hiveHive是运行在Hadoop上的一个工具,准确地讲是一个搜索工具。当对海量数据进行搜索时,Hadoop的计算引擎是MapReduce。但是对MapReduce的操作和编程是非常复杂的。于是Hive的存在就让复杂的编程过程简化成了用SQL语言对海量数据的操作。这大大减轻了程序员的工作量。可以说,Hive的存在让海量数据的增删改查更加方便。
Stella981 Stella981
3年前
Hive和SparkSQL:基于 Hadoop 的数据仓库工具
Hive前言Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,将类SQL语句转换为MapReduce任务执行。!image(https://oscimg.oschina.net/oscnet/3ca2e844a74c7004d3281eeec5
Stella981 Stella981
3年前
Hive 和普通关系数据库的异同
1.查询语言。由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。2.数据存储位置。Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS(https://www.oschina.net/act
3A网络 3A网络
2年前
5 步教你将 MRS 数据导入 DWS
5步教你将MRS数据导入DWSMapReduce服务(MapReduceService,简称MRS)是一个基于开源Hadoop生态环境而运行的大数据集群,对外提供大容量数据的存储和分析能力,可解决用户的数据存储和处理需求。用户可以将海量业务数据,存储在MRS的分析集群,即使用Hive/Spark组件保存。Hive/Spark的数据
京东云开发者 京东云开发者
10个月前
《Hive编程指南》读书笔记
前言:最近刚接触写HiveSQL,却发现许多查询的执行速度远不如预期。为了提升查询效率,我去阅读了《Hive编程指南》,希望通过理解其底层机制来找到优化的方式,并为未来能编写出高效的SQL奠定基础。谨以此文做个记录。一、Hive因何而生先有Hadoop再有