gpt4 book ai didi

apache-spark - 避免排队 Spark 微批处理

转载 作者:行者123 更新时间:2023-12-04 04:12:42 25 4
gpt4 key购买 nike

我创建了 spark 应用程序,它从 Apache flume 获取输入数据。我将我的 spark 批处理间隔设置为 4 分钟,这样 spark 将每 4 分钟处理一次数据。但是我有一些昂贵的 spark 批处理需要相当长的时间(比如 30 分钟),所以在此期间大约有 7 个 spark 批处理将在队列中待处理,一旦昂贵的批处理执行完成,它将开始一个接一个地处理。通过这种方式,我的 Spark 在最长时间内保持忙碌。那么我怎样才能避免这种排队呢?如果我的 spark 批处理正在执行并且它需要超过 4 分钟,我不想在队列中添加下一个 spark 批处理。

我正在如下启动 Spark

val ssc = new StreamingContext(sc, 240000)// 240000 equals to 4 minutes

最佳答案

您可以为其使用锁定机制。您需要在调度程序端维护单行数据以进行锁定。因此,当您的 spark 作业在 4 分钟后触发时,它将首先检查该文件/数据库表,如果它返回锁 True然后它将terminate什么都不做。

我在我的 spark 作业中也使用了相同的方法,每 3 分钟触发一次。因此,我维护了 ElasticSearch 索引,我在其中保存包含 application id, start and End time, spark Job Name, Status, Lock 等数据的单个记录.因此,当 Spark 作业触发时,它首先检查索引是否为 False。然后它overwrite该行/记录为 True如果 Lock 是 True,则包含其他详细信息并开始运行然后它通过记录一条消息停止执行 具有 spark 作业名称的应用程序 ID 正在运行。 3 分钟后,新的 Spark 作业重新触发并再次检查所有内容。当 spark job 得到 finish , 它将锁更改为 False以便可以运行下一个作业。如果作业失败,我也会处理这个问题,所以当作业因任何原因失败时,它会将锁定标记为 False这样下一个触发器就可以毫无问题地运行。

根据要求,您可能需要更改一些内容。

关于apache-spark - 避免排队 Spark 微批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com