Spark流处理作业在被驱动程序停止后失败

10
我有一个Spark Streaming作业,从Kafka读取数据并对其进行一些操作。我正在使用Yarn集群,Spark 1.4.1运行该作业,该集群具有两个节点,每个节点具有16 GB的RAM和16个核心。
我将以下配置传递给spark-submit作业:
--master yarn-cluster --num-executors 3 --driver-memory 4g --executor-memory 2g --executor-cores 3
作业在短时间内运行后返回此错误并完成:
INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 11,
(reason: Max number of executor failures reached)

.....

ERROR scheduler.ReceiverTracker: Deregistered receiver for stream 0:
Stopped by driver

更新:

这些日志也被发现:

INFO yarn.YarnAllocator: Received 3 containers from YARN, launching executors on 3 of them.....

INFO yarn.ApplicationMaster$AMEndpoint: Driver terminated or disconnected! Shutting down.

....

INFO yarn.YarnAllocator: Received 2 containers from YARN, launching executors on 2 of them.

INFO yarn.ExecutorRunnable: Starting Executor Container.....

INFO yarn.ApplicationMaster$AMEndpoint: Driver terminated or disconnected! Shutting down...

INFO yarn.YarnAllocator: Completed container container_e10_1453801197604_0104_01_000006 (state: COMPLETE, exit status: 1)

INFO yarn.YarnAllocator: Container marked as failed: container_e10_1453801197604_0104_01_000006. Exit status: 1. Diagnostics: Exception from container-launch.
Container id: container_e10_1453801197604_0104_01_000006
Exit code: 1
Stack trace: ExitCodeException exitCode=1: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:576)
    at org.apache.hadoop.util.Shell.run(Shell.java:487)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:753)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Container exited with a non-zero exit code 1

这可能出现的原因是什么?感谢您的帮助。
谢谢

我都试过了。即使使用小数据集,它还是会发生。 - void
你是否正在使用YARN日志聚合?将yarn.log-aggregation-enable设置为true。 - Justin Peel
@JustinPeel 是的,它被设置为true。 - void
你能添加更多的日志吗?包括工作进程的日志,以及标准输出和标准错误输出的日志。 - Amit Kumar
@GlennieHellesSindholt 没有任何关于杀死或超出内存的提示。我只能看到很多“容器标记为失败...退出状态:1。诊断:来自容器启动的异常...” - void
显示剩余5条评论
2个回答

3

请问您能展示一下从kafka读取数据的scala/java代码吗?我怀疑您可能没有正确创建SparkConf。

可以尝试以下代码:

SparkConf sparkConf = new SparkConf().setAppName("ApplicationName");

也尝试在yarn-client模式下运行应用程序并共享输出。

val conf = new SparkConf().setAppName("AppName") 这是我在 Scala 代码中创建 Spark 配置的方式。由于这个错误让我头疼不已,所以我现在在一个独立的集群上运行,无法尝试 yarn-client 模式。 - void
为了深入了解您的问题,您可以在yarn-client模式下运行spark-shell。 - Faisal Ahmed Siddiqui
运行Spark Shell,如下所示: spark-shell --master yarn-client执行示例操作并查看结果: val textFile = sc.textFile("HDFS上的文件") textFile.count() - Faisal Ahmed Siddiqui

-3

我遇到了同样的问题,并且找到了一个解决方案,通过在main函数的末尾删除sparkContext.stop()来修复这个问题,将stop操作留给GC处理。

Spark团队已经在Spark核心中解决了这个问题,但是修复方法目前只存在于主分支中。我们需要等待修复方法被更新到新版本中。

https://issues.apache.org/jira/browse/SPARK-12009


顺便说一下,我在我的代码中没有调用sparkContext.stop()。 - void

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接