spark参数调优

1  OOM 优化

Container killed by YARN for exceeding memory limits. 19 GB of 16 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead 

   问题原因1:  数据倾斜或数据量太大,导致executor处理的数据量太大超过executor内存限制。     

                  解决办法:    一般加大executor-memory内存量。 或者重分区增大分区数量,减小每分区数据量。

 

   问题原因2:   如果数据量本身并不大的情况下或着加大executor-memory也不太稳定(时好时坏)。说明程序某些操作可能大量使用的堆外内存(如spark sql中get_json_object函数可能导致大量使用堆外内存)

                          可以考虑手动设置加大spark.yarn.executor.memoryOverhead参数值。

                  解决办法: 直接增加对外内存spark.yarn.executor.memoryOverhead的值。

        spark.yarn.executor.memoryOverhead参数:官方解释

          大概意思:  是JVM 本身开销,或者内部字符以及本地开销使用,如运行pyspark时 python开销。 

          正常情况下:  spark.yarn.executor.memoryOverhead随着executor-memory增加而增加,在增加executor-memory内存不明显的情况下,可以手动设置spark.yarn.executor.memoryOverhead

          

可根据Container killed by YARN for exceeding memory limits. 19 GB of 16 GB physical memory used,这里的20G估算出堆外内存实际需要19G*0.1约等于1.9G,因此最少应该设置spark.yarn.executor.memoryOverhead为2G, 可以保险起见设置3-4G.   

 

          注意: 设置memoryOverhead过大可能导致executor-memory分配太大, 当executor实例较多时,造成资源浪费。如下截图。

  手动设置一个较大的值overhead=16G,  导致实际申请的overhead值和executor内存达到32G

       

 

2   动态 资源分配调优。

    CDH中spark2.x  默认情况下开启了 动态资源分配spark.dynamicAllocation.enabled=true。要关闭的话, 设置为false即可。    

   spark.dynamicAllocation.maxExecutors最大使用的executor数量,  避免JOB占用集群中大量资源。因为动态分配资源如果有pending状态TASK超过1S钟,就会申请增加executor数量。

  1 、2、 4、 8倍数增加。

  spark.dynamicAllocation.minExecutors      设置最小的excutor数量, 如果 提交参数设置的executor-instances/executor-num数量大于此参数,则最小数量以提交参数为准。

  spark.executor.memory                              设置执行器内存大小,   不指定的情况下使用默认值为一个容器的最小申请

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值