Spark 通用的性能配置方法:内存和CPU的配置

简介: 前言 本文主要介绍关于通过配置Spark任务运行时的内存和CPU(Vcore)来提升Spark性能的方法。通过配置内存和CPU(Vcore)是比较基础、通用的方法。本文出现的Demo以X-Pack Spark数据工作台为背景介绍,数据工作台的详细介绍请参考:数据工作台。

前言

本文主要介绍关于通过配置Spark任务运行时的内存和CPU(Vcore)来提升Spark性能的方法。通过配置内存和CPU(Vcore)是比较基础、通用的方法。本文出现的Demo以X-Pack Spark数据工作台为背景介绍,数据工作台的详细介绍请参考:数据工作台

提交Spark任务的参数

提交Spark任务时需要提供如下的参数。

--class org.apache.spark.examples.SparkPi
--driver-memory 2G 
--driver-cores 1
--executor-cores 2
--executor-memory 8G
--num-executors 3
--name spark-pi
...

其中下面的参数都是和此次spark任务执行的性能相关。

--driver-memory 2G   //分配给Driver的内存。
--driver-cores 1         // 分配给Driver的Vcore。
--executor-cores 2    //分配给Executor的Vcore。
--executor-memory 8G   //分配给Executor的内存。
--num-executors 3  //分配的Executor的个数。

这些配置会影响spark任务执行的并行度、可用的Vcore和内存,从而影响执行的性能。下面分别看下如何配置这些参数。

并行度

按照上面的配置,此次spark任务的运行并行度为:--executor-cores的值 --num-executors的值,即23=6;也就是说同时最多会有6个task同时执行。
假设此次任务60个task,每个task执行时间为1秒,则此任务运行时间为:60/6*1=10秒;
先把--executor-cores提升为3,--num-executors提升为10,则此任务运行时间为:60/30*1=2秒。
所以增加并行度是提升性能比较常用和直接的方法。

Executor的资源配置

--executor-cores一般设置为2~4比较合适,一般通过和--num-executors组合来提升spark任务的并行度。
--executor-memory内存的配置一般和--executor-cores有一定的比例关系,比例常用的访问为1:2 到1:4之间。可以根据task运行过程GC的情况适当调整。Task运行时的GC情况可以通过Spark Job UI查看,如下图:
Snip20190708_3
其中Duration为task运行的时间,GC Time为task运行的Gc 时间。如果GC时间较长,可以适当增加--executor-memory的值或者减少--executor-cores的值(如果资源不足的话)

Driver的资源配置

--driver-memory和--driver-cores一般设置比较少,2G和1cores也基本共用。但是如果有算子把数据都拉倒Driver上去处理,需要增加--driver-memory的值,不过也建议这么做,因为这样最增加Driver的压力。如果

结束语

本文主要列出最基本的方法,Spark性能的调优时可以结合运行时Spark Job UI 查看每个任务的运行状态进行调优。其他调优方法和参数会陆续推出。
Spark详细配置请参考:Spark Configuration
X-Pack Spark介绍请参考:Spark 基本介绍

相关文章
|
13天前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
5天前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
28 11
|
6天前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
29 11
|
1天前
|
存储 监控
【Azure Cloud Service】在Azure云服务中收集CPU监控指标和IIS进程的DUMP方法
在使用Cloud Service服务时,发现服务的CPU占用很高,在业务请求并不大的情况下,需要直到到底是什么进程占用了大量的CPU资源,已经如何获取IIS进程(w3wp.exe)的DUMP文件?
|
9天前
|
编解码 算法 测试技术
CPU性能调节【ChatGPT】
CPU性能调节【ChatGPT】
|
12天前
|
开发者 Ruby
揭秘Ruby内存优化的秘密武器!符号(Symbol):为何它能成为你的性能提升神器?
【8月更文挑战第31天】Ruby是一门优雅而强大的编程语言,其设计注重开发者友好与效率。符号(Symbol)作为一种特殊标识符,代表唯一的字符串字面量,在内部以单例形式存在,可显著减少内存消耗。本文将深入探讨符号的机制及其在Ruby中的应用,帮助你通过最佳实践有效利用这一特性。通过将符号用作哈希表的键或代替字符串常量,可以提升程序性能并减少内存使用。然而,过度使用符号可能影响代码可读性,需谨慎权衡。
19 0
|
13天前
|
存储 大数据 Python
NumPy 内存管理和性能调优
【8月更文第30天】NumPy 是 Python 中用于科学计算的核心库之一,它提供了高效的数组操作功能。然而,随着数据集的增大,如何有效地管理和优化 NumPy 数组的内存使用成为了一个重要的问题。本文将介绍一些技巧,帮助你更好地管理和优化 NumPy 数组的内存使用。
28 0
|
1月前
|
KVM 虚拟化
[kvm]cpu内存硬盘配置
[kvm]cpu内存硬盘配置
|
1月前
|
监控 算法 Java
Java 内存管理:从垃圾收集到性能调优
【8月更文挑战第5天】 本文将深入探讨 Java 的内存管理机制,特别是垃圾收集器(GC)的工作原理及其在性能优化中的关键作用。通过具体案例分析,我们将了解如何选择合适的垃圾收集算法以及调优 JVM 参数来提升应用性能。文章旨在为 Java 开发者提供实用的内存管理和性能调优技巧,帮助他们编写更高效、更稳定的应用程序。
55 3
|
18天前
|
数据安全/隐私保护 异构计算 Windows
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter