hadoop应用程序主机在集群模式下随机运行spark作业时被Yarn杀死

thtygnil  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(441)

错误日志如下:

20/05/10 18:40:47 ERROR yarn.Client: Application diagnostics message: Application application_1588683044535_1067 failed 2 times due to AM Container for appattempt_1588683044535_1067_000002 exited with  exitCode: -104
Failing this attempt.Diagnostics: [2020-05-10 18:40:47.661]Container [pid=209264,containerID=container_e142_1588683044535_1067_02_000001] is running 3313664B beyond the 'PHYSICAL' memory limit. Current usage: 1.5 GB of 1.5 GB physical memory used; 3.6 GB of 3.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_e142_1588683044535_1067_02_000001 :
    |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
    |- 209264 209262 209264 209264 (bash) 0 0 22626304 372 /bin/bash -c LD_LIBRARY_PATH="/cdhparcels/CDH-6.1.1-1.cdh6.1.1.p0.875250/lib/hadoop/../../../CDH-6.1.1-1.cdh6.1.1.p0.875250/lib/hadoop/lib/native:" /usr/java/jdk1.8.0_181-cloudera/bin/java -server -Xmx1024m -Djava.io.tmpdir=/hdfs4/yarn/nm/usercache/aiuat/appcache/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/tmp -Dspark.yarn.app.container.log.dir=/hdfs16/yarn/container-logs/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class 'com.airtel.spark.execution.driver.SparkDriver' --jar hdfs:///user/aiuat/lib/platform/di-platform-main-1.0.jar --arg 'hdfs://nameservice1/user/aiuat/conf/FMS/irrule/irsparkbatchjobconf.json,hdfs://nameservice1/user/aiuat/conf/FMS/irrule/irruleexecution.json' --properties-file /hdfs4/yarn/nm/usercache/aiuat/appcache/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/__spark_conf__/__spark_conf__.properties 1> /hdfs16/yarn/container-logs/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/stdout 2> /hdfs16/yarn/container-logs/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/stderr
    |- 209280 209264 209264 209264 (java) 34135 2437 3845763072 393653 /usr/java/jdk1.8.0_181-cloudera/bin/java -server -Xmx1024m -Djava.io.tmpdir=/hdfs4/yarn/nm/usercache/aiuat/appcache/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/tmp -Dspark.yarn.app.container.log.dir=/hdfs16/yarn/container-logs/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class com.airtel.spark.execution.driver.SparkDriver --jar hdfs:///user/aiuat/lib/platform/di-platform-main-1.0.jar --arg hdfs://nameservice1/user/aiuat/conf/FMS/irrule/irsparkbatchjobconf.json,hdfs://nameservice1/user/aiuat/conf/FMS/irrule/irruleexecution.json --properties-file /hdfs4/yarn/nm/usercache/aiuat/appcache/application_1588683044535_1067/container_e142_1588683044535_1067_02_000001/__spark_conf__/__spark_conf__.properties

一些观察结果是:
应用程序主程序正在被杀死。内存错误在应用程序主机本身的容器中,而不是在执行器容器中。
这个作业是通过oozie来调度的,一些作业示例成功了,一些则随机地失败了,没有任何模式。在任何情况下,输入数据量都是相同的。
我已经尝试了互联网上建议的大多数解决方案。yarn.mapareduce.map.mb和yarn.mapareduce.reduce.mb已设置为8gb。
我也尝试过将驱动程序内存、执行程序内存和开销内存都增加到很高的值,很低的值,并对这些配置进行调整,但有些示例在每种情况下都失败了。
yarn.nodemanager.vmem-pmem-ratio设置为2.1 vnem check禁用,pnem check启用。不幸的是,这些配置无法更改,因为它是一个生产集群。
yarn.app.mapreduce.am.resource.mb已设置为5gb。yarn.scheduler.maximum-allocation-mb设置为26gb
我的其他困惑是:
如果yarn.app.mapreduce.am.resource.mb设置为5gb,为什么应用程序主容器只能使用1.5gb的内存(如日志所示)?
由于这个错误出现在applicationmaster本身的容器中,根据我的理解,applicationmaster和spark驱动程序运行在同一个jvm中。我的结论是,这个错误是因为要么Spark驱动器内存或应用程序主内存不够。我的结论正确吗?

laawzig2

laawzig21#

我已经修正了这个错误。所以,我想我会在这里回答这个问题。
在集群模式下,由于应用程序主机已经启动并且驱动程序在应用程序主机容器中运行,因此在创建sparksession之后,无法在运行时提供驱动程序内存配置。我要做的是在创建sparksession之后通过“spark.driver.memory”传递驱动程序内存配置。对于这种情况,spark没有给出任何错误,甚至在spark ui页面的environment选项卡中显示了通过这个conf提供的驱动程序内存,这使得识别问题更加困难。应用程序主内存被作为默认值1gb,而不是我提供的内存,因此,我得到了这个错误。

相关问题