大数据技术之Spark优化

第 1 章 Spark 性能调优

问:spark 优化

第一句:我们可以从性能,算子,shuffle 过程以及 jvm 四个方面展开优化。

1 常规性能调优

1.1 常规性能调优一:最优资源配置

Spark 性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。

资源的分配在使用脚本提交 Spark 任务时进行指定,标准的 Spark 任务提交脚本如下所示:

bin/spark-submit \
--class com.bigdata.spark.Analysis \
--master yarn
--deploy-mode cluster
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-核s 3 \
/usr/opt/modules/spark/jar/spark.jar \

结合项目,每一个任务都需要分配资源,这个时候可以适当说的少一些,对于比较大的指标,可以适当增加一些。知道什么是 driver 什么是executor。

可以进行分配的资源如表所示:

名称

说明

--num-executors

配置 Executor 的数量

--driver-memory

配置 Driver 内存( 影响不大)

--executor-memory

配置每个 Executor 的内存大小

--executor-核s

配置每个 Executor 的 CPU 核 数量

调节原则:尽量将任务分配的资源调节到可以使用的资源的最大限度。对于具体资源的分配,我们分别讨论 Spark 的两种Cluster 运行模式:

  • 第一种是 Spark Standalone 模式,你在提交任务前,一定知道或者可以从运维部门获取到你可以使用的资源情况,在编写 submit 脚本的时候,就根据可用的资源情况进行资源的分配,比如说集群有 15 台机器,每台机器为 8G 内存,2 个 CPU 核,那么就指定 15 个 Executor,每个 Executor 分配 8G 内存,2 个 CPU 核。
  • 第二种是 Spark Yarn 模式,由于 Yarn 使用资源队列进行资源的分配和调度,在编写submit 脚本的时候,就根据Spark 作业要提交到的资源队列,进行资源的分配,比如资源队列有 400G 内存,100 个 CPU 核,那么指定 50 个 Executor,每个 Executor 分配8G 内存,2 个 CPU 核。

对各项资源进行了调节后,得到的性能提升会有如下表现:

名称

解析

增加 Executor·个数

在资源允许的情况下,增加 Executor 的个数可以提高执行 task(任务) 的并行度。比如有 4 个Executor,每个 Executor 有 2 个 CPU 核,那么可以并行执行 8 个 task(任务),如果将 Executor 的个数增加到 8 个( 资源允许的情况下), 那么可以并行执行 16 个 task(任务), 此时的并行能力提升了一倍。

增加每个 Executor 的 CPU 核 个数

在资源允许的情况下,增加每个 Executor 的Cpu 核 个数, 可以提高执行 task(任务) 的并行度。比如有 4 个 Executor,每个 Executor 有 2 个CPU 核,那么可以并行执行 8 个 task(任务),如果将每个 Executor 的 CPU 核 个数增加到 4 个( 资源允许的情况下),那么可以并行执行 16个 task(任务), 此时的并行能力提升了一倍。

增加每个 Executor 的内存量

在资源允许的情况下,增加每个 Executor 的内存量以后, 对性能的提升有三点:

  1. 可以缓存更多的数据( 即对 RDD 进行 cache), 写入磁盘的数据相应减少, 甚至可以不写入磁盘, 减少了可能的磁盘 IO;
  1. 可以为 shuffle 操作提供更多内存,即有更多空间来存放 reduce 端拉取的数据,写入磁盘的数据相应减少,甚至可以不写入磁盘, 减少了可能的磁盘 IO;
  2. 可以为 task(任务) 的执行提供更多内存,在 task(任务) 的执行过程中可能创建很多对象,内存较小时会引发频繁的 GC, 增加内存后, 可以避免频繁的 GC, 提升整体性能。

补充:生产环境 Spark submit 脚本配置

bin/spark-submit \
--class com.bigdata.spark.WordCount \
--master yarn\
--deploy-mode cluster\
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-核s 3 \
--queue root.default \
--conf spark.yarn.executor.memoryOverhead=2048 \
--conf spark.核.connection.ack.wait.timeout=300 \
/usr/local/spark/spark.jar

参数配置参考值:

    • --num-executors:50~100
    • --driver-memory:1G~5G
    • --executor-memory:6G~10G
    • --executor-核s:3
    • --master:实际生产环境一定使用 yarn

1.2 常规性能调优二:RDD 优化

RDD 复用

在对RDD 进行算子时,要避免相同的算子和计算逻辑之下对RDD 进行重复的计算

对上图中的 RDD 计算架构进行修改, 得到如下图所示的优化结果:

RDD 持久化

在 Spark 中,当多次对同一个 RDD 执行算子操作时,每一次都会对这个 RDD 以之前的父 RDD 重新计算一次,这种情况是必须要避免的,对同一个 RDD 的重复计算是对资源的极大浪费,因此,必须对多次使用的 RDD 进行持久化,通过持久化将公共 RDD 的数据缓存到内存/磁盘中,之后对于公共RDD 的计算都会从内存/磁盘中直接获取 RDD 数据。对于RDD 的持久化,有两点需要说明:

  • RDD 的持久化是可以进行序列化的,当内存无法将 RDD 的数据完整的进行存放的时候,可以考虑使用序列化的方式减小数据体积,将数据完整存储在内存中。
  • 如果对于数据的可靠性要求很高,并且内存充足,可以使用副本机制,对 RDD 数据进行持久化。当持久化启用了复本机制时,对于持久化的每个数据单元都存储一个副本, 放在其他节点上面,由此实现数据的容错,一旦一个副本数据丢失,不需要重新计算,还可以使用另外一个副本。

你们公司的 rdd 持久化使用的哪种方案?九种选两种

RDD 尽可能早的 filter 操作

获取到初始 RDD 后,应该考虑尽早地过滤掉不需要的数据,进而减少对内存的占用, 从而提升 Spark 作业的运行效率。

1.3 常规性能调优三:并行度调节

Spark 作业中的并行度指各个 stage(阶段) 的 task(任务) 的数量。

如果并行度设置不合理而导致并行度过低,会导致资源的极大浪费,例如,20 个Executor,每个Executor 分配 3 个CPU 核,而 Spark 作业有 40 个 task(任务),这样每个 Executor 分配到的 task(任务) 个数是 2 个,这就使得每个 Executor 有一个CPU 核 空闲,导致资源的浪费。

理想的并行度设置,应该是让并行度与资源相匹配,简单来说就是在资源允许的前提下, 并行度要设置的尽可能大,达到可以充分利用集群资源。合理的设置并行度,可以提升整个Spark 作业的性能和运行速度。

一个Job由多个Stage构成,每个Stage都会转换成为一个 TaskSet【Task集合】集合,每个TaskSet中可以包含多个Task。

read --> map -->flatmap--reduceByKey-->foreach 等

整体是一个 job,分为两个 stage, (read-->map-->flatmap) 这是一个,剩余是另一个,因为遇到了 shuffle 算子。

read-->map-->flatmap 假如并行度是 3,有 3 个 task 任务,

剩余部分是另外的 task 任务,将来这些 task 任务会在 executor 中运行。你的 executor 有可能有好多个,每一个又有好多核数。

并行度如果不设置,是多少呢?默认官方说是 200 个,不要和 flink 的并行度混淆。

Spark 官方推荐,task(任务) 数量应该设置为 Spark 作业总CPU 核 数量的 2~3 倍。之所以没有推荐task(任务) 数量与CPU 核 总数相等,是因为 task(任务) 的执行时间不同,有的task(任务) 执行速度快而有的 task(任务) 执行速度慢,如果 task(任务) 数量与CPU 核 总数相等,那么执行快的 task(任务) 执行完成后,会出现 CPU 核 空闲的情况。如果 task(任务) 数量设置为CPU 核 总数的 2~3 倍,那么一个task(任务) 执行完毕后,CPU 核

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

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

相关文章

【 Manus平替开源项目】

文章目录 Manus平替开源项目1 OpenManus1.1 简介1.2 安装教程1.3 运行 2 OWL2.1 简介2.2 安装教程2.3 运行 3 OpenHands(原OpenDevin)3.1 简介3.2 安装教程和运行 Manus平替开源项目 1 OpenManus 1.1 简介 开发团队: MetaGPT 核心贡献者(5…

《Java SQL 操作指南:深入理解 Statement 用法与优化》

在 Java 数据库编程中,Statement 是用于执行 SQL 语句的接口,允许程序与数据库进行交互。本文将详细介绍 Statement 的基本概念、常见用法以及 PreparedStatement 和 CallableStatement 等相关接口。 1. Statement 基本介绍 Statement 接口继承了 AutoC…

FFMPEG录制远程监控摄像头MP4

手绘效果图 上图是录制功能的HTML前端页面,录制功能和解码视频放在一起。录制功能关键是录制(开始录制按钮)、停止录像按钮。当点击“录制”的时候则会开始录制MP4文件, 当点击停止的时候就会停止录制MP4。经过录制后,则会生成MP4,并放到我的RV1126的/tm…

数据类型及sizeof,进制转换

其实数据类型可以讲很多内容,这里看情况需要讲多久吧。 本篇基本都是理论。 目录 数据类型的分类 基本数据类型 构造数据类型 指针类型 空类型 计算数据类型或变量所占用的内存字节数 基本语法 进制转换 二进制 二进制的概念 二进制与十进制的转换 十六进…

网络安全之tcpdump工具

引言 wireshark是一款非常不错的抓包软件,在图形化界面占绝对统治地位;尽管其在字符界面下有些许选项可供使用,但终究不太方便,下面我再介绍一款NB的终端抓包工具 tcpdump 1、混杂模式 linux的网卡有混杂模式一说,当开…

建筑管理(2): 施工承包模式,工程监理,质量监督

文章目录 一. 施工承包模式1. 施工总承包模式1.1 施工总承包的特点1.2 施工总承包模式中的承包方 2. 平行承包模式3. 联合体与合作体承包模式 二. 工程监理1. 强制实行监理的工程范围1.1 国家重点建设工程1.2 大中型公用事业工程(重点)1.3 成片开发建设的住宅小区工程1.4 必须实…

[LeetCode热门100题]|137,260,268,面试17.19

1、137 只出现一次数字|| 1、题目描述 137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/ 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你…

MySQL中有哪几种锁?

大家好,我是锋哥。今天分享关于【MySQL中有哪几种锁?】面试题。希望对大家有帮助; MySQL中有哪几种锁? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中,锁是用来控制并发访问的机制,确…

外贸企业可以申请网络专线吗?

在对外业务不断扩大的情况下,外贸企业对网络的需求愈发迫切。稳定、快速的网络连接不仅是企业开展国际业务的基础,更是提升竞争力的关键。外贸企业是否可以申请网络专线?如何选择适合的外贸网络专线服务?本文将为您详细解答。 网络…

python笔记2

变量:含义 一个容器,计算机当中的存储空间。 可以理解为一个用于标识或引用数据的名字或标签。 作用: 可以通过定义一个变量来给需要使用多次的数据命名,就像一个标签一样。下次需要使用这个数据时,只需要通过这个变…

【算法】动态规划

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 持续更新中...1、常规动态规划Fibonacci数列杨辉三角最小花费爬楼梯孩子们的游戏 2、背包问题3、最长公共子序列4、最长递增子序列…

ECU BootLoader开发——Flash编程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

NetLink内核套接字案例分析

一、基础知识 Netlink 是 Linux 系统中一种内核与用户空间通信的高效机制,而 Netlink 消息是这种通信的核心载体。它允许用户态程序(如网络配置工具、监控工具)与内核子系统(如网络协议栈、设备驱动)交换数据&#xff…

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址,每次启动虚拟机服务都是不一样的 IP,因此要配置静态 IP 地址避免每次都发生变化,下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念: 动态 IP…

开源:LMDB 操作工具:lmcmd

目录 什么是 LMDB为什么编写 lmcmd安装方法如何使用 连接数据库命令列表 小结 1. 什么是 LMDB LMDB(Lightning Memory-Mapped Database)是一种高效的键值存储数据库,基于内存映射(memory-mapping)技术,提供…

进程管理:前后台切换

前后台切换 [rootxxx ~]# yum install -y xclock #安装xclock(这里是用来解释前后台) [rootxxx ~]# xclock -update 1 #前台运行(如果把1改成2,就是秒针两秒走动一次) [rootxxx ~]# xclock -update 1…

【CF】Day6——Codeforces Round 942 (Div. 2) BC + Codeforces Round 941 (Div. 2) C

B. Coin Games 题目: 思路: 虽然标签是博弈论,但我感觉更像一个找规律的思维题 由于题目告诉我们每次只能选U,那我们不妨来考虑选U会造成什么情况(以下都为选中间U) ①.UUU -3*U 此时选了U会导致两侧…

视频推拉流EasyDSS案例分析:互联网直播/点播技术与平台创新应用

随着互联网技术的快速发展,直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域,互联网直播/点播平台与技术的应用,不仅为用户带来了全新的购物体验,也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…

鸿蒙初级考试备忘

Module类型 Module按照使用场景可以分为两种类型: Ability类型的Module: 用于实现应用的功能和特性。每一个Ability类型的Module编译后,会生成一个以.hap为后缀的文件,我们称其为HAP(Harmony Ability Package&#x…

【QT】文件系统相关 -- QFile

一、Qt 文件概述 🔥 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于⽂件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件制或重命名等 二、输…