通过Spark作业服务器提交的作业因错误而失败

时间:2020-06-01 00:11:01

标签: scala apache-spark spark-jobserver

我正在使用Spark Job Server在集群中提交Spark作业。我要测试的应用程序是 基于Sansa querySansa stack的spark程序。 Sansa用于大量RDF数据的可伸缩处理,而Sansa查询是用于查询RDF数据的sansa库之一。 当我使用spark-submit命令将spark应用程序作为spark程序运行时,它可以按预期正常工作。但是当通过spark作业服务器运行该程序时,应用程序通常会失败,但出现以下异常。

0/05/29 18:57:00 INFO BlockManagerInfo:在内存中添加了rdd_44_0 us1salxhpw0653.corpnet2.com:37017(大小:16.0 B,免费:366.2 MB) 20/05/29 18:57:00错误ApplicationMaster:收到的信号条款 20/05/29 18:57:00 INFO SparkContext:从关机调用stop() 钩子20/05/29 18:57:00信息JobManagerActor:得到了Spark应用程序结束 事件,停止工作经理。 20/05/29 18:57:00 INFO JobManager演员: 从外部获得Spark Application结束事件,从而停止了作业管理器 20/05/29 18:57:00 INFO SparkUI:在以下位置停止了Spark Web UI http://10.138.32.96:46627 20/05/29 18:57:00 INFO TaskSetManager: 在阶段3.0(TID 63,us1salxhpw0653.corpnet2.com, 执行程序1,分区3,NODE_LOCAL,4942字节)20/05/29 18:57:00 INFO TaskSetManager:在513毫秒内完成了阶段3.0(TID 60)中的任务0.0 on us1salxhpw0653.corpnet2.com(执行者1)(1/560)20/05/29 18:57:00 INFO TaskSetManager:在阶段3.0(TID 64, us1salxhpw0669.corpnet2.com,执行程序2,分区4,NODE_LOCAL,4942 个字节)20/05/29 18:57:00 INFO TaskSetManager:已完成任务1.0 in 在us1salxhpw0669.corpnet2.com(执行程序)上以512毫秒的时间进行3.0级(TID 61)测试 2)(2/560)20/05/29 18:57:00 INFO TaskSetManager:在以下位置启动任务5.0 阶段3.0(TID 65,us1salxhpw0670.corpnet2.com,执行程序3,分区 5,NODE_LOCAL,4942位元组)20/05/29 18:57:00 INFO TaskSetManager: 在536毫秒内完成了阶段3.0(TID 62)中的任务2.0 us1salxhpw0670.corpnet2.com(执行者3)(3/560)20/05/29 18:57:00 INFO BlockManagerInfo:在内存中添加了rdd_44_4 us1salxhpw0669.corpnet2.com:34922(大小:16.0 B,免费:366.2 MB) 20/05/29 18:57:00 INFO BlockManagerInfo:在内存中添加了rdd_44_3 us1salxhpw0653.corpnet2.com:37017(大小:16.0 B,免费:366.2 MB) 20/05/29 18:57:00 INFO DAGS计划程序:作业2失败:保存在 SansaQueryExample.scala:32,花费0.732943 s 20/05/29 18:57:00 INFO DAGScheduler:ShuffleMapStage 3(保存在SansaQueryExample.scala:32上) 在0.556 s内失败,因为由于取消了SparkContext而取消了Stage down 20/05/29 18:57:00错误FileFormatWriter:中止作业null。 >> org.apache.spark.SparkException:由于SparkContext取消了作业2 在关闭 org.apache.spark.scheduler.DAGScheduler $$ anonfun $ cleanUpAfterSchedulerStop $ 1.apply(DAGScheduler.scala:820) 在 org.apache.spark.scheduler.DAGScheduler $$ anonfun $ cleanUpAfterSchedulerStop $ 1.apply(DAGScheduler.scala:818) 在scala.collection.mutable.HashSet.foreach(HashSet.scala:78)在 org.apache.spark.scheduler.DAGScheduler.cleanUpAfterSchedulerStop(DAGScheduler.scala:818) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onStop(DAGScheduler.scala:1732) 在org.apache.spark.util.EventLoop.stop(EventLoop.scala:83)处 org.apache.spark.scheduler.DAGScheduler.stop(DAGScheduler.scala:1651) 在 org.apache.spark.SparkContext $$ anonfun $ stop $ 8.apply $ mcV $ sp(SparkContext.scala:1923) 在org.apache.spark.util.Utils $ .tryLogNonFatalError(Utils.scala:1317) 在org.apache.spark.SparkContext.stop(SparkContext.scala:1922)处 org.apache.spark.SparkContext $$ anonfun $ 2.apply $ mcV $ sp(SparkContext.scala:584) 在 org.apache.spark.util.SparkShutdownHook.run(ShutdownHookManager.scala:216) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1 $$ anonfun $ apply $ mcV $ sp $ 1.apply $ mcV $ sp(ShutdownHookManager.scala:188) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1 $$ anonfun $ apply $ mcV $ sp $ 1.apply(ShutdownHookManager.scala:188) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1 $$ anonfun $ apply $ mcV $ sp $ 1.apply(ShutdownHookManager.scala:188) 在 org.apache.spark.util.Utils $ .logUncaughtExceptions(Utils.scala:1954) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1.apply $ mcV $ sp(ShutdownHookManager.scala:188) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1.apply(ShutdownHookManager.scala:188) 在 org.apache.spark.util.SparkShutdownHookManager $$ anonfun $ runAll $ 1.apply(ShutdownHookManager.scala:188) 在scala.util.Try $ .apply(Try.scala:192)

用于直接执行的代码

object SansaQueryExampleWithoutSJS {
  def main(args: Array[String]) {
    val spark=SparkSession.builder().appName("sansa stack example").getOrCreate()
    val input =  "hdfs://user/dileep/rdf.nt";
    val sparqlQuery: String = "SELECT * WHERE {?s ?p ?o} LIMIT 10"
    val lang = Lang.NTRIPLES
    val graphRdd = spark.rdf(lang)(input)
    println(graphRdd.collect().foreach(println))
    val result = graphRdd.sparql(sparqlQuery)

    result.write.format("csv").mode("overwrite").save("hdfs://user/dileep/test-out")

  }

与Spark Job Server集成的代码

object SansaQueryExample extends SparkSessionJob {
  override type JobData = Seq[String]
  override type JobOutput = collection.Map[String, Long]

  override def validate(sparkSession: SparkSession, runtime: JobEnvironment, config: Config):
  JobData Or Every[ValidationProblem] = {
    Try(config.getString("input.string").split(" ").toSeq)
      .map(words => Good(words))
      .getOrElse(Bad(One(SingleProblem("No input.string param"))))
  }
  override def runJob(sparkSession: SparkSession, runtime: JobEnvironment, data: JobData): JobOutput = {

    val input =  "hdfs://user/dileep/rdf.nt";
    val sparqlQuery: String = "SELECT * WHERE {?s ?p ?o} LIMIT 10"
    val lang = Lang.NTRIPLES
    val graphRdd = sparkSession.rdf(lang)(input)
    println(graphRdd.collect().foreach(println))
    val result = graphRdd.sparql(sparqlQuery)

    result.write.format("csv").mode("overwrite").save("hdfs://user/dileep/test-out")
    sparkSession.sparkContext.parallelize(data).countByValue
  }

}

主要通过here解释了通过Spark作业服务器执行应用程序的步骤

  1. 通过rest api将jar上载到SJS
  2. 根据需要通过另一个API创建具有内存和核心的Spark上下文
  3. 通过另一个提及已创建的jar和上下文的api执行作业

因此,当我观察到该程序的不同执行时,我可以看到spark作业服务器的行为不一致,并且该程序在少数情况下可以正常工作而没有任何错误。还观察到sparkcontext由于某些未知原因而正在关闭。使用SJS 0.8.0,sansa 0.7.1和spark 2.4

0 个答案:

没有答案