spark调优记录 Execution Memory 和spark.driver.memory优化
目录
环境: Spark1.6.2
目标:提高CPU利用率,降低带宽IO,提高缓存命中率,减少数据落盘。
Spark作为Zeppelin的SQL底层执行引擎,通过Thriftserver处理jdbc连接,为提高硬件资源利用率、IO带宽和内存利用率,特针对性的进行Spark性能调优,目的是提高多租户环境下Spark SQL执行效率。
对spark.conf 主要参数调优。
合理的core,mem比例以及并行度是能显著提升执行效率。
任务内存参数配置:
|
|
内存参数配置计算公式:
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