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
Apache spark Spark tasks不';似乎分布不均_Apache Spark_Distributed - Fatal编程技术网

Apache spark Spark tasks不';似乎分布不均

Apache spark Spark tasks不';似乎分布不均,apache-spark,distributed,Apache Spark,Distributed,我正在运行一个Spark作业,任务似乎分布不均匀(见附件)。有没有办法使任务分布更均匀?谢谢 我认为任务在不同的工作人员之间是均匀分布的,因为每个任务在地址列中有不同的端口号。仅看您的屏幕截图,很难诊断出什么。然而,有两件事你可能需要考虑: Spark UI(从1.3.1开始,我还没有在1.4.0中尝试)只显示已完成任务的统计数据总和。如果您在应用程序运行时拍摄了此屏幕截图,则很可能某些任务正在运行,只是没有显示在统计信息中 在给定的Spark阶段,您不能有比数据分区更多的任务。如果没有更多的

我正在运行一个Spark作业,任务似乎分布不均匀(见附件)。有没有办法使任务分布更均匀?谢谢


我认为任务在不同的工作人员之间是均匀分布的,因为每个任务在地址列中有不同的端口号。

仅看您的屏幕截图,很难诊断出什么。然而,有两件事你可能需要考虑:

  • Spark UI(从1.3.1开始,我还没有在1.4.0中尝试)只显示已完成任务的统计数据总和。如果您在应用程序运行时拍摄了此屏幕截图,则很可能某些任务正在运行,只是没有显示在统计信息中

  • 在给定的Spark阶段,您不能有比数据分区更多的任务。如果没有更多的代码,很难说,但是您可能希望使用rdd.partition()函数,通常可以使用
    rdd.repartition(sparkContext.getConf.getInt(“spark.executor.instances”,defaultValueInt)
    在处理之前生成更多的分区,从而平滑执行者的负载


如果您想要平均分布,可以在将文件加载到RDD时使用spark的分区功能

val ratings = sc.textFile(File_name,partition)

就像你有10个节点,每个节点有2个核心,那么你可以有20个分区值,同样地。

仔细查看发布的图像,我可以确定两个主要事实:

  • 任务的数量分布均匀,最大变化为20个任务
  • 分配给每个执行器的运行时间相差很大,从3.0分钟(~80个任务)到17.0分钟(~60个任务)
这让我想知道您的应用程序的性质。是所有任务都相同,还是其中一些任务需要比其他任务更多的时间来完成?如果任务是异构的,则需要更仔细地研究您的问题。想象一下以下场景:

  • 任务数:20,每个任务需要10秒才能完成,最后一个任务除外:

    Task 01: 10 seconds
    Task 02: 10 seconds
    Task 03: 10 seconds
    Task ...
    Task 20: 120 seconds
    
  • 执行者人数:4人(每个人都有一个核心)
如果我们必须平均分配任务,我们将看到每个执行者总共必须处理5个任务。考虑到一个执行者被分配了第20个任务,需要120秒才能完成,执行流程如下:

  • 到第二个40,每个执行者将能够完成前4项任务,考虑到第20项任务将留在最后
  • 到第二个50秒时,除一个执行者外,每个执行者都将完成所有任务。剩下的执行者仍将计算第20个任务,这些任务将在120秒后完成
最后,用户界面将显示与您类似的结果,任务数均匀分布,但实际计算时间不均匀

Executor 01 -> tasks completed: 5 -> time: 0:50 minutes
Executor 02 -> tasks completed: 5 -> time: 0:50 minutes
Executor 03 -> tasks completed: 5 -> time: 0:50 minutes
Executor 04 -> tasks completed: 5 -> time: 2:40 minutes

虽然不一样,但在您的情况下可能会发生类似的事情。

您的意思是在执行者之间均匀分配任务或控制任务数??您能否提供更多有关您的应用程序以及如何使用spark启动应用程序的信息?乍一看,任务数似乎是均匀分布的,所以我猜是each任务有不同的工作负载。同样,更多的信息会更好。对于工作负载不均匀的任务,有推荐的解决方案吗?