假设我有两个尺寸为M1和M2的RDD,分配到p分区。
我有兴趣知道(理论上/近似)操作过滤器,map,leftOuterJoin,++,reduceByKey等的成本是什么
感谢您的帮助。
答案 0 :(得分:3)
要衡量执行成本,了解如何执行spark执行非常重要。
简而言之,当您在RDD上执行一组转换时,spark将创建一个执行计划(也称为DAG),并以stages的形式将它们组合在一起,一旦触发操作就会执行。
map / filter / flatMap等操作组合在一起构成一个阶段,因为它们不会发生混乱,而join,reduceByKey等操作会创建更多阶段,因为它们涉及跨执行程序移动的数据。 Spark执行action
作为stages
的序列(如果它们彼此独立,则顺序执行或并行执行)。并且,每个stage
都会被执行为多个并行tasks
,其中一次运行的任务数量取决于RDD的分区和可用资源。
衡量运营成本的最佳方法是查看SparkUI。打开spark UI(默认情况下,如果您在本地模式下运行,它将在localhost:4040)。您可以在页面顶部找到几个标签,一旦您点击其中任何标签,您就会被定向到页面,该页面将显示相应的指标。
以下是我衡量绩效的方法:
Job
=>的费用执行所有stages
。Stage
=>的费用在舞台上执行每个并行tasks
的成本的平均值。Task
=>的费用默认情况下,任务占用一个CPU核心。消耗的内存在UI中给出,取决于分区的大小。由于Spark结合了这些转换并在RDD的分区上一起执行,因此很难为stage
内的每个转换导出指标。