Amazon ec2 SparkException:Master删除了我们的应用程序

Amazon ec2 SparkException:Master删除了我们的应用程序,amazon-ec2,apache-spark,datastax-enterprise,Amazon Ec2,Apache Spark,Datastax Enterprise,我知道有一些关于Stackoverflow的问题,但这些问题要么没有得到回答,要么没有帮助我。与这些问题相比,我在这个问题中加入了更多的堆栈跟踪和日志文件信息。我希望这会有所帮助,尽管这让问题变得有点长,有点难看。对不起 安装程序 我正在AmazonEC2上运行一个9节点集群,使用安装了DSE(DataStaxEnterprise)4.6版的m3.xlarge实例。对于每个工作负载(Cassandra、搜索和分析),使用3个节点。DSE 4.6捆绑包Spark 1.1和Cassandra 2.0

我知道有一些关于Stackoverflow的问题,但这些问题要么没有得到回答,要么没有帮助我。与这些问题相比,我在这个问题中加入了更多的堆栈跟踪和日志文件信息。我希望这会有所帮助,尽管这让问题变得有点长,有点难看。对不起

安装程序 我正在AmazonEC2上运行一个9节点集群,使用安装了DSE(DataStaxEnterprise)4.6版的
m3.xlarge
实例。对于每个工作负载(Cassandra、搜索和分析),使用3个节点。DSE 4.6捆绑包Spark 1.1和Cassandra 2.0

问题 即使我没有运行任何查询,应用程序(Spark/Shark Shell)也会在大约3分钟后被删除。对小型数据集的查询只要在~3分钟内完成,就会成功运行

我想分析更大的数据集。因此,我需要应用程序(外壳)在~3分钟后不要被移除

错误描述 在Spark或Shark shell上,在空闲~3分钟后或执行(长时间运行)查询时,Spark最终将中止并给出以下堆栈跟踪:

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
这(对我来说)不是很有帮助,这就是为什么我要向您展示更多日志文件信息的原因

错误详细信息/日志文件 主人 从这个角度来看,我认为有趣的部分是

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.

为什么工作节点被解除关联

如果你需要看的话,我也附上了。执行器
stderr
为空。然而,我认为解决这个问题毫无用处

在Spark Master UI上,我验证了所有工作节点是否处于活动状态。第二个屏幕截图显示了应用程序的详细信息




主实例上产生了一个执行器,而两个工作节点上的执行器将重新启动,直到整个应用程序被删除。这可以吗,还是表明存在一些问题?我认为这可能与上面的“(it)失败10次”错误消息有关

工人日志 此外,我可以向您展示两个Spark worker节点的日志。我删除了大多数类路径参数以缩短日志。如果你需要看,请告诉我。当每个工作节点产生多个执行器时,我将链接附加到一些(不是全部)执行器
stdout
stderr
转储。其余执行者的转储看起来基本相同

工人I

二级工人

executor转储似乎表明权限和/或超时存在一些问题。但是从垃圾堆里我想不出任何细节

尝试 如上所述,有一些类似的问题,但没有一个得到回答,或者它没有帮助我解决这个问题。不管怎样,我尝试和验证的是:

  • 。没有什么变化
  • 这使得Spark/Shark应用程序寿命更长,但最终还是被删除了
  • 使用
    spark.master=local[4]
    。一方面,这使我能够成功地运行超过3分钟的查询,另一方面,它显然没有利用分布式环境
总结 总之,可以说超时和长时间运行的查询在本地模式下成功执行的事实都表明存在一些错误配置。虽然我不能确定,我不知道如何修复它

任何帮助都将不胜感激

编辑:在集群初始设置后添加了两个分析和两个Solr节点。以防万一


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

如尝试中所述,根本原因是主节点之间的超时,以及一名或多名工人

要尝试的另一件事是:验证主机名是否可以通过dns或/etc/hosts文件中的条目访问所有worker

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

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