#livy
Вопрос:
Вот мой пример кода, который я отправляю через airflow
object Test {
val log: Logger = CustomLogger.getLogger(this.getClass.getName)
def main(args: Array[String]): Unit = {
val spark = SparkCommon.getSparkSession("test")
val splitted = args(0).split("[|]").toList
splitted match {
case returnOrExit :: exitCode :: shutdownSpark :: Nil =>
(returnOrExit, exitCode.toInt, shutdownSpark.toBoolean) match {
case ("return", _, true) =>
// Batch status: Success
log.info("Shutdown spark amp; return")
spark.stop()
case ("return", _, false) =>
// Batch status: Success
log.info("Only return")
case ("exit", exitCode, true) =>
// Batch status: dead (exit, 0, true) // **CASE 1
log.info(s"Shutdown spark amp; exit. exitCode = $exitCode")
spark.stop()
System.exit(exitCode)
case ("exit", exitCode, false) =>
// Batch status: dead (exit, 0, false) // **CASE 2
log.info(s"Only exit. exitCode = $exitCode")
System.exit(exitCode)
}
}
}
}
Для случая CASE 1
amp; CASE 2
где я exit
с 0
кодом выхода пакетного процесса в конечном итоге получаю статус dead
, который, в свою очередь, приводит к сбою задачи воздушного потока
Я ожидаю, что работа должна провалиться только для non-zero exit status
и должна увенчаться exitStatus of 0
успехом . Есть ли способ решить эту проблему?
Ч/б моя работа выполняется в emr-6.2.0
которой есть Livy 0.7.0
, и я использую этого оператора воздушного потока для отправки задания