如何知道哪个worker被执行了?

时间:2015-06-09 07:33:38

标签: apache-spark partitioning rdd

我只是试图找到一种方法来获取Spark中RDD分区的位置。

调用RDD.repartition()PairRDD.combineByKey()后,返回的RDD被分区。我想知道分区所在的工作实例(用于检查分区行为)?!

有人可以提供线索吗?

1 个答案:

答案 0 :(得分:0)

一个有趣的问题,我肯定没有那么多有趣的答案:)

首先,将转换应用于RDD与工作实例无关,因为它们是独立的“实体”。转换创建 RDD沿袭(=逻辑计划),而执行者只有在执行操作后才会进入阶段(没有双关语)(并且DAGScheduler将逻辑计划转换为执行计划作为一组阶段,任务)。

因此,我认为了解执行分区执行的唯一方法是使用org.apache.spark.SparkEnv来访问与单个执行程序相对应的BlockManager。这正是Spark知道/跟踪执行者(由他们的BlockManagers)。

您可以编写org.apache.spark.scheduler.SparkListener来拦截onExecutorAddedonBlockManagerAdded及其*Removed对应方,以了解如何将执行程序映射到BlockManagers(但相信SparkEnv就足够了。