spark调优记录 Execution Memory 和spark.driver.memory优化

目录

环境: Spark1.6.2

目标:提高CPU利用率,降低带宽IO,提高缓存命中率,减少数据落盘。

Spark作为Zeppelin的SQL底层执行引擎,通过Thriftserver处理jdbc连接,为提高硬件资源利用率、IO带宽和内存利用率,特针对性的进行Spark性能调优,目的是提高多租户环境下Spark SQL执行效率。
对spark.conf 主要参数调优。
合理的core,mem比例以及并行度是能显著提升执行效率。

任务内存参数配置:

1
2
3
 spark.driver.memory=6g(存在广播所以Driver设置的较大)
 spark.executor.memory=13G
 spark.memory.fraction=0.4

内存参数配置计算公式:
Execution Memory 2.5G =(Heap size(13G)- Reserve Memory(450M))* spark.memory.fraction 0.4 * spark.memory.storageFraction 0.5
用户主导的空间:User Memory 7.5G =(Heap size(13G)- Reserve Memory(450M))* (1 - spark.memory.fraction 0.4)
安全因子:0.9,考虑到内存空间使用和预估的准确度,实际应用过程中会考虑加入一个安全因子。
可用用户主导空间:User Memory * 0.9 = 6.8G(根据实际情况,数据条数 * 每条数据任务后占用内存最大值,基于此评估一个最大值,如果超过这个值就会出现OOM)
效果:解决程序OOM问题,因为任务过程维护了大的数据结构,其主要使用了User Memory的空间,用Spark默认内存配置会导致用户空间OOM。

统一内存管理可以看Spark统一内存管理:Spark统一内存管理:UnifiedMemoryManager

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/12/image-16.png@!full

随机文章