在集群模式下随机运行spark作业时,应用主站被yarn杀死。

问题描述 投票:0回答:1

错误日志如下。

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

部分观察结果如下。

  1. 应用程序主程序正在被杀死。内存错误发生在应用程序主容器中,而不是执行器容器中。
  2. 这个作业是通过ozie调度的,有些作业成功,有些则随机失败,没有任何模式。每次输入的数据量都是一样的。
  3. 我已经尝试了互联网上建议的大部分解决方案,yarn.mapareduce.map.mb和yarn.mapareduce.reduce.mb已经设置为8gb。
  4. 我也试过将驱动内存、执行器内存、开销内存都增加到很高的值、很低的值,并对这些配置进行调整,但有些情况下仍然失败。
  5. yarn.nodemanager.vmem-pmem-ratio被设置为2.1 vnem检查被禁用,pnem检查被启用。不幸的是,这些配置无法更改,因为这是一个生产集群。
  6. yarn.app.mapreduce.am.resource.mb已经被设置为5GB了。

我的一些其他困惑是。

  1. 为什么应用程序主容器的可用内存只有1.5GB,在日志中显示,如果yarn.app.mapreduce.am.resource.mb被设置为5GB?
  2. 因为这个错误出现在应用主容器本身,而且根据我的理解,应用主容器和spark驱动运行在同一个jvm中。我的结论是,这个错误是因为火花驱动的内存或应用程序的主内存不足。我的结论似乎正确吗?
apache-spark hadoop yarn cloudera oozie
1个回答
0
投票

我已经修复了这个错误。所以,我想我将在这里回答这个问题。

在集群模式下,在sparksession已经创建后,驱动程序内存配置不能在运行时给出,因为应用主程序已经启动,驱动程序在yarn应用主程序容器内运行。我想做的是在创建sparksession后,通过 "spark.driver.memory "来传递驱动内存配置。对于这种情况,Spark并没有给出任何错误,甚至在spark ui页面的环境选项卡中显示的驱动内存正是通过这个conf提供的,这使得识别问题更加困难。应用程序主内存被当作默认值1GB,而不是我提供的内存,因此,我得到了这个错误。

© www.soinside.com 2019 - 2024. All rights reserved.