【问题标题】:Where can I find the cost of the operations in Spark?在哪里可以找到 Spark 中的操作成本?
【发布时间】:2016-09-02 16:34:06
【问题描述】:

假设我有两个大小为 M1 和 M2 的 RDD,平均分配到 p 个分区中。

我有兴趣知道(理论上/大约)操作过滤器、映射、leftOuterJoin、++、reduceByKey 等的成本是多少。

感谢您的帮助。

【问题讨论】:

  • 好吧,spark 的评估是惰性的,所以它真的取决于你的完整 RDD 操作链,因为有些东西可能会被优化
  • Dataset,你可以使用explain给你一个查询计划。

标签: performance apache-spark rdd processing-efficiency memory-efficient


【解决方案1】:

要衡量执行成本,了解 spark 执行的方式很重要。

简而言之,当您在 RDD 上执行一组转换时,spark 将创建一个执行计划(也称为 DAG),并以 stages 的形式将它们组合在一起,一旦您触发操作就会执行。

像 map/filter/flatMap 这样的操作被组合在一起形成一个阶段,因为它们不会产生 shuffle,而像 join、reduceByKey 这样的操作会创建更多的阶段,因为它们涉及要在 executor 之间移动的数据。 Spark 将action 作为stages 的序列执行(如果它们彼此独立,则按顺序或并行执行)。而且,每个stage 都作为多个并行tasks 执行,其中一次运行的任务数取决于RDD 的分区和可用资源。

衡量运营成本的最佳方法是查看 SparkUI。打开 spark UI(如果您在本地模式下运行,默认情况下它将位于 localhost:4040)。您会在页面顶部找到几个选项卡,单击其中任何一个选项卡后,您将被定向到显示相应指标的页面。

这是我衡量性能的方法:

  • Job 的成本 => 执行其所有 stages 的成本总和。
  • Stage 的成本 => 在舞台上执行每个并行 tasks 的成本平均值。
  • Task 的成本 => 默认情况下,一个任务消耗一个 CPU 内核。消耗的内存在 UI 中给出,具体取决于分区的大小。

很难为stage 中的每个转换导出指标,因为 Spark 组合了这些转换并在 RDD 的分区上一起执行它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多