Spark新特性与核心概念

news2024/11/26 16:07:38

一、Sparkshuffle

        (1)Map和Reduce

        在shuffle过程中,提供数据的称之为Map端(Shuffle Write),接受数据的称之为Redeuce端(Shuffle Read),在Spark的两个阶段中,总是前一个阶段产生一批Map提供数据,下一阶段产生一批Reduce接收数据。

        (2)Shuffle管理器

        ①HashShuffleManager

        HashShuffleManager是Spark的一个组件,用于实现在节点之间进行数据分发和合并。它的主要作用是将数据进行随机哈希分区,然后将不同分区的数据发送到不同的节点上进行处理,最后将结果合并返回给调用方。HashShuffleManager的优点是能够高效地处理大规模数据集,同时保证数据的顺序性和数据安全性。它一共分为两种,一种有优化,一种无优化。

未经优化的HashShuffleManager

        优化后的和未优化的一致,不同点在于
        1. 在一个Executor内, 不同Task是共享Buffer缓冲区
        2. 这样减少了缓冲区乃至写入磁盘文件的数量, 提高性能

优化后的HashShuffleManager

        ②SortShuffleManager

        SortShuffleManager是Spark的一个组件,用于实现在节点之间进行数据分发和合并。与HashShuffleManager不同的是,SortShuffleManager使用的是排序方式进行数据分发和合并。相对于HashShuffleManager,SortShuffleManager的优点是能够更好地保证数据的有序性,减少数据倾斜的情况,提高数据处理效率。但是,SortShuffleManager需要进行排序操作,需要占用更多的计算资源和时间。因此,在不同的使用场景下,可以选择合适的ShuffleManager来实现数据分发和合并。

        SortShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是bypass运行机制。        

普通运行机制
bypass运行机制

        bypass运行机制的触发条件如下:
        (1)shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold=200参数的值。
        (2)不是聚合类的shuffle算子(比如reduceByKey)。
        同普通机制基本类同, 区别在于, 写入磁盘临时文件的时候不会在内存中进行排序而是直接写,最终合并为一个task一个最终文件。

        与普通模式IDE区别在于:
        第一,磁盘写机制不同。
        第二,不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销。

二、Spark3新特性概览

        (1)Adaptive Query Execution 自适应查询(SparkSQL)

        由于缺乏或者不准确的数据统计信息(元数据)和对成本的错误估算(执行计划调度)导致生成的初始执行计划不理想。在Spark3.x版本提供Adaptive Query Execution自适应查询技术,通过在”运行时”对查询执行计划进行优化,允许Planner在运行时执行可选计划,这些可选计划将会基于运行时数据统计进行动态优化,从而提高性能。
        Adaptive Query Execution AQE主要提供了三个自适应优化:
                ①动态合并Shuffle Partitions
                ②动态调整Join策略
                ③动态优化倾斜Join(Skew Joins)

        开启AQE方式:
        set spark.sql.adaptive.enabled = true;

        ①动态合并Dynamically coalescing shuffle partitions

        可以动态调整shuffle分区的数量。用户可以在开始时设置相对较多的shuffle分区数,AQE会在运行时将相邻的小分区合并为较大的分区。


        

        ②动态调整Join策略Dynamically switching join strategies
        此优化可以在一定程度上避免由于缺少统计信息或着错误估计大小(当然也可能两种情况同时存在),而导致执行计划性能不佳的情况。这种自适应优化可以在运行时sort merge join转换成broadcast hash join,从而进一步提升性能。

        ③动态优化倾斜Join
        skew joins可能导致负载的极端不平衡,并严重降低性能。在AQE从shuffle文件统计信息中检测至J任何倾斜后,它可以将倾斜的分区分割成更小的分区,并将它们与另一侧的相应分区连接起来。这种优化可以并行化倾斜处理,获得更好的整体性能。

        触发条件:
        1.分区大小> spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位数分区大小)"

        2.分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes (default = 256MB)

       ④AQE总结
        1.AQE的开启通过: spark.sql.adaptive.enabled设置为true开启。

        2.AQE是自动化优化机制,无需我们设置复杂的参数调整,开启AQE符合条件即可自动化应用AQE优化。

        3.AQE带来了极大的SparkSQL性能提升。

        (2)Dynamic Partition Pruning动态分区裁剪(SparkSQL)

        当优化器在编译时无法识别可跳过的分区时,可以使用"动态分区裁剪",即基于运行时推断的信息来进一步进行分区裁剪。这在星型模型中很常见,星型模型是由一个或多个并且引用了任意数量的维度表的事实表组成。在这种连接操作中,我们可以通过识别维度表过滤之后的分区来裁剪从事实表中读取的分区。在一个TPC-DS基准测试中,102个查询中有60个查询获得2到18倍的速度提升。

        (3)增强的Python APl: PySpark和Koalas

        Python现在是Spark中使用较为广泛的编程语言,因此也是Spark 3.0的重点关注领域。Databricks有68%的notebook命令是用Python写的。PySpark在 Python Package lndex上的月下载量超过500万。

        很多Python开发人员在数据结构和数据分析方面使用pandas APl,但仅限于单节点处理。Databricks会持续开发Koalas——基于Apache Spark的pandas API实现,让数据科学家能够在分布式环境中更高效地处理大数据。
        经过一年多的开发,Koalas实现对pandas API将近80%的覆盖率。Koalas每月PyPI下载量已迅速增长到85万,并以每两周一次的发布节奏快速演进。虽然Koalas可能是从单节点pandas代码迁移的最简单方法,但很多人仍在使用PySpark API,也意味着
PySpark API也越来越受欢迎。

三、Spark核心概述

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

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

相关文章

C语言_断言assert详解

一、assert定义 assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句: if(假设成立) {程序正常运行&…

PYTHON+CH341 3线SPI驱动UC1601 LCD实现汉字显示

前言 参考大佬用CH341驱动OLED,链接如下:GitHub - jimjiang2/ch341dll_wrap_typical_app: A ch341dll Wrap is for using in Python 32bits windows to access I2C SPI and MDIO (by GPIO), and Demo with display PC sreen on OLED by i2c or SPI . 本文主要实现了…

C++设计模式_17_Mediator 中介者

Mediator 中介者也是属于“接口隔离”模式。 文章目录 1. 动机 (Motivation)2. 模式定义3. 结构(Structure)4. 要点总结5. 其他参考 1. 动机 (Motivation) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系…

【python】pip的使用

切换默认源 pip config set global.index-url 源地址 查看切换源是否成功:pip config list 常用镜像源 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云:https://mirrors.aliyun.com/pypi/simple/豆瓣:https://pypi…

入学生活科研随笔

近而立之年,巅峰享受的时期有两段。一是高考后,收到入学通知书。早晨,八点多,我醒来在院子里看到,爸爸在门口和邮政快递员寒暄。那天应该是8月15号,清晨凉凉爽爽的,杨树遮住了大半个院子。第二段…

matlab中filter帮助文档中“对矩阵行进行滤波”的解释

1、创建向量 % 创建一个由随机输入数据组成的 215 矩阵。 rng("default") %固定随机数种子 x randi(5,2,6) 结果 x 5 1 4 2 5 1 5 5 1 3 5 5 2、定义有理传递函数的分子和分母系数。 b 1; a [1 -0.2]; 3、沿着…

MATLAB R2018b详细安装教程(附资源)

云盘链接: pan.baidu.com/s/1SsfNtlG96umfXdhaEOPT1g 提取码:1024 大小:11.77GB 安装环境:Win10/Win8/Win7 安装步骤: 1.鼠标右击【R2018b(64bit)】压缩包选择【解压到 R2018b(64bit)】 2.打开解压后的文件夹中的…

【开源】基于SpringBoot的天然气工程运维系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

【APUE】并发 — 信号

目录 一、异步与同步 二、信号的概念 三、signal 函数 3.1 函数原型 3.2 代码示例 四、信号的不可靠 五、可重入函数 反例1:函数内使用了静态数据 反例2:函数内使用了 malloc 或 free 反例3:函数内调用了标准 I/O 函数 六、标准…

基于鸡群算法的无人机航迹规划-附代码

基于鸡群算法的无人机航迹规划 文章目录 基于鸡群算法的无人机航迹规划1.鸡群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鸡群算法来优化无人机航迹规划。 1.鸡群搜索算法 …

Docker Harbor概述及构建

Docker Harbor概述及构建 一、Docker Harbor 概述1.1、harbor 简介1.2、Harbor的优势1.3、Harbor 的核心组件1.4、Docker私有仓库 架构 二、Harbor构建Docker私有仓库2.1 环境配置2.2、部署Harbor服务2.2.1、上传dock-compose,并设置权限2.2.2、安装harbor-offline-…

C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考…

springboot打包后运行失败

运行jar包,报错如下: 环境描述 win11, springboot项目,jdk1.8,IDEA2022.1.3, spring-boot-maven-plugin版本2.2.6.RELEASE。 idea能正常运行,也能正常打成jar包。但运行jar包出错,报错信息如上。 问题来…

七层负载均衡 HAproxy

一、HAproxy 1、负载均衡类型: (1) 无负载均衡: 没有负载均衡,用户直接连接到 Web 服务器。当许多用户同时访问服务器时,可能无法连接。 (2) 四层负载均衡: 用户访问负载均衡器,负载均衡器将用户的请求…

时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIMA-LSTM差…

关于数据中台的理解和思考

一、什么是数据中台 数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。把数据统一后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效的、可复用的服…

项目管理软件排行榜聚焦榜:选择最适合你的工具

在一个复杂的项目中,需要有一个好的项目管理软件来帮助协调资源、任务和时间表。然而,市场上有很多种不同的项目管理软件,每种软件都有其优点和缺点。本文综合 PCMag,Softwareworld,B2BSaaS Reviews 等产品测评网站的评…

windows下-mysql环境配置,以及使用navicat可视化数据库,便捷撰写sql语句。

文章目录 MySQL 连接到本地MySQL 下载MySQL连接基本SQL操作语句创建并查看数据库删除数据库修改数据库插入、删除、修改数据 图形化界面展示数据库 Navicat 基础操作连接本地的mysql数据库撰写sql语句 MySQL 连接到本地 MySQL 下载 直接系统自带应用商城下载,安装最…

【多线程面试题 一】、 创建线程有哪几种方式?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:创建线程有哪几种方式&a…

Vuex模块化(modules)与namespaced(命名空间)的搭配

Vuex模块化(modules)与namespaced(命名空间)的搭配 Vuex模块化(modules)格式 原理:可以对Vuex的actions,mutations,state,getters四个属性综合成一个部分&a…