在spark中,两个执行器之间是否可以共享数据?

5f0d552i  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(431)

我有一个非常大的只读数据,我希望同一个节点上的所有执行器都使用它。在spark有可能吗。我知道,你可以广播变量,但是你可以广播非常大的数组。在引擎盖下,它是否在同一节点上的执行者之间共享数据?如何在同一节点上运行的执行器的JVM之间共享数据?

wydwbb8l

wydwbb8l1#

我想你会问遗嘱执行人如何共享可变状态。如果您只需要共享不可变的数据,那么您可以参考@stanislav的答案。
如果需要执行者之间的可变状态,有很多方法:
共享外部fs/db
有状态数据流文件
可变分布式共享缓存点燃rdd

j5fpnvbx

j5fpnvbx2#

是的,当考虑到数据是只读的(不可变的)时,可以使用广播变量。广播变量必须满足以下属性。
适合记忆
不变的
分布到集群
所以,这里唯一的条件是你的数据必须能够在一个节点上放入内存。这意味着数据不应该是超大的或超出内存限制的,比如一个大表。
每个执行器接收广播变量的副本,并且该特定执行器中的所有任务都在读取/使用该数据。这就像向集群中的所有工作节点发送一个大的只读数据。i、 例如,只发送给每个工人一次,而不是与每个任务和执行者(它的任务)一起读取数据。

相关问题