在 EMR 上运行 Spark 任务时,资源分配直接决定了任务的执行效率与稳定性。以下是核心调优策略:
spark.dynamicAllocation.enabled=true。YARN 是 EMR 的资源管家,正确的配置能防止 OOM (Out of Memory):
| 参数名 | 建议说明 |
|---|---|
| yarn.nodemanager.vmem-check-enabled | 设为 false,防止物理内存与虚拟内存限制触发任务误杀 🛡️ |
| spark.yarn.executor.memoryOverhead | 设置为 executor-memory 的 10%-15%,专门用于堆外内存,处理 Netty 网络缓存或 Off-heap 计算。 |
很多慢任务都是因为并行度不足导致的,请务必关注:
spark.read.option("basePath", ...) 或在写入前调用 repartition() 合并小文件。Spark 内存分为存储内存 (Storage) 和执行内存 (Execution),通过 spark.memory.fraction (默认 0.6) 进行划分:
spark.memory.fraction。salting (加盐) 处理 Key 分布不均的情况。希望这些建议能让你的 Spark 任务起飞!🚀✨