【问题标题】:Hadoop DistributedCache functionality in SparkSpark 中的 Hadoop DistributedCache 功能
【发布时间】:2014-09-02 14:20:14
【问题描述】:

我正在寻找类似于 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 包含的内容。到目前为止,它是一个对我来说可能没问题的补丁,但我认为这不是最好的解决方案。对于更大的数据集或大量变量,它仍然有效吗?

注意:我使用的是在位于多个 EC2 实例的独立集群上运行的 Spark 1.0.0。

【问题讨论】:

  • 不能缓存文件吗?基本上存储为 RDD。将是可扩展的。
  • 我认为广播变量和缓存它是一样的。我的问题主要是要知道是否存在直接缓存方法,而不必先“处理”它。
  • 所以我个人认为广播 var 在可用性方面比 distcache 更好,但是你有理由只使用 Hadoop 的分布式缓存
  • @Venkat 这不是一个等效的解决方案,distcache 用于在多个节点上存储 same 数据,RDD 用于在每个节点上存储不同的数据节点并且不能为此目的进行扩展

标签: hadoop apache-spark distribute distributed-cache


【解决方案1】:

请查看SparkContext.addFile() 方法。 猜猜这就是你要找的东西。

【讨论】:

    【解决方案2】:

    只要我们使用广播变量,它应该对更大的数据集也有效。

    来自 Spark 文档 “广播变量允许程序员在每台机器上缓存一个只读变量,而不是随任务发送它的副本。例如,它们可以用于为每个节点提供一个大型输入数据集的副本一种有效的方式。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2014-11-01
      相关资源
      最近更新 更多