Apache spark Spark tasks不';似乎分布不均
我正在运行一个Spark作业,任务似乎分布不均匀(见附件)。有没有办法使任务分布更均匀?谢谢Apache spark Spark tasks不';似乎分布不均,apache-spark,distributed,Apache Spark,Distributed,我正在运行一个Spark作业,任务似乎分布不均匀(见附件)。有没有办法使任务分布更均匀?谢谢 我认为任务在不同的工作人员之间是均匀分布的,因为每个任务在地址列中有不同的端口号。仅看您的屏幕截图,很难诊断出什么。然而,有两件事你可能需要考虑: Spark UI(从1.3.1开始,我还没有在1.4.0中尝试)只显示已完成任务的统计数据总和。如果您在应用程序运行时拍摄了此屏幕截图,则很可能某些任务正在运行,只是没有显示在统计信息中 在给定的Spark阶段,您不能有比数据分区更多的任务。如果没有更多的
我认为任务在不同的工作人员之间是均匀分布的,因为每个任务在地址列中有不同的端口号。仅看您的屏幕截图,很难诊断出什么。然而,有两件事你可能需要考虑:
- Spark UI(从1.3.1开始,我还没有在1.4.0中尝试)只显示已完成任务的统计数据总和。如果您在应用程序运行时拍摄了此屏幕截图,则很可能某些任务正在运行,只是没有显示在统计信息中
- 在给定的Spark阶段,您不能有比数据分区更多的任务。如果没有更多的代码,很难说,但是您可能希望使用rdd.partition()函数,通常可以使用
在处理之前生成更多的分区,从而平滑执行者的负载rdd.repartition(sparkContext.getConf.getInt(“spark.executor.instances”,defaultValueInt)
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人(每个人都有一个核心)
- 到第二个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任务有不同的工作负载。同样,更多的信息会更好。对于工作负载不均匀的任务,有推荐的解决方案吗?