我正在运行Amazon EMR集群,我使用spark-submit shell命令向其提交作业。
我称之为:
spark-submit --master yarn --driver-memory 10g convert.py
convert.py脚本使用PySpark和Python 3.4一起运行。 在将文本文件读入RDD后,调用.take(5),。first(),。collect()等任何方法或从RDD创建数据帧会导致以下错误:
18/03/26 20:17:53 WARN TaskSetManager:阶段0.0中丢失的任务0.3(TID 3,ip-xx-xx-xx-xxx.ec2.internal,executor 4):ExecutorLostFailure (执行者4退出由其中一个正在运行的任务引起)原因: 标记为失败的容器:container_0000000000001_0001_01_000001开启 主持人:ip-xx-xx-xx-xxx.ec2.internal。退出状态:52。诊断: 容器启动的例外情况。容器ID: container_0000000000001_0001_01_000001退出代码:52堆栈跟踪: ExitCodeException exitCode = 52:at org.apache.hadoop.util.Shell.runCommand(Shell.java:972)at org.apache.hadoop.util.Shell.run(Shell.java:869)at org.apache.hadoop.util.Shell $ ShellCommandExecutor.execute(Shell.java:1170) 在 org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:236) 在 org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:305) 在 org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:84) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
仅适用于一个特定文件(大小约为900MB)。我设法通过仅使用 pyspark shell来复制问题。 有趣的是,使用 spark-shell 程序在scala中执行相同的步骤非常有效。
这可能是YARN的问题吗?此外,内存不应该是一个问题,因为我能够使用相同的代码转换18GB文件。
非常感谢任何指导。