0

在 map-reduce 程序中每个 cachedDistributed 文件有多少开销?我有一个 mapreduce 程序,其中我需要 50 个 cachedDistributed 文件(非常小),似乎它们的开销比我只有 1 个 cachedDistributed 文件的情况大得多。真的吗?据我了解,cachedDistributed 文件被复制到每台运行映射器的机器上,因此对 cachedDistributed 文件的访问是本地的,不应该有太多的开销。

4

1 回答 1

0

我认为您可以尝试使用存档文件(文件在任务节点上自动取消存档)。您可以通过以下方式将存档文件添加到 DistributedCache:

  • 用使用的工具GenericOptionsParser。然后,您可以将要分发的文件指定为以逗号分隔的 URI 列表作为-archives选项的参数。如果您不指定 scheme ,则假定文件是本地的。因此,当您启动作业时,本地文件被复制到分布式文件系统(通常是 HDFS)

    $> hadoop jar foo.jar ClassUsingDistributedCacheFile -archives archive.jar input output

  • 使用分布式缓存 API(参见 javaDoc)。使用 API,URI 指定的文件必须位于共享文件系统中(因此 java API 不会复制文件。

正如您所说,在运行任务之前,tasktracker 会将文件从分布式文件系统复制到本地磁盘。我认为开销来自检索 HDFS 中的所有小文件

于 2013-09-27T09:53:12.787 回答