1、降低cache操作的内存占比

  1.1 为什么要降低cache操作的内存占比

    spark的堆内存分别两部分,一部分用来给Rdd的缓存进行使用,另一部分供spark算子函数运行使用,存放函数中的对象

    默认情况下,供Rdd缓存使用的占0.6,但是,有些时候,不需要那么多的缓存,反而函数计算需要更多的内存,这样导致频繁的minor gc和full gc,导致性能降低。

  1.2 如何调节

    根据spark作业的yarn界面,如果有频繁的gc,就需要调节 

//调节cache操作的内存占比
conf.set("spark.storage.memoryFraction", "0.4");

2、调节executor的堆外内存

  2.1 什么情况下进行调节

    当spark作业中,是不是的报错,shuffle file cannot find,executro、task lost,out of memory等,可能是堆外内存不足,导致executor挂掉,task拉取该executor的数据是无法获取到,导致以上错误,甚至spark作业崩溃。

  2.2 如何调节

    在spark作业的提交脚本中,修改spark.yarn.executor.memoryOverhead参数(默认为300多M)

/usr/local/spark/bin/spark-submit \
--class com.ibeifeng.sparkstudy.WordCount \
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-cores 3 \
--master yarn-cluster \
--queue root.default \
--conf spark.yarn.executor.memoryOverhead=2048 \        调节堆外内存
--conf spark.core.connection.ack.wait.timeout=300 \       调节连接时间
/usr/local/spark/spark.jar 

3、调节连接等待时间

  3.1 什么情况下需要调节

    当一个executor的blockManager需要从其他的executor的blockManager中拉取数据,但是目标executor正处在gc阶段,此时源executor会进入等待连接状态(默认60s),如果多次拉取失败则会报   一串filed id  uuid(dsfsss-12323-sdsdsd-wewe) not found ,file lost,甚至spark作用直接崩溃。

  3.2 如何调节

    在spark作业的提交脚本中,修改conf spark.core.connection.ack.wait.timeout参数(默认为60s)

posted on 2017-02-23 17:02  YL10000  阅读(1915)  评论(0编辑  收藏  举报