我有一个非常大的只读数据,我希望同一节点上的所有执行程序都能使用。这可能在Spark中。我知道,你可以广播变量,但是你可以广播真正的大数组。在引擎盖下,它是否在同一节点上的执行程序之间共享数据?这如何能够在同一节点上运行的执行程序的JVM之间共享数据?
答案 0 :(得分:5)
是的,在考虑您的数据是只读(不可变)时,您可以使用broadcast变量。广播变量必须满足以下属性。
所以,这里唯一的条件是你的数据必须能够适应一个节点的内存。这意味着数据不应该是任何超大或超出内存限制的数据,如大表。
每个执行者都会收到广播变量的副本,并且该特定执行程序中的所有任务都在读取/使用该数据。这就像向集群中的所有工作节点发送大型只读数据一样。 即,只运送给每个工人一次而不是每个任务和执行者(它的任务)读取数据。
答案 1 :(得分:0)
我假设您问执行者如何共享可变状态。如果您只需要共享不可变数据,则可以参考@Stanislav的答案。
如果您需要执行程序之间的可变状态,则有很多方法: