Apache spark 火花任务持续时间差

Apache spark 火花任务持续时间差,apache-spark,scheduled-tasks,apache-spark-sql,Apache Spark,Scheduled Tasks,Apache Spark Sql,我运行的应用程序将数据(.csv)从s3加载到数据帧中,然后将这些数据帧注册为临时表。之后,我使用SparkSQL连接这些表,最后将结果写入数据库。对我来说,目前的瓶颈问题是,我觉得任务并没有被平均分配,我并没有得到任何好处,并行化和集群内的多个节点。更准确地说,这是问题阶段任务持续时间的分布 我有没有办法实施更均衡的分配?可能是手动编写map/reduce函数? 不幸的是,此阶段还有6个任务仍在运行(1.7小时atm),这将证明存在更大的偏差。有两种可能:一种在您的控制下,另一种。。不幸的是,

我运行的应用程序将数据(.csv)从s3加载到数据帧中,然后将这些数据帧注册为临时表。之后,我使用SparkSQL连接这些表,最后将结果写入数据库。对我来说,目前的瓶颈问题是,我觉得任务并没有被平均分配,我并没有得到任何好处,并行化和集群内的多个节点。更准确地说,这是问题阶段任务持续时间的分布 我有没有办法实施更均衡的分配?可能是手动编写map/reduce函数?
不幸的是,此阶段还有6个任务仍在运行(1.7小时atm),这将证明存在更大的偏差。

有两种可能:一种在您的控制下,另一种。。不幸的是,一个人很可能不是

  • 倾斜数据。检查分区是否具有相对相似的大小,比如在三到四倍的范围内
  • Spark任务运行时的固有可变性。我在Spark Standalone、Thread和Mesos上看到过散乱者的大延迟行为,但没有明显的原因。病征包括:
    • 长时间(分钟),承载散乱任务的节点上很少或没有cpu或磁盘活动
    • 数据大小与散乱者之间没有明显的相关性
    • 不同节点/工作者可能会在同一作业的后续运行中遇到延迟

要检查的一件事是:执行
hdfs dfsadmin-report
hdfs fsck
检查hdfs是否健康。

我已经检查了hdfs,没问题。关于分区,我认为这可能是一个问题。起初,我没有对任何东西进行分区,所以默认情况下我创建了200个任务。我试图通过
sqlContext.sql(“SELECT*FROM a,b其中a.id=b.a_id”)…coalesce(500).toDF()强制我自己的分区,但仍然只有200个分区,您可以在此处看到:。我遗漏了什么吗?我想如果
新分区>=旧分区
,那么
合并
将不受影响。尝试
repartition(500)
。我已经将
repartition(5000)
,并且我已经识别出具有5k任务的阶段。然而,这并没有在全球范围内起到任何作用,因为并行化再一次撞上了“墙”,而且仍然很少有任务完全失去平衡。更有趣的是,这是在200个任务的阶段,所以我相信我能做的不多。谢谢你的帮助,我将寻找解决这个问题的替代方案。当然,如果你有任何想法,我会很感激的。