【问题标题】:Issues running Spark application on ASW with compute optimized instances使用计算机优化实例在 AWS 上运行 Spark 应用程序的问题
【发布时间】:2017-09-21 14:31:33
【问题描述】:

您好,我正在比较我的 Spark 算法在两个不同集群上的性能。一种具有更高的计算能力,另一种具有更高的内存效率。

  1. 集群 1 有 5 个 AWS 实例节点 c4.xlarge 和 4 个 vCPU 和 7.5GiB 的主内存。
  2. 集群 2 有 5 个 AWS 实例节点 r4.xlarge,具有 4 个 vCPU 和 30.5 GiB 的主内存。

我的代码分为 13 个阶段,但实际上只有最后 5 个阶段是我需要处理的性能。下面这五个:

上图显示了在集群 2 上运行我的代码阶段的统计数据(内存效率),您可以看到阶段 11 和 13 需要几分钟,因为 flatMapma​​p 分别在列表上做一些繁重的顺序工作。

由于作业阶段 11 和 13 在每个分区中是连续的,我希望使用集群 1(计算效率)为这两个阶段获得更好的性能,但我在集群 1 上运行时实际得到的是最后 3 stage 只运行 32 个任务(所以只有 32 个分区)并且运行时间比较慢,比如每个 stage 多 2 分钟。

我意识到只有 3 个执行程序在运行,所以实际上 4 个实例中只有 3 个在处理我的问题。然后我所做的就是以这种方式提交应用程序:

spark-submit --master yarn --deploy-mode cluster —-num—executors 4 --executor-cores 4 --class myclass myjar myparams

所以我认为强制执行器的数量为—-num—executors 4 会强制第 4 个节点获得一个执行器但无事可做。那也没有用。只有 3 个执行者在 3 个实例上处于活动状态。

我确定问题是这个。您不认为顺序阶段应该在集群 1 上运行得更快吗?根据您的说法,集群 1 的主内存较少的问题是什么?

感谢您与我合作寻找答案。

【问题讨论】:

    标签: amazon-web-services apache-spark mapreduce rdd distributed-computing


    【解决方案1】:

    在 EMR 上以最佳方式使用资源需要一些配置调整以及一些关于 YARN 工作原理的知识。我强烈建议您阅读 Cloudera 的 this blog post,以了解如何使用 YARN 调整您的应用程序。

    无论如何,在这种特殊情况下,您只看到 3 个执行器而不是 4 个的原因是因为您已指定每个执行器应该有 4 个核心(带有标志 --executor-cores 4)。由于每个 worker 上只有 4 个可用内核,并且由于 YARN 在其中一个 worker 上使用 1 个内核来运行应用程序管理器,因此您基本上只有 3 个可用 4 个内核的工作者和 1 个可用 3 个内核的工作者。具有 3 个可用内核的 worker 无法运行需要 4 个内核的 executor,因此该 worker 上根本没有说明 executor。这样就剩下 3 个执行者了。

    无论如何,上述博客文章对此进行了详细描述:)

    哦,关于哪种类型的集群会运行得更快,你必须测试它。我遵循您的理论思考,但我早就放弃了尝试预测哪种类型的集群更适合特定任务。事实是,除非完全了解 Spark 如何创建其执行计划,否则您基本上只是在猜测。我建议您测试不同的实例类型并使用 Ganglia 来监控您的集群如何利用不同的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2016-03-24
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多