【问题标题】:How does Spark handle exceptions for a spark streaming job?Spark 如何处理 Spark Streaming 作业的异常?
【发布时间】:2017-08-24 14:44:28
【问题描述】:

这个问题看起来可能相当大,但是我有两种具体情况,最好放在一起而不是分开。首先,我使用 spark-streaming-kafka API 将数据从 Kafka 读取到 dstream。假设我有以下两种情况之一:

// something goes wrong on the driver
dstream.transform { rdd =>
  throw new Exception
}

// something goes wrong on the executors
dstream.transform { rdd =>
  rdd.foreachPartition { partition =>
    throw new Exception
  }
}

这通常描述了一些可能发生的情况,我需要停止应用程序 - 在驱动程序或其中一个执行程序上引发异常(例如,无法访问对处理至关重要的某些外部服务)。如果您在本地尝试此操作,应用程序会立即失败。更多代码:

dstream.foreachRDD { rdd =>
  // write rdd data to some output
  // update the kafka offsets
}

这是我的应用程序中发生的最后一件事 - 将数据推送到 Kafka,然后确保在 Kafka 中移动偏移量以避免重新处理。

其他说明:

  • 我正在使用 Marathon 在 Mesos 上运行 Spark 2.0.1
  • 检查点和预写日志已禁用

我希望应用程序在抛出异常时关闭(就像我在本地运行它一样),因为我需要快速失败的行为。现在有时发生的情况是,在发生异常后,应用程序仍然显示为在 Marathon 中运行;更糟糕的是,在某些情况下仍然可以访问 Spark UI,尽管不再处理任何内容。

这可能是什么原因?

【问题讨论】:

    标签: scala apache-spark mesos marathon


    【解决方案1】:

    您的示例仅显示转换。使用 Spark,只有 actions 会抛出异常,因为它们会延迟执行转换。我猜想任何在某处写出结果的尝试都会很快失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-14
      • 2018-10-26
      • 2017-03-29
      • 1970-01-01
      • 2018-07-15
      • 2016-05-26
      • 2020-03-08
      • 1970-01-01
      相关资源
      最近更新 更多