【问题标题】:Spark - Container is running beyond physical memory limitsSpark - 容器运行超出物理内存限制
【发布时间】:2015-11-17 14:34:06
【问题描述】:

我有一个由两个工作节点组成的集群。 Worker_Node_1 - 64GB RAM Worker_Node_2 - 32GB 内存

背景摘要: 我正在尝试在 yarn-cluster 上执行 spark-submit 以在 Graph 上运行 Pregel 以计算从一个源顶点到所有其他顶点的最短路径距离并在控制台上打印值。 实验:

  1. 对于具有 15 个顶点的小图,执行完成应用程序最终状态:成功
  2. 我的代码完美运行,并打印了 241 个顶点的最短距离图,将单个顶点作为源顶点,但存在问题。

问题: 当我深入研究日志文件时,任务在 4 分 26 秒内 成功 完成,但仍在终端上,它继续显示应用程序状态为 Running 并在大约 12 秒后分钟任务执行终止说-

Application application_1447669815913_0002 failed 2 times due to AM Container for appattempt_1447669815913_0002_000002 exited with exitCode: -104 For more detailed output, check application tracking page:http://myserver.com:8088/proxy/application_1447669815913_0002/
Then, click on links to logs of each attempt. 
Diagnostics: Container [pid=47384,containerID=container_1447669815913_0002_02_000001] is running beyond physical memory limits. Current usage: 17.9 GB of 17.5 GB physical memory used; 18.7 GB of 36.8 GB virtual memory used. Killing container.

Dump of the process-tree for container_1447669815913_0002_02_000001 : 
 |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 47387 47384 47384 47384 (java) 100525 13746 20105633792 4682973 /usr/lib/jvm/java-7-oracle-cloudera/bin/java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp -Dspark.eventLog.enabled=true -Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory -Dspark.executor.memory=14g -Dspark.shuffle.service.enabled=false -Dspark.yarn.executor.memoryOverhead=2048 -Dspark.yarn.historyServer.address=http://myserver.com:18088 -Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.shuffle.service.port=7337 -Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-assembly.jar -Dspark.serializer=org.apache.spark.serializer.KryoSerializer -Dspark.authenticate=false -Dspark.app.name=com.path.PathFinder -Dspark.master=yarn-cluster -Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class com.path.PathFinder --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg /home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile --executor-memory 14336m --executor-cores 32 --num-executors 2
|- 47384 47382 47384 47384 (bash) 2 0 17379328 853 /bin/bash -c LD_LIBRARY_PATH=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native::/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native /usr/lib/jvm/java-7-oracle-cloudera/bin/java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp '-Dspark.eventLog.enabled=true' '-Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory' '-Dspark.executor.memory=14g' '-Dspark.shuffle.service.enabled=false' '-Dspark.yarn.executor.memoryOverhead=2048' '-Dspark.yarn.historyServer.address=http://myserver.com:18088' '-Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.shuffle.service.port=7337' '-Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-assembly.jar' '-Dspark.serializer=org.apache.spark.serializer.KryoSerializer' '-Dspark.authenticate=false' '-Dspark.app.name=com.path.PathFinder' '-Dspark.master=yarn-cluster' '-Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class 'com.path.PathFinder' --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg '/home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile' --executor-memory 14336m --executor-cores 32 --num-executors 2 1> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stdout 2> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stderr
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Failing this attempt. Failing the application.

我尝试过的事情:

  1. yarn.schedular.maximum-allocation-mb – 32GB
  2. mapreduce.map.memory.mb = 2048(以前是 1024)
  3. 尝试将 --driver-memory 增加到 24g

能否请您对我如何配置资源管理器以便也可以处理大型图(> 300K 顶点)进行更多说明?谢谢。

【问题讨论】:

  • 之前有个类似的问题:stackoverflow.com/questions/21005643/…
  • @aditya 你有什么发现吗?另一个没有帮助我
  • 您需要根据集群的容量微调您的应用程序。参数 --driver-memory --executor-memory --executor-cores --num-executors 在 yarn-cluster 上执行 spark-submit 时起着非常重要的作用。
  • 我也有同样的问题。有谁知道我怎样才能理解哪个操作正在 OutOfMemory?如果它是一些连接还是一些缓存数据?谢谢!

标签: hadoop apache-spark spark-graphx


【解决方案1】:

只需将spark.driver.memory 的默认配置从512m 增加到2g 即可解决此错误。

如果内存不断出现相同的错误,您可以将内存设置得更高。然后,您可以继续减少它,直到它遇到相同的错误,以便您知道用于您的工作的最佳驱动程序内存。

【讨论】:

    【解决方案2】:

    您处理的数据越多,每个 Spark 任务需要的内存就越多。而且,如果您的执行程序正在运行太多任务,那么它可能会耗尽内存。当我在处理大量数据时遇到问题时,通常是由于没有正确平衡每个执行程序的核心数量。尝试减少核心数量或增加执行器内存。

    判断您遇到内存问题的一种简单方法是检查 Spark UI 上的“执行程序”选项卡。如果您看到很多红条表示垃圾回收时间过长,则您的执行程序中的内存可能已用完。

    【讨论】:

    • 他说 Container 内存不足不是 executor
    【解决方案3】:

    我解决了我的错误以增加 spark.yarn.executor.memoryOverhead 的配置,它代表堆外内存 当你增加driver-memory和executor-memory时,不要忘记这个配置项

    【讨论】:

      【解决方案4】:

      我也有类似的问题:

      关键错误信息:

      • 退出代码:-104
      • “物理”内存限制
      Application application_1577148289818_10686 failed 2 times due to AM Container for appattempt_1577148289818_10686_000002 exited with **exitCode: -104**
      
      Failing this attempt.Diagnostics: [2019-12-26 09:13:54.392]Container [pid=18968,containerID=container_e96_1577148289818_10686_02_000001] is running 132722688B beyond the **'PHYSICAL' memory limit**. Current usage: 1.6 GB of 1.5 GB physical memory used; 4.6 GB of 3.1 GB virtual memory used. Killing container.
      
      

      增加spark.executor.memoryspark.executor.memoryOverhead都没有生效。

      那我加spark.driver.memory就解决了。

      【讨论】:

        【解决方案5】:

        Spark 作业向资源管理器请求资源的方式与 MapReduce 作业不同。尝试调整分配给每个 executor 的 executor 和 mem/vcore 的数量。关注http://spark.apache.org/docs/latest/submitting-applications.html

        【讨论】:

          猜你喜欢
          • 2018-11-01
          • 2018-03-30
          • 1970-01-01
          • 2022-12-15
          • 2017-08-20
          • 1970-01-01
          • 1970-01-01
          • 2016-03-19
          • 1970-01-01
          相关资源
          最近更新 更多