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