【问题标题】:How does Apache Spark assign partition-ids to its executorsApache Spark 如何将分区 ID 分配给其执行程序
【发布时间】:2016-10-13 10:18:39
【问题描述】:

我有一个长期运行的 Spark 流作业,它使用 16 个执行器,每个执行器只有一个核心。

我使用默认分区器(HashPartitioner)将数据平均分配到 16 个分区。在updateStateByKeyfunction 内部,我从TaskContext.getPartitionId() 中检查了多个批次的分区ID,发现执行程序的分区ID 非常一致,但长时间运行后仍会更改为另一个ID。

我打算做一些优化来激发“updateStateByKey”API,但是如果partition-id在批次之间不断变化,就无法实现。

那么 Spark 什么时候改变执行器的 partition-id 呢?

【问题讨论】:

  • getPartitionId 不是执行者的 id。它是给定 RDD 中分区的 ID。
  • 我所说的分区ID是由特定执行器处理的分区ID,我想知道执行器何时更改它一直在处理的分区ID。

标签: apache-spark spark-streaming


【解决方案1】:

很可能,任务失败并再次重新启动,因此 TaskContext 已更改,partitionId 也已更改。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2018-02-16
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2017-04-21
    • 2021-11-30
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多