即使失败,Spark Job也会成功

时间:2019-07-12 03:27:27

标签: apache-spark

我运行了一个火花作业,它从两个来源获取输入,例如: / home / hadoop / base / hourly / {input1 / 20190701 /,input2 / 20190701 /}

问题在于这两个结构具有不同的架构。我遇到的情况是spark作业的最终状态是成功的,但是由于该问题而无法处理该数据。由于状态良好,因此在我们的集群中已有一段时间没有注意到此问题。 有没有办法让火花作业失败而不是成功解决?

以下是任务日志中的错误摘要以供参考

Job aborted due to stage failure: Task 1429 in stage 2.0 failed 4 times, most recent failure: Lost task 1429.3 in stage 2.0 (TID 1120, 1.mx.if.aaa.com, executor 64): java.lang.UnsupportedOperationException: parquet.column.values.dictionary.PlainValuesDictionary$PlainIntegerDictionary
    at parquet.column.Dictionary.decodeToLong(Dictionary.java:52)
    at org.apache.spark.sql.execution.datasources.parquet.ParquetDictionary.decodeToLong(ParquetDictionary.java:36)
    at org.apache.spark.sql.execution.vectorized.OnHeapColumnVector.getLong(OnHeapColumnVector.java:364)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$13$$anon$1.hasNext(WholeStageCodegenExec.scala:636)
    at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:439)

我运行的代码示例:

val ckall = spark.read.parquet("/home/hadoop/base/hourly/{input1/20190701/,input2/20190701/")
ckall.write.parquet("/home/hadoop/output")

理想情况下,我希望Spark工作的最终状态会失败

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,只是发现这都是我的错。

基本上,我的应用起点如下:

loadInitialState()

所有似乎都可以。但是实际上object MyApp extends App { private val logger = LoggerFactory.getLogger(getClass) logger.info(s"Starting $BuildInfo") val spark: SparkSession = SparkSession.builder.appName("name").getOrCreate() processing(spark) spark.stop() } 被包裹在processing(spark)中,它没有返回Try,而是返回了Unit。在内部执行所有操作都很好,但是如果发生错误,则将其捕获在内部并且不会传播。

我只是简单地停止捕获错误,而现在该应用程序却像魅力一样失灵:-)。

相关问题