区分 Hive on Spark 和 Spark on Hive

        我们从它们的架构、工作原理以及技术实现的不同来分析 Hive on Spark 和 Spark on Hive 的不同。以下是详细的解释,从底层原理到源码实现,通俗易懂:


1. 定义与概述

  • Hive on Spark
    Hive on Spark 是指使用 Spark 作为 Hive 的查询执行引擎。Hive 本质上是一个基于 Hadoop 的数据仓库工具,它将 SQL 转化为 MapReduce 作业运行。而 Hive on Spark 是用 Spark 替代 MapReduce,执行效率更高。

  • Spark on Hive
    Spark on Hive 是 Spark 的一个集成模式,在 Spark 应用中可以直接访问 Hive 的元数据和存储数据。它使得 Spark 作业能够查询和操作 Hive 中的数据,主要用来结合 Spark 的高性能计算能力和 Hive 的数据仓库管理能力。


2. 核心区别

特性Hive on SparkSpark on Hive
定位Hive 的执行引擎Spark 的 Hive 集成功能
主导框架Hive 是主导框架,Spark 是执行引擎Spark 是主导框架,Hive 提供元数据和存储支持
工作方式Hive 生成执行计划后由 Spark 运行作业Spark 应用直接调用 Hive 的元数据进行操作
实现目标提升 Hive 的查询性能在 Spark 中使用 Hive 元数据和 SQL 功能

3. 架构与底层原理分析

3.1 Hive on Spark
架构组成
  • Hive Metastore(元数据
    存储 Hive 的表结构、分区信息等元数据。

  • Query Compiler(编译)
    将 HiveQL(类 SQL)语句解析为逻辑执行计划,最终转化为 Spark 的 RDD(弹性分布式数据集)任务。

  • Spark Execution Engine(执行引擎)
    使用 Spark 的 DAG(有向无环图)执行物理计划,完成作业。

运行流程
  1. HiveQL 转换
    用户提交 HiveQL 查询语句,Hive 编译器将其转化为逻辑计划。

  2. 逻辑计划优化
    利用 Catalyst Optimizer 优化查询计划,包括谓词下推、投影下推等。

  3. 物理计划生成
    最终生成 Spark 的 RDD 作业计划,提交给 Spark 执行。

  4. Spark 执行
    Spark 将物理计划拆分为多个阶段(Stage),以任务(Task)的形式在集群中执行,并将结果返回给用户。

代码实现

在 Hive 源码中,hive-exec 模块对接 Spark:

  • SparkTask:负责将 Hive 的逻辑任务转换为 Spark 任务。
  • SparkJobExecHelper:封装 Spark 作业的提交与状态监控。
核心原理

Hive on Spark 的核心在于 Hive 的查询计划与 Spark 的计算模型的对接:

  • Hive 负责查询优化(逻辑计划层面),但不执行物理计算。
  • Spark 利用 DAG 提供高效的内存计算能力,代替传统 MapReduce 的磁盘 I/O 开销。

3.2 Spark on Hive
架构组成
  • Spark SQL
    Spark 的模块,用于处理 SQL 查询,支持 DataFrame 和 Dataset 操作。

  • Hive Metastore
    提供 Hive 的元数据,包括表结构、分区信息等。

  • Hive SerDe
    Hive 的序列化与反序列化库,用于解析 Hive 的表数据格式。

运行流程
  1. Spark 应用程序
    用户通过 Spark 的 SQL API 编写查询,调用 Hive 的表或元数据。

  2. 连接 Hive Metastore
    Spark 通过 Hive 的 JDBC 接口或 Metastore API 获取元数据。

  3. 数据读取与处理
    Spark 通过 Hive SerDe 解析 Hive 表数据,并转化为 Spark DataFrame 进行操作。

  4. 查询执行与优化
    Spark Catalyst Optimizer 优化查询,生成物理执行计划,由 Spark 执行。

代码实现

在 Spark 源码中,HiveSessionStateBuilder 负责构建与 Hive 的连接:

  • HiveExternalCatalog:访问 Hive 的元数据。
  • HiveClientImpl:与 Hive Metastore 通信。
核心原理

Spark on Hive 的关键在于 Hive 提供了元数据支持,而 Spark 负责执行与优化:

  • Spark Catalyst Optimizer 替代了 Hive 的查询优化器。
  • Spark 的数据处理能力与 Hive 的元数据存储结合,实现了高性能计算。

4. 举例说明

假设有一张名为 sales 的 Hive 表,存储 1TB 的销售数据。

Hive on Spark

用户提交 SELECT SUM(amount) FROM sales 查询:

  1. Hive 将查询转化为逻辑计划。
  2. Hive 将逻辑计划转化为 Spark 的物理执行计划。
  3. Spark 在集群中并行执行查询,计算结果返回给 Hive。

优势

  • 查询逻辑复杂时性能较高(优化 + 并行)。
  • 用户体验无缝,HiveQL 与 Spark 的无缝集成。
Spark on Hive

用户在 Spark 应用中写:

from pyspark.sql import SparkSessionspark = SparkSession.builder \.appName("SparkOnHive") \.config("hive.metastore.uris", "thrift://localhost:9083") \.enableHiveSupport() \.getOrCreate()df = spark.sql("SELECT SUM(amount) FROM sales")
df.show()

Spark 直接连接 Hive 的 Metastore,读取 sales 表的数据,通过 DataFrame API 完成计算。

优势

  • 更灵活的编程能力(支持 Python/Scala 等)。
  • 集成 Spark 的机器学习、图计算等生态。

5. 应用场景与选择

场景推荐模式
数据分析,已有 Hive 系统Hive on Spark
实时计算与分析Spark on Hive
高度依赖 HiveQL 查询Hive on Spark
需要结合 Spark 的生态(MLlib)Spark on Hive

6. 总结

Hive on Spark 和 Spark on Hive 是数据分析中的两种不同组合方式:

  • Hive on Spark 类似于让 Hive “跑得更快”,Spark 是它的“引擎”。
  • Spark on Hive 类似于让 Spark “看得更清楚(结构化)”,Hive 是它的“数据目录”。

理解两者的核心在于:

  • 谁是主框架(Hive 还是 Spark)。
  • 谁负责优化与执行(Hive 优化 vs Spark Catalyst)。
  • 如何连接元数据(Hive Metastore vs Spark Catalog)。

通过以上解释,相信你已经对两者有了清晰的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关注度上升,交易量直线上涨,Base Season 即将到来?

撰文:Zeneca 编译:Yangz,Techub News 译者按:凭借 AI 发币平台 Clanker 及 Virtuals 的爆火,行业对 Base 生态的关注出现「暴涨」。当地时间 11 月 26 日,Base 上的交易量直线拉升,达到约 1136…

安能物流 All in TiDB 背后的故事与成果

导读 在数字化转型的浪潮中,安能物流通过技术创新不断提升物流效率,迈出了全链路 All in TiDB 的重要一步。本文将深入探讨安能物流如何选择 TiDB 作为核心数据库,以应对高并发、数据处理能力和系统可扩展性等挑战。通过 TiDB 的弹性扩展能力…

《深入理解经典广度优先遍历算法》

广度优先遍历:宽度优先遍历(Breadth-First Search, BFS), 图论和树论中基本的查找搜索算法, 是广大图算法的基础.。 前置知识和介绍 数据结构: 队列, 双端队列。 二叉树:经典bfs,按层bfs(即树的层序遍历)。…

FPGA工具链及功能介绍

一、处理流程 把verilog等源码,变为FPGA中可执行的比特流文件,主要包含这些步骤: 步骤功能转译将verilog代码转化为更详细的语法,增加更多细节内容技术映射将每个vrilog用到的模块,对应到FPGA的物理器件上优化优化冗余…

『python爬虫』使用docling 将pdf或html网页转为MD (保姆级图文)

目录 预览效果安装下载模型测试代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 预览效果 支持转化pdf的表格 安装 Docling 本身是专注于文档转换的工具,通常用于将文件(如 PDF&…

超详细ensp配置VRRP和MSTP协议

一、简介 1、什么是VRRP: (1)VRRP(Virtual Router Redundancy Protocol)的概念: VRRP(Virtual Router Redundancy Protocol)指的是一种实现路由器冗余备份的协议,常用于…

【案例学习】如何使用Minitab实现包装过程的自动化和改进

Masimo 是一家全球性的医疗技术公司,致力于开发和生产各种行业领先的监控技术,包括创新的测量、传感器和患者监护仪。在 Masimo Hospital Automation 平台的助力下,Masimo 的连接、自动化、远程医疗和远程监控解决方案正在改善医院内外的护理…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中,结构体(struct)和联合体(union) 是常用的复合数据类型,它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法,包括对齐规则、内存分配方…

中科亿海微SoM模组——波控处理软硬一体解决方案

本文介绍的波控处理软硬一体解决方案主要是面向相控阵天线控制领域,波控处理通过控制不同天线组件的幅相来调整天线波束的方向和增益,实现高精度角度控制和高增益。本方案由波控处理板、波控处理控制软件算法和上位机软件共同构成。波控处理SoM模组原型样…

Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解

文章目录 前言一、简单工厂(静态工厂)1、概述2、代码实现3、优缺点 二、工厂方法模式1、概述2、代码实现3、优缺点 三、抽象工厂模式1、概述2、代码实现3、优缺点 四、总结 前言 先看个案例:【手机和手机店】在没有工厂的时候,手…

【阅读记录-章节4】Build a Large Language Model (From Scratch)

文章目录 4. Implementing a GPT model from scratch to generate text4.1 Coding an LLM architecture4.1.1 配置小型 GPT-2 模型4.1.2 DummyGPTModel代码示例4.1.3 准备输入数据并初始化 GPT 模型4.1.4 初始化并运行 GPT 模型 4.2 Normalizing activations with layer normal…

关于VNC连接时自动断联的问题

在服务器端打开VNC Server的选项设置对话框,点左边的“Expert”(专家),然后找到“IdleTimeout”,将数值设置为0,点OK关闭对话框。搞定。 注意,服务端有两个vnc服务,这俩都要设置ide timeout为0才行 附件是v…

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络 0. 前言1. 卷积神经网络基本概念1.1 卷积1.2 步幅1.3 填充1.4 激活函数1.5 池化 2. 使用 Keras 构建卷积神经网络3. CNN 层的问题4. 模型泛化小结系列链接 0. 前言 卷积神经网络 (Convolution…

使用 Docker Compose 来编排部署LMTNR项目

使用 Docker Compose 来部署一个包含 Linux、MySQL、Tomcat、Nginx 和 Redis 的完整项目的例子。假设我们要部署一个简单的 Java Web 应用,并且使用 Nginx 作为反向代理服务器。 项目目录结构 首先需要确保 Docker 和docker-compose已经安装并正在运行。docker --v…

快速理解倒排索引在ElasticSearch中的作用

一.基础概念 定义: 倒排索引是一种数据结构,用来加速文本数据的搜索和检索,和传统的索引方式不同,倒排索引会被每个词汇项与包含该词汇项的文档关联起来,从而去实现快速的全文检索。 举例: 在传统的全文…

跨平台应用开发框架(3)-----Qt(样式篇)

目录 1.QSS 1.基本语法 2.QSS设置方式 1.指定控件样式设置 2.全局样式设置 1.样式的层叠特性 2.样式的优先级 3.从文件加载样式表 4.使用Qt Designer编辑样式 3.选择器 1.类型选择器 2.id选择器 3.并集选择器 4.子控件选择器 5.伪类选择器 4.样式属性 1.盒模型 …

Pump Science平台深度剖析:兴起、优势、影响与未来

在过去的几个月里,人们越来越关注去中心化科学(DeSci)。DeSci 是一种利用区块链技术进行科学研究的新方法。传统的科学研究经常面临所谓的“死亡之谷”,这指的是基础科学研究与成功开发和造福患者的实施之间的重要时期。DeSci 旨在…

网安瞭望台第4期:nuclei最新poc分享

国内外要闻 多款 D-Link 停产路由器漏洞:攻击者可远程执行代码 近日,知名网络硬件制造商 D-Link 发布重要安全公告。由于存在严重的远程代码执行(RCE)漏洞,其敦促用户淘汰并更换多款已停产的 VPN 路由器型号。 此次…

TDengine在debian安装

参考官网文档&#xff1a; 官网安装文档链接 从列表中下载获得 Deb 安装包&#xff1b; TDengine-server-3.3.4.3-Linux-x64.deb (61 M) 进入到安装包所在目录&#xff0c;执行如下的安装命令&#xff1a; sudo dpkg -i TDengine-server-<version>-Linux-x64.debNOTE 当…

Mybatis集成篇(一)

Spring 框架集成Mybatis 目前主流Spring框架体系中&#xff0c;可以集成很多第三方框架&#xff0c;方便开发者利用Spring框架机制使用第三方框架的功能。就例如本篇Spring集成Mybatis 简单集成案例&#xff1a; Config配置&#xff1a; Configuration MapperScan(basePack…