我有一个长期运行的Spark流工作,它使用16个执行器,每个执行器只有一个核心。
我使用默认分区程序(HashPartitioner
)将数据平均分配到16个分区。在updateStateByKey
函数内部,我检查了TaskContext.getPartitionId()
的多个批次的分区ID,发现执行程序的partition-id非常一致,但在长时间运行后仍然会更改为另一个id。
我正在计划进行一些优化以激发“updateStateByKey”API,但如果partition-id在批次之间不断变化,则无法实现。
那么Spark何时更改执行程序的分区ID?
答案 0 :(得分:0)
很可能是任务失败并重新启动,因此 TaskContext 发生了变化,partitionId 也发生了变化。