当前位置: 首页 > 知识库问答 >
问题:

SparkException:Master删除了我们的应用

艾宁
2023-03-14

我知道Stackoverflow上还有其他非常类似的问题,但这些问题要么没有得到回答,要么没有帮助我解决。与这些问题相反,我在这个问题中添加了更多的堆栈、跟踪和日志文件信息。我希望这能有所帮助,尽管这让问题变得有点冗长和丑陋。对不起.

我正在Amazon EC2上使用m3.xlarege实例运行一个9节点集群,并安装了DSE(DataStax Enterprise)版本4.6。对于每个工作负载(Cassandra、Search和Analytics)使用3个节点。DSE 4.6包Spark 1.1和Cassandra 2.0。

即使我不运行任何查询,应用程序(spark/shark-shell)也会在大约3分钟后删除。对小型html" target="_blank">数据集的查询只要在3分钟内完成就会成功运行。

15/08/25 14:58:09 ERROR cluster.SparkDeploySchedulerBackend: Application has been killed. Reason: Master removed our application: FAILED
org.apache.spark.SparkException: Job aborted due to stage failure: Master removed our application: FAILED
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1185)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1174)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1173)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1173)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:688)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:688)
    at scala.Option.foreach(Option.scala:236)
    at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:688)
    at org.apache.spark.scheduler.DAGSchedulerEventProcessActor$$anonfun$receive$2.applyOrElse(DAGScheduler.scala:1391)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
    at akka.actor.ActorCell.invoke(ActorCell.scala:456)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
    at akka.dispatch.Mailbox.run(Mailbox.scala:219)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
FAILED: Execution Error, return code -101 from shark.execution.SparkTask

master.log中,我认为interesing部分是

INFO 2015-08-25 09:19:59 org.apache.spark.deploy.master.DseSparkMaster: akka.tcp://sparkWorker@172.31.46.48:46715 got disassociated, removing it.
INFO 2015-08-25 09:19:59 org.apache.spark.deploy.master.DseSparkMaster: akka.tcp://sparkWorker@172.31.33.35:42136 got disassociated, removing it.

ERROR 2015-08-25 09:21:01 org.apache.spark.deploy.master.DseSparkMaster: Application Shark::ip-172-31-46-49 with ID app-20150825091745-0007 failed 10 times, removing it
INFO 2015-08-25 09:21:01 org.apache.spark.deploy.master.DseSparkMaster: Removing app app-20150825091745-0007

为什么工作节点被取消关联?

    null

工人二

  • worker.log
  • 执行器(ID3)stdout
  • 执行人(ID3)stderr

执行器转储似乎表明了权限和/或超时的一些问题。但从垃圾堆里我找不出任何细节。

    null

编辑(2):我可以通过用三个新安装的Analytics节点替换Analytics节点来解决上面描述的问题。我现在可以在更大的数据集上运行查询,而无需删除shell。我不打算把这作为问题的答案,因为它仍然不清楚三个原始分析节点的问题。但是,由于它是一个用于测试的集群,所以可以简单地替换节点(在替换节点之后,我对每个新节点执行nodeTool重建--Cassandra,以便从Cassandra数据中心恢复它们的数据)。

共有1个答案

姬庆
2023-03-14

正如在尝试中提到的,根本原因是主节点和一个或多个工作节点之间的超时。

还要尝试的另一件事是:验证是否可以通过主机名从主机访问所有工作人员,无论是通过dns还是通过/etc/hosts文件中的一个条目。

在我的例子中,问题是集群运行在一个没有DNS的AWS子网中。随着时间的推移,集群通过旋转一个节点来增长,并将该节点添加到集群中。在构建主程序时,只知道集群中地址的一个子集,并且只有该子集被添加到/etc/hosts文件中。当dse spark从一个“新”节点运行时,主程序使用工作程序的主机名进行通信失败,主程序终止作业。

 类似资料:
  • null 另一个选择是在许可测试阶段更改应用程序的包名,如果必须的话,我们会这样做。但是,这很复杂,当我们更改包名时,可能会引入额外的错误。 另一种选择是我们的合作伙伴为我们建立一个用户帐户。然而,虽然用户账户可以被限制查看财务数据,但他们不能(就我们所知)被限制使用单个应用程序。我们可以理解为什么合作伙伴不想允许如此广泛的准入。

  • 我试图开发一个android应用程序,可以擦除其他应用程序的缓存数据,我试图浏览所有的博客,但没有一个对我有效,我可以通过以下代码清除我的应用程序的缓存 我想清除其他应用程序的缓存,可以任何机构请帮助我,如果我错了请纠正我,提前谢谢。

  • 问题内容: 我知道该ValueEventListener线程在新线程中运行,是否应该在任何时间删除此线程以进行适当的线程管理?(例如,没有太多并行运行的线程)。如果是,该怎么办? 问题答案: 在谈论监听器时,是的,您需要根据活动的生命周期将其删除,为此,您需要使用以下代码行: 请记住,如果不这样做,最终将浪费您的电池和带宽。所以: 如果已在中添加了侦听器,则onStart必须在中将其删除onSto

  • 我试图通过brew安装节点,它给出了很多错误,而且显然是某个文件没有给出权限,所以我打雷说该文件是从其他失败的尝试到所有节点,我决定删除该目录。它未能删除目录和文件,但显然有些已被擦除。 它们是:module.js:340投掷错误;^错误:在function.module._resolvefilename(module.js:338:15)在function.module._load(module

  • 这里我有一个android应用程序,它的核心功能是将收到的文本消息(SMS)转发到电子邮件收件箱,在那里它需要RECEIVE_SMS权限。由于违反google play政策,我的应用程序已从play商店中移除。SMS_permission在我的应用程序中是强制的。 我向谷歌播放提交了上诉,他们的回复如下 ... 我查看了您的申诉请求,发现您的应用仍然违反了 Google Play 政策。我在下面提