首页 > 解决方案 > 检查 Spark 流作业是否挂起的最佳方法

问题描述

我有 Spark 流应用程序,它基本上从 Kafka 获取触发消息,启动批处理,这可能需要长达 2 小时。

在某些事件中,一些作业无限期地挂起并且没有在通常的时间内完成,目前我们无法在不手动检查 Spark UI 的情况下确定作业的状态。我想有一种方法可以让当前正在运行的 spark 作业挂起或不挂起。所以基本上,如果它挂起超过 30 分钟,我想通知用户以便他们采取行动。我有什么选择?

我看到我可以使用驱动程序和执行程序的指标。如果我要选择最重要的一个,那将是最后收到的批次记录。当 StreamingMetrics.streaming.lastReceivedBatch_records == 0 它可能意味着 Spark 流作业已停止或失败时。

但在我的场景中,我只会收到 1 个流式触发事件,然后它将启动可能需要长达 2 小时的处理,因此我将无法依赖收到的记录。

有没有更好的办法?TIA

标签: apache-sparkapache-spark-sqlbigdataspark-streaming

解决方案


YARN 提供 REST API 来检查应用程序的状态和集群资源的使用状态。

通过 API 调用,它将提供正在运行的应用程序及其启动时间和其他详细信息的列表。您可以拥有一个简单的 REST 客户端,它可能每 30 分钟左右触发一次,并检查作业是否运行超过 2 小时,然后发送一个简单的邮件警报。

以下是 API 文档:

https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Applications_API


推荐阅读