scala & spark调优

本文深入探讨Spark性能优化的关键策略,包括避免传统join操作导致的shuffle,利用coalesce操作优化数据分布,以及如何正确使用cache/persist等持久化操作来提升效率。适合Spark开发者和数据工程师参考。

scala spark 学习资料

https://blog.youkuaiyun.com/lovehuangjiaju

Spark性能优化指南——基础篇

https://tech.meituan.com/2016/04/29/spark-tuning-basic.html

Spark性能优化指南——高级篇

https://tech.meituan.com/2016/05/12/spark-tuning-pro.html

超全spark性能优化总结 - 一块小蛋糕的文章 - 知乎

https://zhuanlan.zhihu.com/p/108454557

Spark优化那些事(4)-关于spark.driver.maxResultSize的疑惑

http://bourneli.github.io/scala/spark/2016/09/21/spark-driver-maxResultSize-puzzle.html?utm_source=tuicool&utm_medium=referral

 

Spark性能优化指南——基础篇:

// 传统的join操作会导致shuffle操作。

// 因为两个RDD中,相同的key都需要通过网络拉取到一个节点上,由一个task进行join操作。

val rdd3 = rdd1.join(rdd2)

coalesce操作

一个stage的所有task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果

当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个task计算出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中。

<think>我们正在讨论Spark参数,根据引用内容,用户想了解Spark的相关参数。引用中提到了几种设置参数的方式:代码中设置、spark-submit传递参数、配置文件,以及一些具体参数如num-executors, executor-memory, executor-cores, driver-memory等。此外,引用还提到了一些配置项如spark.storage.memoryFraction, spark.shuffle.memoryFraction, spark.locality.wait等。 我将围绕Spark参数展开,重点介绍资源参数、内存管理参数、Shuffle参数和其他常用参数。同时,我会在回答中自然地标注引用来源。 注意:由于引用内容有限,我会结合我的知识补充一些常见的参数,并在适当的地方标注引用。 回答结构: 1. 资源分配参数 2. 内存管理参数 3. Shuffle参数 4. 其他常用参数 5. 参数设置方式 6. 相关问题 注意:引用标记[^1][^2][^3]分别对应三个引用段落。 </think>### Spark核心参数详解 根据引用内容,以下是Spark性能优化的关键参数分类及配置建议: --- #### 一、**资源分配参数** **1. Executor资源配置** | 参数 | 作用 | 推荐值 | 配置方式示例 | |------|------|--------|--------------| | `num-executors` | Executor数量 | 50~100(集群规模决定) | `--num-executors 50` [^1][^2] | | `executor-cores` | 单Executor并发任务数 | 2~5(避免HDFS IO瓶颈) | `--executor-cores 2` [^2] | | `executor-memory` | Executor堆内存 | 4G~8G(需预留堆外内存) | `--executor-memory 4G` [^2] | **2. Driver资源配置** ```bash --driver-memory 2G # Driver堆内存,处理collect()等操作[^2] ``` --- #### 二、**内存管理参数** **1. 内存分配比例** ```bash --conf spark.storage.memoryFraction=0.6 # 存储RDD缓存的内存占比(默认0.6)[^2] --conf spark.shuffle.memoryFraction=0.2 # Shuffle操作内存占比(默认0.2)[^2] ``` > **化原则**:缓存密集型作业提高`storage.memoryFraction`,Shuffle密集型提高`shuffle.memoryFraction` **2. 堆外内存配置** ```bash --conf spark.yarn.executor.memoryOverhead=2048 # 堆外内存(单位MB)[^2] ``` > 公式: **总内存 = `executor-memory` + `memoryOverhead`** > 堆外内存用于线程栈、JVM元数据等,默认值为`max(384MB, 0.07 × executor-memory)` --- #### 三、**Shuffle化参数** | 参数 | 作用 | 推荐值 | |------|------|--------| | `spark.shuffle.file.buffer` | Shuffle写缓冲区大小 | 64K→128K(减少磁盘IO)[^2] | | `spark.shuffle.io.maxRetries` | 拉取数据重试次数 | 60(网络不稳定时高)[^3] | | `spark.shuffle.io.retryWait` | 拉取数据等待间隔 | 5s→10s(高延迟网络)[^3] | | `spark.reducer.maxSizeInFlight` | Reduce拉取数据量 | 48M→96M(提升吞吐量) | --- #### 四、**任务度参数** ```bash --conf spark.locality.wait=10s # 数据本地性等待时间[^2] --conf spark.network.timeout=120s # 网络超时阈值(默认120s)[^2] --conf spark.core.connection.ack.wait.timeout=300 # Executor心跳超时[^2] ``` --- #### 五、**参数设置先级** 1. **代码中显式设置**(最高先级) ```scala spark.conf.set("spark.shuffle.io.retryWait", "10s") [^1] ``` 2. **spark-submit传递** ```bash spark-submit --conf spark.executor.cores=4 ... [^1] ``` 3. **配置文件**(`spark-defaults.conf`) 4. **系统默认值**(不建议依赖) > 生产环境建议先使用`spark-submit`动态配置[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值