YARN 上的 Spark - 任务运行非常慢



我在 YARN 集群上运行 Spark 作业,总共创建了 250 个任务,几乎每次 230 个任务在 10 分钟内完成,但剩余的 20 个任务还需要 1 小时才能完成。

它在saveAsTextFile()操作中需要时间。

而且写的大部分部分都是空的[几乎超过 150 个是空的]

任何具体的原因,为什么它运行得很慢。我在标准日志中没有看到任何错误。

这可能是出于多种原因,要完全回答,我们需要查看代码。即使它需要时间 saveAsTextFile() ,导致它的操作可能是另一个。Mu预感是,在保存操作之前,您正在使用reduceByKeyGROUP BY

现在,如果您具有倾斜的数据(即不平衡的数据),其中大多数记录仅属于几个键,则这些操作可能会出现问题。例如,如果您按美国州分组,则只有 50 个,因此您实际上只有 50 个任务在做工作,因此即使您总共有 250 个任务,它们也不会有任何输入。或者,假设您按国家/地区对用户进行分组,但大多数用户来自美国:您将有一个任务处理大部分数据,并且比其他任务晚得多。

因此,您需要做的是在保存之前查看执行分组/减少的任何操作,并查看数据以查看是否存在任何偏差。

RDD中元素的这种错误分布可能是由具有错误哈希函数的元素引起的。 默认分区使用HashPartitioner,这通过取element.hashCode() % numberOfPartitions来分配分区。如果你的哈希函数的元素分布很差,那么你将有高度倾斜的分区和空分区。

检查 RDD 中任何元素的 hashCode() 方法,并验证它是否为您的元素生成了良好的结果分布。请参阅哈希代码方法的最佳实现,以获取有关实现hashCode()的好建议。 您的 IDE 可能会为您生成一个良好的实现。

相关内容

  • 没有找到相关文章