首页 > 其他分享 >Hive引擎底层初探

Hive引擎底层初探

时间:2025-01-22 14:53:38浏览次数:1  
标签:存储 MapReduce Hive Hadoop 初探 查询 数据 底层

作者:京东物流 沈世莹

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会收集并整理结果,然后将其返回给用户。

 

标签:存储,MapReduce,Hive,Hadoop,初探,查询,数据,底层
From: https://www.cnblogs.com/Jcloud/p/18685992

相关文章

  • 03垃圾回收篇(D1_垃圾收集器算法底层导论)
    目录一、为什么我们要去了解垃圾收集和内存分配二、对象已死?1.引用计数算法2.可达性分析算法3.再谈引用4.生存还是死亡5.回收方法区三、垃圾收集算法1.简介2.分代收集理论2.1.弱分代/强分代假说2.2.前面两代假说的缺陷3.标记-清除算法(Mark-Sweep)4.标......
  • python装饰器底层原理
    什么是装饰器装饰器是Python中的一种特殊函数,主要用于修改或扩展其他函数或方法的功能,而无需修改函数本身的代码。它们通常通过在函数定义前加上@装饰器名称来使用。@decorator_functiondefmy_function():pass​  装饰器的基本结构一个基本的装饰器包含一个函......
  • Redis数据库笔记——ZSet的底层实现(跳表)
    大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍ZSet数据类型中跳表的底层实现,包括基本特点和常用操作。文章目录ZSet(有序集合)概述基本特点底层实现Skiplist跳表概述结构跳表的基本操作1.查找操作:`Search`2.插入操作:`Insert`3.删......
  • 开源软件运动初探:开启智能新时代
    文档格式不支持HTML标记代码显示,请以如下形式阅读和理解以下文本:</novalue>开源软件运动初探:开启智能新时代(由一位热衷于技术进步与创新的研究者撰写)一、前言:在信息爆炸的21世纪,数字化浪潮已深刻影响了社会生活的各个方面。其中,开源软件运动以其独特的理念和模式成为了这......
  • 智能电网初探:开启智能新时代
    您似乎在询问如何使用HTML创建一个包含多个段落和标题的网页。尽管我无法直接提供完整的网站生成代码,但我可以展示一个基本框架以展示如何使用HTML来完成这一需求:```html 智能电网初探:开启智能新时代随着科技的进步,各行各业都在进行数字化转型。而“智慧能源”的概念在近年......
  • C++ STL 初探:打开标准模板库的大门
    文章目录C++STL初探:打开标准模板库的大门前言第一章:什么是STL?1.1标准模板库简介1.2STL的历史背景1.3STL的组成第二章:STL的版本与演进2.1不同的STL版本2.2STL的影响与重要性第三章:为什么学习STL?3.1从手动编写到标准化解决方案3.2泛型编程的核心3.3STL......
  • 多项式算法初探:从 FFT 到 FWT(目前只有FFT)
    多项式一向是算法竞赛中相当博大精深的东西,作为一个蒟蒻,我将会以最大的努力完成这篇记录,以防自己以后看不懂qwq。FFT(快速傅里叶变换)FFT是一种可以在\(O(n\logn)\)的时间内完成多项式乘法的算法。这个算法的劣势在于精度。我将会从复数、DFT、FFT和IFFT四个部分完成对......
  • 【详解】Hive怎样写exist/in子句
    目录Hive怎样写exist/in子句1.EXISTS子句示例2.IN子句示例3.EXISTSvsIN示例场景使用​​EXISTS​​子句示例1:查找有订单的客户使用​​IN​​子句示例2:查找有订单的客户性能考虑示例3:查找没有订单的客户使用​​NOTEXISTS​​使用​​NOTIN​......
  • 一文让你对mysql索引底层实现明明白白
    作者:京东零售韩航云开篇:图片是本人随笔画的,有点粗糙,望大家谅解,如有不对的地方,请联系本人,感谢一、索引到底底是什么.索引是帮助mysql高效获取数据的排好序的数据结构.索引是存储在文件里的.数据结构:二叉树HASHBTREE  如果没有索引的话,循环一条一条的找,找一次就是一......
  • 【0388】Postgres内核 SQL function 删除 physical replication slot 底层实现( 4 )
    文章目录1.概述2.`SQLfunction`2.1待删除`physicalreplicationslot`2.2检查当前用户权限2.3检查`Postgres`服务配置3.删除`physicalreplicationslot`3.1获取先前创建的`slot`3.1.1获取`slot`3.1.1初始化`active_pid`3.2永久删......