我运行了一个火花作业,它从两个来源获取输入,例如: / 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工作的最终状态会失败
答案 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
。在内部执行所有操作都很好,但是如果发生错误,则将其捕获在内部并且不会传播。
我只是简单地停止捕获错误,而现在该应用程序却像魅力一样失灵:-)。