Spark中的累加器变量在哪里?

时间:2016-02-29 08:43:30

标签: apache-spark

我的假设是在驱动程序的Spark Context中维护累加器。与广播变量不同,累加器的值不会发送到群集中的工作节点。它是否正确 ?如果是这样,它在Spark上下文中如何更新的机制是什么?如何从工作节点上的各个执行程序实现更新?它是Singleton对象吗?

1 个答案:

答案 0 :(得分:1)

引用spark documentation

  然后,

在集群上运行的任务可以使用add方法或+ =运算符(在Scala和Python中)添加到它。但是,他们无法读懂它的价值。只有驱动程序可以使用其值方法读取累加器的值。

查看实现,似乎累加器将其值保持在驱动程序端(可以读取的位置)。

至于遗嘱执行人。我看到累加器在反序列化时注册到TaskContext。因此,执行程序似乎保留了自己的内部累加器,后来与驱动程序的实际累加器合并。

累加器不是单个对象,因为可以创建多个累加器。但是,执行程序有一种与驱动程序应用程序的原始累加器进行通信的方法。