我在哪里可以找到 Spark 中的操作成本?

Dav*_*ics 5 performance processing-efficiency memory-efficient apache-spark rdd

假设我有两个大小为 M1 和 M2 的 RDD,它们平均分布在 p 个分区中。

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

谢谢您的帮助。

小智 5

要衡量执行成本,了解 Spark 执行的执行方式非常重要。

简而言之,当您在 RDD 上执行一组转换时,Spark 将创建一个执行计划(又名 DAG),并将它们以阶段的形式分组在一起,一旦您触发操作,阶段就会执行。

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

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

以下是我衡量性能的方法:

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

stage由于 Spark 将这些转换组合在一起并在 RDD 的分区上执行它们,因此为 a 中的每个转换导出指标确实很困难。