【问题标题】:How to know which worker a partition is executed at?如何知道分区在哪个工作人员处执行?
【发布时间】:2015-08-23 21:30:12
【问题描述】:

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

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

谁能给个提示?

【问题讨论】:

  • 您可以查看您的 Web UI,了解有关您的作业、阶段和分区的更多详细信息。

标签: apache-spark partitioning rdd


【解决方案1】:

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

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

所以,我相信知道分区在哪个执行器上执行的唯一方法是使用org.apache.spark.SparkEnv 访问对应于单个执行器的 BlockManager。这正是 Spark 知道/跟踪执行者的方式(通过他们的 BlockManagers)。

您可以编写一个 org.apache.spark.scheduler.SparkListener 来拦截 onExecutorAddedonBlockManagerAdded 和它们的 *Removed 对应项,以了解如何将执行程序映射到 BlockManager(但相信 SparkEnv 就足够了)。

【讨论】:

  • 这也是我的第一个想法,但我发现没有任何帮助。我必须承认我有点惊讶发现它。
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2017-08-18
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多