Apache Spark 如何将分区 ID 分配给其执行程序
Posted
技术标签:
【中文标题】Apache Spark 如何将分区 ID 分配给其执行程序【英文标题】:How does Apache Spark assign partition-ids to its executors 【发布时间】:2016-10-13 10:18:39 【问题描述】:我有一个长期运行的 Spark 流作业,它使用 16 个执行器,每个执行器只有一个核心。
我使用默认分区器(HashPartitioner
)将数据平均分配到 16 个分区。在updateStateByKey
function 内部,我从TaskContext.getPartitionId()
中检查了多个批次的分区ID,发现执行程序的分区ID 非常一致,但长时间运行后仍会更改为另一个ID。
我打算做一些优化来激发“updateStateByKey”API,但是如果partition-id在批次之间不断变化,就无法实现。
那么 Spark 什么时候改变执行器的 partition-id 呢?
【问题讨论】:
getPartitionId
不是执行者的 id。它是给定 RDD 中分区的 ID。
我所说的分区ID是由特定执行器处理的分区ID,我想知道执行器何时更改它一直在处理的分区ID。
【参考方案1】:
很可能,任务失败并再次重新启动,因此 TaskContext 已更改,partitionId 也已更改。
【讨论】:
以上是关于Apache Spark 如何将分区 ID 分配给其执行程序的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 动态分区 OverWrite 问题
Apache Spark - 将 UDF 的结果分配给多个数据框列