spark中的hadoop distributedcache功能

kx5bkwkv  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(447)

我正在寻找一个类似于spark中hadoop的分布式缓存的功能。我需要一个相对较小的数据文件(带有一些索引值)出现在所有节点中,以便进行一些计算。有没有什么方法可以在spark中实现这一点?
到目前为止,我的解决方法是将索引文件作为常规处理进行分发和缩减,这在我的应用程序中大约需要10秒钟。之后,我将指示它为广播变量的文件持久化,如下所示:

JavaRDD<String> indexFile = ctx.textFile("s3n://mybucket/input/indexFile.txt",1);
ArrayList<String> localIndex = (ArrayList<String>) indexFile.collect();    

final Broadcast<ArrayList<String>> globalIndex = ctx.broadcast(indexVar);

这使程序能够理解变量globalindex包含的内容。到目前为止,这是一个补丁,可能是好的,但我认为这不是最好的解决方案。如果有相当大的数据集或大量的变量,它仍然有效吗?
注意:我使用的是spark1.0.0,它运行在位于多个ec2示例的独立集群上。

bbuxkriu

bbuxkriu1#

只要我们使用广播变量,对于较大的数据集也是有效的。
spark文档中的“广播变量”允许程序员在每台机器上缓存一个只读变量,而不是在任务中附带一个副本。例如,它们可以有效地为每个节点提供一个大型输入数据集的副本。”

u2nhd7ah

u2nhd7ah2#

请看一看 SparkContext.addFile() 方法。我猜这就是你要找的。

相关问题