当前位置: 首页 > news >正文

Spark九:Spark调优之Shuffle调优

Spark shuffle调优方法

map端和reduce端缓存大小设置,reduce端重试次数和等待时间间隔,以及bypass设置
学习资料:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ

一、map和reduce端缓冲区大小

1.1 map端

在Spark任务运行过程中,如果shuffle的map端处理的数据量比较大,但是map端缓冲的大小是固定的,可能会出现map端缓冲数据频繁spill溢写到磁盘文件中的情况,使得性能非常低下。
通过调节map端缓冲的大小,可以避免频繁的磁盘IO操作,进而提升Spark任务的整体性能。


map端缓冲的默认配置是32KB,如果每个task处理640kb数据,那么会发生640/32=20次溢写,如果每个task处理64000KB数据,则发生2000次溢写,这对于性能的影响是非常重要的。
map端缓冲的配置方法

val conf = new SparkConf().set("spark.shuffle.file.buffer", "64")

1.2 reduce端

Spark Shuffle过程中,shuffle reduce task的buffer缓冲区大小决定了reduce task每次能够缓冲的数据量,也就是每次能够拉取的数据量,如果内存资源较为充足,适当增加拉取数据缓冲区的大小,可以减少拉取数据的次数,也就可以减少网络传输的次数,进而提升性能


reduce端数据拉去缓冲区的大小可以通过spark.reducer.maxSizeInFlight设置,默认为48M,设置方法:

val conf = new SparkConf().set("spark.reducer.maxSizeInFlight", "96")

二、reduce端重试次数和等待时间间隔

2.1 重试次数

Spark Shuffle过程中,reduce task拉取属于自己的数据时,如果因为网络异常等原因导致失败会自动进行重试。对于那些包含了特别耗时的shuffle操作的作业,建议增加重试最大次数(比如60次),以避免由于JVM的full gc或者网络不稳定等因素导致的数据拉取失败。在实践中发现,对于针对超大数据量(数十亿~上百亿)的shuffle过程,调节该参数可以大幅度提升稳定性。


reduce端拉取数据重试次数可以通过spark.shuffle.io.maxRetries参数设置,该参数就代表了可以重试的最大次数。如果在指定次数之内拉取还是没有成功,就可能会导致作业执行失败,默认为3,该参数的设置方法如下:

val conf = new SparkConf().set("spark.shuffle.io.maxRetries", "6")

2.2 增大等待时间间隔

Spark Shuffle过程中,reduce task拉取属于自己的数据时,如果因为网络异常等原因导致失败会自动进行重试,在一次失败后,会等待一定的时间间隔再进行重试,可以通过加大间隔时长(比如60s),以增加shuffle操作的稳定性
reduce端拉取数据等待间隔可以通过spark.shuffle.io.retryWait参数进行设置,默认值为5s,该参数的设置方法如下:

val conf = new SparkConf().set("spark.shuffle.io.retryWait", "60s")

三、bypass机制开启阈值

对于SortShuffleManager,如果shuffle reduce task的数量小于某一阈值,则shuffle write过程中不会进行排序操作,而是直接按照未经优化的HashShuffleManager的方式去写数据,但是最后会将每个task产生的所有临时磁盘文件都合并成一个文件,并会创建单独的索引文件。

当使用SortShuffleManager且不需要排序操作,建议将SortShuffleManager参数调大,大于shuffle read task的数量,那么此时map-side就不会进行排序了,减少了排序的性能开销,但是这种方式下,依然会产生大量的磁盘文件,因此shuffle write性能有待提高。


可以通过spark.shuffle.sort.bypassMergeThreshold这个参数设置,默认200。

val conf = new SparkConf().set("spark.shuffle.sort.bypassMergeThreshold", "400")

相关文章:

Spark九:Spark调优之Shuffle调优

Spark shuffle调优方法 map端和reduce端缓存大小设置,reduce端重试次数和等待时间间隔,以及bypass设置 学习资料:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、map和reduce端缓冲区大小 1.1 map端 在Spark任务运行过程中&…...

linux c多线程优先级

在 Linux 系统中,可以使用 pthread_setschedparam 函数来设置线程的优先级。该函数需要传入一个指向 pthread_t 类型的线程 ID,以及一个指向 struct sched_param 类型的结构体对象。struct sched_param 结构体包含了线程的优先级信息。 下面是一个示例代…...

Redis在项目开发中的应用

Spring Boot集成Redis构建博客应用 在这个示例中&#xff0c;我们将展示如何使用Spring Boot和Redis构建一个简单的博客应用&#xff0c;包括文章发布、点赞和评论功能。 1. 添加依赖 首先&#xff0c;我们需要在pom.xml文件中添加Spring Boot和Redis的依赖项。 <!-- Sp…...

mapper向mapper.xml传参中文时的乱码问题

1.起因&#xff1a; 在idea中进行模糊查询传参时&#xff0c;发现在idea中查中文查不出记录&#xff0c;在navicate中可以查出来。 2.猜测&#xff1a; 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…...

基于Docker官方php:7.1.33-fpm镜像构建支持67个常见模组的php7.1.33镜像

实践说明&#xff1a;基于RHEL7(CentOS7.9)部署docker环境(23.0.1、24.0.2)&#xff0c;所构建的php7.1.33镜像应用于RHEL7-9(如AlmaLinux9.1)&#xff0c;但因为docker的特性&#xff0c;适用场景是不限于此的。 文档形成时期&#xff1a;2017-2023年 因系统或软件版本不同&am…...

Type-C PD充电器受电端sink诱骗取电汇总:小家电应用5V9V12V15V20V28V

小家电产品、美容产品、电动产品等升级采用Type-C接口&#xff0c;在Type-C接口上使用Type-C取电芯片&#xff0c;即可使用快速充电器的5V、9V、12V、15V、20V供电&#xff0c;无需再配充电器&#xff0c;各类品牌的充电器都可以支持。目前充电器常见的USB-PD功率为&#xff1a…...

禁用code server docker容器中的工作区信任提示

VSCode 添加受限模式&#xff0c;主要是防止自动运行代码的&#xff0c;比如在vscode配置的task和launch参数是可以运行自定义代码的。如果用VScode打开未知的工程文件就有可能直接运行恶意代码。 但是当我们的实验基础模板文件可控的情况下&#xff0c;要想禁用code server do…...

JSON格式插件-VUE

JsonEditor 安装&#xff1a; npm i bin-code-editor -S引入&#xff1a; import Vue from vue; import CodeEditor from bin-code-editor; import bin-code-editor/lib/style/index.css; import App from ./App.vue; Vue.use(CodeEditor); new Vue({el: #app,render: h > …...

dubbo的springboot集成

1.什么是dubbo&#xff1f; Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo …...

【人工智能】智能电网:未来能源的革命

未来能源的革命 智能电网革命的意义在于将电力行业从传统的集中式发电和集中式输配电模式转变为智能化、分布式、互动式的能源网络。 现在我们从以下方面详细认真的了解一下智能电网&#xff1a; 智能变电站&#xff0c;智能配电网&#xff0c;智能电能表&#xff0c;智能交互…...

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画&#xff0c;从以下角度&#xff0c;依据表格内容梳理&#xff0c;表格如下&#xff1a; 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…...

JS 高频面试题

JS 的数据类型有哪些&#xff0c;有什么区别 基本数据类型&#xff08;Undefined、Null、Boolean、Number、String、Symbol&#xff09; 引用数据类型&#xff08;对象、数组和函数&#xff09; 区别&#xff1a; 原始数据类型直接存储在栈&#xff08;stack&#xff09;中的简…...

linux—多服务免密登录

文档结构 概念简介配置操作 概念简介 配置操作 场景&#xff1a;在部署gp集群时&#xff0c;希望 master 节点可以使用gpadmin用户可以实现免密登录 slave1和 slave2 节点&#xff1b; step_1: IP映射 xx.xx.xx.101 server-slave1 xx.xx.xx.102 server-slave2说明&#x…...

【MySQL】数据库之MHA高可用

目录 一、MHA 1、什么是MHA 2、MHA 的组成 3、MHA的特点 4、MHA的工作原理 二、有哪些数据库集群高可用方案 三、实操&#xff1a;一主两从部署MHA 1、完成主从复制 步骤一&#xff1a;完成所有MySQL的配置文件修改 步骤二&#xff1a;完成所有MySQL的主从授权&#x…...

ffmpeg 改变帧率,分辨率,时长等命令

ffmpeg -i elva.mp4 -ss 00:00:20 -t 00:00:30 -c:v copy -c:a copy output1.mp4 视频截取&#xff0c;开始时间和时长,-ss 00:00:20 -t 00:00:30 ffmpeg -i output1.mp4 -c:v libx265 output265.mp4 -c:v libx265,264转265 ffmpeg -i output1.mp4 -c:v libx264 output264.mp4 …...

烟火检测AI边缘计算智能分析网关V4在安防项目中的应用及特点

一、行业背景 随着社会和经济的发展&#xff0c;公共安全和私人安全的需求都在不断增长。人们需要更高效、更准确的安防手段来保障生命财产安全&#xff0c;而人工智能技术正好可以提供这种可能性&#xff0c;通过智能监控、人脸识别、行为分析等手段&#xff0c;大大提高了安防…...

有效的回文

常用方法就是双指针。使用两个指针从字符串的两端向中间移动&#xff0c;同时比较对应位置的字符&#xff0c;直到两个指针相遇。由于题目忽略非字母和非数字的字符且忽略大小写&#xff0c;所以跳过那些字符&#xff0c;并将字母转换为小写&#xff08;或大写&#xff09;进行…...

Electron快速上手

Electron 目录 简介 打包简单的html/css/javascript项目 打包Vue2项目 打包Vue3项目 简介 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows…...

华为“纯血”鸿蒙加速进场 高校、企业瞄准生态开发新风口

近日&#xff0c;华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出&#xff0c;开启华为终端未来大发展的新十年。 他特别提到&#xff0c;未来要构建强大的鸿蒙生态&#xff0c;2024年是原生鸿蒙的关键一年&#xff0c;将加快推进各类鸿蒙原生应用的开发…...

抖音百科怎么创建?头条百科的规则和技巧

在玩抖音的时候&#xff0c;不知道注意到抖音的搜索结果没有&#xff0c;有时候会去搜索框搜索一个品牌或人物名称&#xff0c;搜索框下面翻几下大概率就会出现百科词条&#xff0c;这个词条就是抖音百科。抖音的百科属于头条百科&#xff0c;因为这两个平台都属于字节跳动旗下…...

嵌入式AI开发实战:从MCU到模型部署全流程

1. 嵌入式AI开发实战&#xff1a;从入门到项目落地作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我深知AI技术给这个传统行业带来的变革。记得2018年第一次接触基于MCU的简单图像识别时&#xff0c;那种"原来嵌入式设备也能做AI"的震撼感至今难忘。如今&…...

Python胶水代码变高性能引擎(Mojo原生编译实战手记)

第一章&#xff1a;Python胶水代码变高性能引擎&#xff08;Mojo原生编译实战手记&#xff09;Python 以其简洁语法和丰富生态成为数据科学与系统集成的“胶水语言”&#xff0c;但其解释执行机制常在数值计算、实时推理等场景遭遇性能瓶颈。Mojo 作为新兴的系统级编程语言&…...

STM32危化品管理系统设计与实现

1. 项目背景与需求分析实验室危化品管理一直是科研机构面临的重要挑战。传统的人工记录方式存在效率低下、容易出错、无法实时监控等问题&#xff0c;尤其对于易燃、易爆或有毒化学品的管理更是隐患重重。我曾参与过多个高校实验室的安全改造项目&#xff0c;亲眼见过因管理不善…...

屏幕取色与设计辅助工具 ColorWanted:提升设计师与开发者工作效率的专业解决方案

屏幕取色与设计辅助工具 ColorWanted&#xff1a;提升设计师与开发者工作效率的专业解决方案 【免费下载链接】ColorWanted Screen color picker for Windows (Windows 上的屏幕取色器) 项目地址: https://gitcode.com/gh_mirrors/co/ColorWanted 你是否曾遇到这样的工作…...

ARL灯塔扫不出指纹?手把手教你用Python脚本批量导入指纹库,提升资产识别准确率

ARL灯塔指纹识别优化实战&#xff1a;Python脚本批量导入与精准率提升指南 资产侦察灯塔&#xff08;ARL&#xff09;作为渗透测试领域的重要工具&#xff0c;其核心价值在于准确识别目标资产的技术特征。然而许多中级用户发现&#xff0c;默认指纹库在面对特定行业或新型资产…...

坚定信心,顺势而为 ——中国企业出海与人工智能时代语言服务行业的新机遇

坚定信心&#xff0c;顺势而为——中国企业出海与人工智能时代语言服务行业的新机遇前言人工智能技术的逐步成熟以及智能体的普遍应用是最近两三年的热点和趋势&#xff0c;很多人说&#xff0c;2026年是智能体爆发的元年。春节期间&#xff0c;豆包、千问、元宝等50亿元的红包…...

火山引擎语音合成SDK实战:从快速调用到高级参数调优

1. 火山引擎语音合成SDK初体验 第一次接触火山引擎的语音合成SDK时&#xff0c;我正为一个智能客服项目发愁。客户要求系统能够用不同音色、不同情感的语音播报订单状态&#xff0c;而市面上大多数TTS服务要么太贵&#xff0c;要么效果生硬。直到同事推荐了火山引擎的解决方案&…...

Keyv自定义序列化教程:超越JSON,支持更多数据类型

Keyv自定义序列化教程&#xff1a;超越JSON&#xff0c;支持更多数据类型 【免费下载链接】keyv jaredwray/keyv: 这是一个分布式键值存储库&#xff0c;用于在多个节点上存储数据。适合用于需要分布式存储和访问的场景。特点&#xff1a;易于使用&#xff0c;支持多种数据存储…...

LangChain + AgentRun 浏览器沙箱极简集成指南

AgentRun Browser Sandbox 介绍 什么是 Browser Sandbox? Browser Sandbox 是 AgentRun 平台提供的云原生无头浏览器沙箱服务,基于阿里云函数计算&#xff08;FC&#xff09;构建。它为智能体提供了一个安全隔离的浏览器执行环境,支持通过标准的 Chrome DevTools Protocol (…...

手把手教你用MCP+Selenium打造专属内容发布机器人(附避坑指南)

从零构建MCPSelenium自动化发布系统的实战指南 在当今内容为王的数字时代&#xff0c;如何高效管理多平台内容发布成为创作者和企业的核心需求。本文将带您深入探索如何利用MCP协议与Selenium技术栈&#xff0c;打造一个高度定制化的自动化内容发布系统&#xff0c;特别针对小红…...