Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 来自卡夫卡的火花流一个任务落后,导致整个批次的速度减慢_Apache Spark_Apache Kafka_Spark Streaming - Fatal编程技术网

Apache spark 来自卡夫卡的火花流一个任务落后,导致整个批次的速度减慢

Apache spark 来自卡夫卡的火花流一个任务落后,导致整个批次的速度减慢,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,我有一个spark流媒体应用程序,可以通过网络从卡夫卡读取数据。需要注意的是,集群和Kafka服务器位于不同的地理位置 完成一项工作的平均时间约为8-10分钟(我每隔10分钟运行一次)。然而,在某些批次中,作业完成时间会迅速增加。它的上升量通常是随机的(可能是20分钟、50分钟或一小时)。挖掘后,我发现所有任务都按时完成,除了一个任务,因为它影响了整个周转时间。例如,下面是一个此类实例的任务时间日志: 在这种情况下,任务6花费了54分钟,而其他任务完成得非常快,即使输入分割是相同的。我已将此归

我有一个spark流媒体应用程序,可以通过网络从卡夫卡读取数据。需要注意的是,集群和Kafka服务器位于不同的地理位置

完成一项工作的平均时间约为8-10分钟(我每隔10分钟运行一次)。然而,在某些批次中,作业完成时间会迅速增加。它的上升量通常是随机的(可能是20分钟、50分钟或一小时)。挖掘后,我发现所有任务都按时完成,除了一个任务,因为它影响了整个周转时间。例如,下面是一个此类实例的任务时间日志:

在这种情况下,任务6花费了54分钟,而其他任务完成得非常快,即使输入分割是相同的。我已将此归因于网络问题(速度慢/阻塞),我认为重新启动此任务可以节省大量时间


spark是否允许一些控制,通过这些控制,我们可以在不同的节点上重新启动慢速任务,然后将结果用于首先完成的任务?或者是否存在我不知道的更好的解决方案?

我肯定会看看
spark.Projection.*
配置参数,并将其设置为更具攻击性,例如,在您的情况下,这些参数将非常合适,我认为:

  • spark.projection=true
  • spark.Projection.interval=1min
    (spark检查要推测的任务的频率。)
  • spark.projection.multiplier=1.1
    (一项任务的速度比要考虑用于推测的中值慢多少倍。)
  • spark.Projection.quantile=0.5
    (在为特定阶段启用推测之前必须完成的任务百分比。)

您可以找到配置参数的完整列表。

如果您的应用程序中有多个作业,设置此配置可能会有所帮助:spark.streaming。concurrentJobs@bistaumanga你说的多重工作是什么意思?这是一个流媒体应用程序。每次迭代它都会运行几个map reduces。我的意思是在同一个应用程序中执行多个操作,比如计算事件数、按组计数、计算某个键的平均值。。。有多个操作我认为计算阶段不需要花费太多时间,并行化将是有益的。它的基本ETL大约是每10分钟300万个事件,分为10个并行运行的分区。那么它一定是其他东西,可能是在您的网络中,或者。。。。如果您解决了此问题,请发布解决方案。这可能对某人有帮助…谢谢这看起来确实很有趣。我会仔细阅读这篇文章,如果它对我有用的话,我会回来的!