实战解决 spark executor 被yarn杀掉的问题

公司同事的文


spark的任务,在运行期间executor总是挂掉。刚开始觉得是数据量太大executor内存不够。但是估算了数据量,觉得不应该出现内存不够。于是,首先尝试通过jvisualvm观察executor的内存分布:

老年代还没填满,进程就会出现挂掉的情况,所以并不是jvm级别的OOM。
仔细检查对应NodeManager的日志,发现如下日志:

WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Container [pid=1151,containerID=container_1578970174552_5615_01_
000003] is running beyond physical memory limits. Current usage: 4.3 GB of 4 GB physical memory used; 7.8 GB of 8.4 GB virtual memory used. Killing container.
Dump of the process-tree for container_1578970174552_5615_01_000003 :
        |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
        |- 1585 1175 1585 1151 (python) 50 67 567230464 8448 python -m pyspark.daemon
        |- 1596 1585 1585 1151 (python) 1006 81 1920327680 303705 python -m pyspark.daemon
        |- 1175 1151 1151 1151 (java) ...
        |- 1151 1146 1151 1151 (bash) ...
INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 1152 for container-id container_1578
970174552_5615_01_000004: 4.3 GB of 4 GB physical memory used; 7.8 GB of 8.4 GB virtual memory used

日志说,某个container的进程占用物理内存超过的阈值,yarn将其kill掉了。并且这个内存的统计是基于Process Tree的,我们的spark任务会启动python进程,并将数据通过pyspark传输给python进程,换句话说数据即存在jvm,也存在python进程,如果按照进程树统计,意味着会重复至少两倍。很容易超过“阈值”。

在yarn中,NodeManager会监控container的资源占用,为container设置物理内存和虚拟内存的上限,当超过以后,会kill container。

虚拟内存上限 = 物理内存上限 x yarn.nodemanager.vmem-pmem-ratio(默认是2.1)

通过设置两个开关可以关闭检查,但注意要设置到NodeManager上:

<property>
  <name>yarn.nodemanager.pmem-check-enabled </name>
  <value>false</value>
  <description>Whether physical memory limits will be enforced for containers.</description>
</property>
# 虚拟内存检查
<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
  <description>Whether virtual memory limits will be enforced for containers.</description>
</property>

还有一种情况跟spark自身内存设置有关系,参考:

https://www.jianshu.com/p/ceee2d5990f8 Spark on Yarn 为什么出现内存超界container被kill

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值