【问题标题】:How to share data across multiple reducers on the same host如何在同一主机上的多个 reducer 之间共享数据
【发布时间】:2015-08-28 20:01:14
【问题描述】:

我有这种情况,我需要让一个数据集在多个 reducer 中可用。我不想为每个减速器在内存中加载相同的数据,因为我不认为它是最佳行为并且文件大小很大。我不想将数据存储在集群之外,而是进行网络调用。

【问题讨论】:

  • 你能详细说明一下吗?您是否希望来自映射器的数据到达多个减速器而不是单个减速器?

标签: hadoop mapreduce hadoop-streaming


【解决方案1】:

将其放入 DistributedCache 可能是唯一的选择。

【讨论】:

  • 您能否举例说明一下,因为我是这个概念的新手。如果我在 DistributedCache 中加载文件,我可以跨所有 reducer 访问数据吗?
  • 经过一番搜索,我找到了这个教程。 developer.yahoo.com/hadoop/tutorial/module5.html#auxdata。我不太确定的一件事是分布式缓存在主机上本地加载文件。然后每个映射器实例都可以将文件的内容加载到数据结构中,这基本上会消耗相同数量的内存 (RAM) 使用量,对吗?除非我在这里遗漏了什么。你能澄清一下吗
  • 通过将其加载到分布式缓存中,您将能够跨所有减速器访问该文件。您的减速器设置为运行的任务跟踪器会将文件复制到其本地磁盘,您可以使用该文件。但这仅在以 KB 为单位的小数据集的情况下才是最佳的,如果在这种情况下可以节省一些网络带宽。但是,如果您的文件很大,那么您可以创建一个映射文件并以存档格式创建映射文件,然后使用 -archive 选项将它们添加到缓存中。您可以阅读权威指南以获取示例。
  • 您可以在blog.cloudera.com/blog/2011/01/…获取地图文件的一些信息
  • 这并不能解决每个reducer任务运行时将文件内容加载到内存中的问题。我希望在访问这些文件时减少/不减少 reducer 任务的开销
猜你喜欢
  • 2018-11-20
  • 2019-07-31
  • 2016-04-15
  • 2015-03-03
  • 2012-04-03
  • 1970-01-01
  • 2021-06-06
  • 2017-06-04
  • 2016-12-16
相关资源
最近更新 更多