【问题标题】:Get More Reduce Tasks in rdd.TreeAggregate在 rdd.TreeAggregate 中获取更多 Reduce 任务
【发布时间】:2016-04-25 19:50:41
【问题描述】:

你的另一个 Spark 问题!

所以我使用 mllibs 原生 SVMWithSGD 训练了一个 SVM 模型。训练 rdd 分为 114 个分区,每个分区大约有 2700 个实例。

每个迭代作业分为两个阶段。第一阶段,随着我的节点线性扩展。然而,第二阶段仅分为 10 个左右的任务,远少于可用的 V 核,因此该阶段不能线性扩展。

我希望这个阶段被划分为更多的任务,以便更多的执行者可以并行处理它。有没有办法做到这一点?

还有一个巨大的调度器延迟,我了解到这是执行器和调度器之间通信所需的时间。

【问题讨论】:

  • 所以我想要的不是更多的 reducer 任务,而是更少的任务。

标签: apache-spark rdd apache-spark-mllib


【解决方案1】:

您的特征向量的维度是多少? 2700 个训练实例的 114 个分区只有 300k 个训练实例。根据维度,您应该考虑将 RDD 重新分区为更少数量的分区(例如 5-10)。

【讨论】:

  • 11 725 480 个属性,其中大约 3300 个非零。在稀疏向量中。所以更少的输入分区会产生更多的reducer任务?
  • 另外,将 rdd 重新分区为更小的数字会不会减少可以处理它的执行者数量?
  • 老实说,300k 个训练示例可以通过非并行实现(例如 scikit-learn)轻松处理。除非出于其他原因(例如 Spark 是特征提取/处理管道的一部分),否则我不会为此使用 Spark。如果您确实使用 Spark,我希望更少的分区将允许每个执行程序完成更多的工作(因为网络通信将主导总体成本)。尝试更少的分区,看看对运行时的总体影响是什么。
  • 所以我尝试将 RDD 减少为 5 个分区,然后,调度程序延迟减少了 66%。谢谢尼克
猜你喜欢
  • 2012-05-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多