Spark学习(8)-SparkSQL的运行流程,Spark On Hive

news2025/1/12 9:00:08

1. SparkSQL的运行流程

1.1 SparkRDD的执行流程回顾

在这里插入图片描述

1.2 SparkSQL的自动优化

RDD的运行会完全按照开发者的代码执行, 如果开发者水平有限,RDD的执行效率也会受到影响。而SparkSQL会对写完的代码,执行“自动优化”, 以提升代码运行效率,避免开发者水平影响到代码执行效率。这是因为:
RDD:内含数据类型不限格式和结构。
DataFrame:100% 是二维表结构,可以被针对SparkSQL的自动优化,依赖于Catalyst优化器。

1.3 Catalyst优化器

为了解决过多依赖Hive的问题,SparkSQL使用了一个新的SQL优化器替代Hive中的优化器,这个优化器就叫Catalyst,整个SparkSQL架构大致如下:
在这里插入图片描述

  1. API层简单的说就是Spark会通过一些API接受SQL语句。
  2. 收到SQL语句以后。将其交给Catalyst,Catalyst负责解析SQL,生成执行计划。
  3. Catalyst的输出应该是RDD的执行计划。
  4. 最终交给集群运行。

具体流程如下:
在这里插入图片描述

第一步:解析sql,并生成AST(抽象语法树)

在这里插入图片描述

第二步:在AST中加入元数据信息

主要为了优化,例如col=col这样的条件,下面是一个简略图:
在这里插入图片描述

第三步:对已经加入元数据的AST,输出优化器,进行优化

从两种常见的优化开始,简单介绍:
在这里插入图片描述
断言下推
将Filter这种可以减少数据集的操作下推,放在Scan的位置,这样可以减少操作时候的数据量。比如第一步中的sql,正常流程是先做JOIN再做WHERE。断言下推后,会先过滤age,然后再join,减少join的数据量提高性能。
列值裁剪
在断言下推后执行裁剪,由于people表之上的操作只用到了id列,所以可以将其他的列裁减掉,这样可以减少处理的数据量,从而优化处理速度,如下图:
在这里插入图片描述

第四步:AST生成物理计划,然后再生成RDD

上面的过程生成的AST其实最终没有办法直接运行,AST叫做逻辑计划,结束后需要生成物理计划,从而生成RDD来运行。
在生成物理计划的时候,会经过成本模型对整棵树再次执行优化,选择一个更好的计划。在生成物理计划后,因为会考虑到性能问题,所以会使用代码生成,在机器运行。
可以使用queryExecution方法查看逻辑执行计划,使用explain方法查看物理执行计划。
在这里插入图片描述
总结
Catalyst的优化大致分为两点:

  1. 谓词下推\断言下推:将逻辑判断提到前面,减少shuffle阶段的数据量,简单地说就是行过滤,提前执行where
  2. 列值裁剪:将加载的列进行裁剪,减少被处理的数据宽度,简单地说就是列过滤,提前规划select字段数量

列值裁剪有一种非常适合的存储系统:parquet。

1.4 SparkSQL的执行流程

在这里插入图片描述

  1. 提交sparkSQL代码
  2. catalyst优化
    • 生成原始AST语法树
    • 标记AST元数据
    • 进行断言下推和列值裁剪,以及其他方面的优化作用在AST上
    • 得到最终的AST,然后生成执行计划
    • 将执行计划翻译为RDD代码
  3. Driver执行环境入口构建(SparkSession)
  4. DAG调度器规划逻辑任务
  5. TASK调度区分配逻辑任务到具体的Executor上工作并监控管理任务。
  6. worker干活

2 Spark On Hive

2.1 原理

回顾Hive组件

对于Hive来说,核心的是:

  • SQL优化翻译器(执行引擎),翻译SQL到MapReduce,并提交到Yarn执行。
  • MetaStore元数据管理中心

Spark On Hive

  • 问题
    对于Spark来说,自身是一个执行引擎,但是Spark自己没有元数据管理功能,当我们执行sql的时候,spark有能力将其转成RDD提交,但是sql中涉及到的数据在哪里,有什么字段,字段类型,Spark无法知晓。
    在SparkSQL代码中,可以写SQL,那是因为表来自DataFrame注册的。DataFrame中有数据,字段,类型,使得Spark可以用来翻译成RDD。
  • 解决方案
    Spark提供执行引擎能力,Hive的MetaStore提供元数据管理能力,让Spark和MetaStore连接形成Spark On Hive。

2.2 配置

根据原理,就是Spark能够连接上hive的metastore即可。所以首先需要启动metastore,然后Spark需要配置Metastore的IP端口号。

步骤1:在Spark的conf目录中,创建hive-site.xml,内容如下:

在这里插入图片描述

步骤2:将mysql的驱动jar放在Spark的jars目录

因为需要连接元数据,会有部分功能连接到mysql。

步骤3:hive配置metastore相关服务

hive配置文件目录内有:hive-site.xml
在这里插入图片描述

步骤4:启动hive的metastore服务

在这里插入图片描述

步骤5:测试

在这里插入图片描述

2.3 在代码中集成

前提:确保metastore服务启动好的
在这里插入图片描述

3 分布式SQL执行引擎

3.1 概念

Spark中有一个服务,叫ThriftServer,可以启动并监听10000端口。这个服务对外提供功能,我们可以用数据库工具或者代码连接,直接写sql可以操作Spark。
在这里插入图片描述
当使用ThriftServer后,相当于是一个持续性的Spark On Hive集成模式,它提供10000端口,持续对外提供服务,外部可以通过这个端口连接上来,写sql,让Spark运行。

3.2 配置

确保:配置好Spark on Hive,启动了ThriftServer。
在这里插入图片描述

3.3 客户端工具连接

在这里插入图片描述

3.4 代码JDBC连接

我使用的是远程Python解释器,同时要使用pyhive的包来操作。
为了安装pyhive包 需要安装一些Linux软件,可以执行如下命令:
在这里插入图片描述
安装好前置依赖后,安装pyhive包
在这里插入图片描述
代码测试
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

In-Context Learning玩法大全

卷友们好,我是rumor。虽然ChatGPT在大众眼里的热度可能已经过去了,但它prompt出了我的焦虑,于是最近一直在补大模型相关的工作。比起小模型,大模型有一个很重要的涌现能力(Emergent ability)就是In-Context…

CORS 跨域资源共享 与 JSONP

CORS 1、接口的跨域问题 我们使用express编写的 GET 和 POST接口,存在一个很严重的问题:不支持跨域请求。 解决接口跨域问题的方案主要有两种: CORS(主流的解决方案,推荐使用)JSONP(有缺陷的…

excel查重技巧:如何用组合函数快速统计重复数据(下)

数据源照旧,如下图所示,要求统计出不重复的客户数:在上期我们掌握了破解公式的方法后,今天我们再来看看计算不重复数据个数的第二个公式套路。套路2:COUNT和MATCH的组合这个公式的难度就稍微有点大了,一起看…

Word控件Spire.Doc 【Table】教程(3):如何在C#、VB.NET中设置Word表格样式

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

聊聊帮助别人这件事--爱摸鱼的美工(12)

年近了,上班途中依然匆忙 看女孩子们渐渐开始倒腾 做了新发型,做了美美的指甲 换上了新衣服,买了新包 电话里讨论着 去哪里过年,买什么年货 好像以前的我也这样 今年挣得少了,不想添新衣(不能) …

基于QWidget和QImage的水印添加实现

目录 1. 基于QWidget的屏幕阅读水印的添加 1.1 平铺 1.1.1 核心代码 1.1.2 构造函数中设置透明度和鼠标穿透 1.1.3 调用 1.1.4 效果展示 1.2 指定位置添加水印 1.2.1 核心代码 1.2.2 设置水印透明度和鼠标穿透 1.2.3 调用 1.2.4 效果展示 2、基于QImage的屏幕水印的…

QT 学习笔记(十四)

文章目录一、TCP/IP 通信过程简介1. Socket 通信2. Linux 下的 TCP/IP 通信过程3. QT 下的 TCP/IP 通信过程3.1 在 QT 中实现 TCP/IP 服务器端通信的流程3.2 客户端通信流程二、TCP/IP 通信过程操作实现1. 服务器端2. 客户端三、服务器端和客户端实现代码1. 主函数 main.c2. 服…

重装系统重新分区方法教程

对电脑进行系统重装以后,若是想电脑使用起来更稳定舒适,就要对电脑硬盘进行系统分区,但是许多用户都不知道怎样分区,今天小编就来为大家详细介绍一下重装系统重新分区方法教程。 工具/原料: 系统版本:win1…

11 个非常实用的 Python 和 Shell 拿来就用脚本实例!

我工作中用到的几个脚本,主要分为:Python和Shell两个部分。 Python 脚本部分实例:企业微信告警、FTP 客户端、SSH 客户端、Saltstack 客户端、vCenter 客户端、获取域名 ssl 证书过期时间、发送今天的天气预报以及未来的天气趋势图&#xff…

Verilog语法笔记(夏宇闻第三版)-赋值语句和块语句

目录 赋值语句: (1).非阻塞(Non_Blocking)赋值方式( 如 b < a; ): (2).阻塞(Blocking)赋值方式( 如 b a; ): 例&#xff1a; 块语句&#xff1a; 顺序块&#xff1a; 例&#xff1a; 并行块&#xff1a; 例&#xff1a; ​编辑 块名&#xff1a; 起始时间和结束…

php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02

php运算符&#xff0c;类型转换&#xff0c;打印输出语句相较于其他语言的特殊部分php运算符php的类型转换php打印输出语句php运算符 1.php运算符与其他高级语言相同的部分 算术运算符&#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff09;&#xff0…

使用Flask快速部署PyTorch模型

对于数据科学项目来说&#xff0c;我们一直都很关注模型的训练和表现&#xff0c;但是在实际工作中如何启动和运行我们的模型是模型上线的最后一步也是最重要的工作。 今天我将通过一个简单的案例&#xff1a;部署一个PyTorch图像分类模型&#xff0c;介绍这个最重要的步骤。 …

OAK-PoE设备故障排查详解

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

Linux小黑板(5):磁盘与文件系统

"这月蹦迪没我" 一、浅谈磁盘 磁盘作为计算机硬件里&#xff0c;唯一的机械设备。在数据存储的领域&#xff0c;有着不可磨灭的作用。相较于&#xff0c;保持通电情况下具有保持数据的不丢失的内存&#xff0c;磁盘能够"永久性"地存储 数据。 磁盘是计算机…

1. R语言介绍、Rstudio的基本使用、【R包的安装与使用】、帮助命令、内置数据集

课程视频链接&#xff1a;https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频&#xff0c;笔记顺序做了些调整【个人感觉逻辑顺畅】&#xff0c;并删掉一些不重要的内容 系列笔记目录【持续更新】&#xff1a;https://blog.csdn.net/weixin_42214698/category_…

【Linux】进程控制:父进程与子进程

目录1 进程创建1.1 认识fork1.2 进程创建的目的1.3 写时拷贝1.4 进程创建失败的场景2 进程退出2.1 进程退出状态2.2 进程退出的方式2.3 exit、_exit、return2.3.1 概念2.3.2 区别3 进程等待3.1 理解进程等待3.2 进程等待的方式3.2.1 wait和waitpid3.2.2 status位图结构3.3 阻塞…

【一起从0开始学习人工智能0x04】python相关AI复习【超全面】【收藏】

基础小结 数据类型&#xff1a;Numbers、String、list、tuple、dict字符编码&#xff1a;可以直接.encode&#xff08;‘utf-8’&#xff09;、.decode(ascii)循环&#xff1a;for-in迭代器、whilelist列表-最频繁的数据类型。-完成大多数集合类的数据结构实现。它支持字符&am…

十六、状态管理——Vuex(4)

本章概要 表单处理Vuex 与组合 API模块 16.8 表单处理 在表单控件上通常会使用 v-model 指令进行数据绑定&#xff0c;如果绑定的数据是 Vuex 中的状态数据&#xff0c;就会遇到一些问题。看以下代码&#xff1a; form.html <div id"app"><my-component&…

一场衍生于产业的深度变革正在上演,总结起来就是产业互联网的变革

毫无疑问的是&#xff0c;一场衍生于产业的深度变革正在上演。在这样一场深度变革之中&#xff0c;曾经看似无法改变的存在&#xff0c;有了进化的可能性&#xff1b;曾经让玩家们望而却步的领域&#xff0c;有了进军的可能性。如果对这样一场深度变革进行一次总结的话&#xf…

vanishing point detection in autopilot

1. 概述 消失点一种直观的解释是图像中的平行线的交点&#xff0c;也就如下图中路面边界绘制的直线在图像中的交点。 这样的点在自动驾驶场景下可以为解析车辆状态提供一些信息&#xff0c;比如较为常规的运用便是用于车辆的pitch角度。在传统方法中会通过如霍夫算子检测图片…