每个cachedDistributed文件在map-reduce程序中有多少开销?我有一个mapreduce程序,其中我需要有50个cachedDistributed文件(非常小的大小),它们的开销似乎远远大于我只有1个cachedDistributed文件的情况。真的吗? 据我所知,cachedDistributed文件被复制到运行映射器的每台机器上,因此对cachedDistributed文件的访问是本地的,不应该有太多的开销。
答案 0 :(得分:0)
我认为您可能会尝试使用存档文件(文件在自动化任务节点上取消存档)。 您可以将归档文件添加到DistributedCache,意思是:
使用GenericOptionsParser
的工具。然后,您可以将要分发的文件指定为以逗号分隔的URI列表作为-archives
选项的参数。如果未指定方案,则假定文件是本地文件。因此,当您启动作业时,本地文件将复制到分布式文件系统(通常是HDFS)
$> hadoop jar foo.jar ClassUsingDistributedCacheFile -archives archive.jar input output
使用分布式缓存API(请参阅javaDoc)。使用API,URI指定的文件必须位于共享文件系统中(因此java API不会复制文件。
在运行任务之前,tasktracker会将文件从分布式文件系统复制到本地磁盘,如您所述。我认为开销来自于检索HDFS中的所有小文件