如何将大变量广播到spark中每个节点的本地磁盘

7kjnsjlb  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(470)

我知道,广播对于获取变量的本地副本很有用。而且变量的大小必须适合工作人员的内存。
然而,在我的例子中,我想得到大变量的本地副本,它不适合于worker的内存。
不使用spark中的broadcast函数如何广播这个大变量?

rnmwe5a2

rnmwe5a21#

不适合工人记忆的大变量
就像上面提到的ram,如果它不适合工作人员的内存,就没有办法使用它,即使您可以广播它。
如果您试图使用大型数据集进行查找,可以在每个工作节点上创建一个到数据库的连接池。如果您有一个模型,您可以将该模型保存到每个工作节点,并在创建过程中读取一个文件 foreachPartition . 根据您的用例,可能还有其他解决方案。

xzlaal3s

xzlaal3s2#

问题:
然而,在我的例子中,我想得到大变量的本地副本,它不适合于worker的内存。
不使用spark中的broadcast函数如何广播这个大变量?
恐怕这是不可能的(这将不适合工人的记忆…) sc.broadcast(..) 或者 functions.broadcast(hint) 请注意,内存限制为2gb(torrentbroadcast)。请参阅spark-6235-解决各种2g限制
您可以将该数据(您想要广播的)摄取到hadoop/hbase(或任何no-sql)中,或者可以是memcached,然后您可以查找。
看一下将spark数据加载到mongo/memcached中以供webservice使用

相关问题