我有一个SparkStreaming应用程序从kafka读取消息,所有任务处理数据的局部性为process_local。 当执行程序0中有待处理的任务时,推测将在其他执行程序中生效并重新运行该任务(请参见下图)
待处理的任务img:https://imgchr.com/i/FWWMDS
但是我发现,在推测生效之后,没有任务将分配给执行器0,并且数据局部性从process_local更改为任何执行器,这会导致更多时间来安排任务
执行者丢失了img:https://imgchr.com/i/FWW3Nj
集群执行器信息img:https://imgchr.com/i/FWWY3q
一些配置:
spark.speculation.interval 500ms
spark.scheduler.mode FIFO
spark.streaming.kafka.maxRatePerPartition 100
spark.locality.wait 1s
spark.defalut.parallelism 6
如何使任务再次分配给执行者0,并将数据局部性从任何位置恢复到process_local?
为什么任务将不再分配给执行者0?
答案 0 :(得分:0)
根本原因是程序中使用的kafka消费者lib版本,请改用kafka v0.10.2.1,请参见https://issues.apache.org/jira/browse/SPARK-20780