spark收集器线程安全和.value()性能


0

从设计上讲,累加器不是线程安全的。但是,当调用.value()时,文档说明值返回到主驱动程序线程。驱动程序是否获取最新值?

此外,由于.value()操作会强制所有 job线程响应并将值发送回主驱动程序,因此代价高昂吗?如果是的话,那么还有什么选择呢?

我有我定制的线程安全累加器。不过,我觉得这可能是一个过分的杀戮。

1 答案


0
回复:“蓄能器在设计上不是线程安全的。”。

我在Spark文档中没有找到这个。您可能指的是Java累加器。驱动程序应用程序中累加器的线程安全性取决于如何实现驱动程序。

然而,有一件事要注意的是,蓄能器可能不可靠。这种不可靠性来自于一个失败的Spark任务可以被重试。在这种情况下,蓄能器不会给出准确的值。

Re:“此外,is.value()操作代价高昂,因为它强制

我不确定是不是这样,因为无论您是否使用累加器, executor都需要将heartbeat消息发送回驱动程序。此外,与collect之类的操作相比,它可能不是很多数据。(如果你在处理大数据)。在IMO中,调用.value()不应该是一个很大的性能问题。另外,在批处理中, executor完成任务后,通常希望调用的驱动程序应用程序.value()


我来回答

写文章

提问题

面试题