为什么累加器直接发送给驱动程序?

问题描述:

使用Spark,如果我已经将我的累加器定义为关联和可缩减的,为什么每个工作人员都直接将它们发送给驱动程序,而不是随着我的实际工作逐渐减少?这对我来说似乎有点愚蠢。为什么累加器直接发送给驱动程序?

+2

你能否详细说明一下?我想你对累加器的工作原理有错误的想法。或者你问任务结果? – zero323

+0

作为'broadcast'变量,'accumulators'在几种情况下非常有用。 –

Spark中的每个任务都维护着自己的累加器,并在特定任务完成时将其值返回给驱动程序。

由于在Spark中的累加器大多是一个诊断和监视共享任务之间的累加器会使这些几乎无用。更何况,特定任务完成之后的工人失败会导致数据丢失,并使累加器比现在更不可靠。

此外,这种机制与标准RDD reduce几乎相同,其中任务结果不断发送给驱动程序并在本地合并。

+0

没错,但我们假设我正在使用累加器来获取有关弹性搜索索引的额外信息,特别是查看了哪些文档。并且可以说在这个指数中有很多重复的,〜40%。在这种情况下,让每个工人向蓄能器发送关于他们的分区的信息,以使司机爆炸。如果蓄电池的减少与工作人员减少分区的方式相同,那么在“最终”蓄电池发送给驾驶员时,就不会有问题。 –

+0

这里没有区别。任务完成后,累加器和任务结果都会发送。这就是说,使用越来越多的收集累加器,尤其是实现应用程序逻辑并不是最好的想法。 – zero323

+0

等待...从一个任务的结果都发送到驱动程序,然后减少驱动程序?我不认为这是真的,我相信裁员是在工人之间逐步完成的,直到最终减少到司机身上为止。 –