【问题标题】:Can I use Hadoop's distributed cache in standalone mode?我可以在独立模式下使用 Hadoop 的分布式缓存吗?
【发布时间】:2012-06-06 17:48:20
【问题描述】:

我正在 Hadoop 中编写 Java MapReduce 程序,每个 reducer 都需要访问静态 XML 文件(其中包含一些关于将规则应用于值列表的业务逻辑)。我决定将此文件存储在分布式缓存中,然后利用分布式缓存 API 在每个减速器中访问它(序列化它)。我还没有实现这个,但是在 HDFS/分布式模式下使用这个功能时,API 看起来很简单。但是,是否可以在伪分布式独立模式下使用它来进行测试?它将如何工作?

另外,在每个 reducer 中序列化文件是不是一个坏主意?我愿意就将“全局静态数据”分发给减速器的其他方式提出建议。

谢谢!

【问题讨论】:

标签: hadoop mapreduce


【解决方案1】:

是的,您可以 - 它的工作方式与在真实集群中的工作方式相同。

如果分布式缓存不固定,这是一个好主意。另一种选择是将数据打包到包含作业代码的 jar 中,在这种情况下,当您必须更改 XML 时它不会那么灵活(您仍然可以更改 jar,但这不是一种干净的方法) )

【讨论】:

  • 谢谢阿农。你会说在多大的文件数据大小下使用分布式缓存会变成一个坏主意?我将存储一个包含大约 140K 行 (20 MB) 的文件,映射器和化简器将搜索该文件。我将(通过 BufferedReader)将它加载到 Mapper 或 Reducer 的 configure() 方法中的 HashMap 中,以便每个 map() 调用都可以在其中查找一个元素。这仍然是分布式缓存的正常使用(或滥用)吗?
  • 你可以只衡量你的表现——但在我看来,它看起来是一个合理的用途。如果您将信息存储在其他地方(真正的分布式缓存,如 memcached、hbase 等),您的 IO 成本会更高 - 与 hadoop 的分布式缓存一样,该文件每台机器只复制一次,而在其他选项中,每个地图都会读取文件网络。
  • 我正在尝试在独立环境中使用 DistributedCache。我可以添加文件,它不会抛出任何异常。当我试图获取文件时,它会抛出空值。你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多