我有一个spark流应用程序,通过网络读取Kafka的数据。需要注意的是,集群和kafka服务器位于不同的地理位置。
完成一项工作的平均时间约为8-10分钟(我每隔10分钟运行一次)。然而在某些批次中,作业完成时间突然上升。它的上升量通常是随机的(可能是20分钟、50分钟或一小时)。经过挖掘,我发现所有的任务都按时完成,除了一个任务,因为它影响了整个周转时间。例如,下面是一个这样的示例的任务时间日志:
在这种情况下,任务6花费了54分钟,而其他任务完成得非常快,即使输入分割是相同的。我认为这与网络问题有关(速度慢/阻塞),我认为重新启动此任务可以节省大量时间。
spark是否允许一些控制,通过这些控制,我们可以在不同的节点上重新启动缓慢的任务,然后将结果用于首先完成的任务?还是有一个更好的解决这个问题的办法,我不知道?
1条答案
按热度按时间pgvzfuti1#
我一定要看看
spark.speculation.*
配置参数,并将其设置为更具攻击性,例如在您的情况下,这些参数将非常合适,我认为:spark.speculation = true
spark.speculation.interval = 1min
(spark多久检查一次要推测的任务。)spark.speculation.multiplier = 1.1
(一项任务的速度要比用于推测的中位数慢多少倍。)spark.speculation.quantile = 0.5
(在为特定阶段启用推测之前必须完成的任务的百分比。)您可以在这里找到配置参数的完整列表。