Hadoop DistributedCache类路径

时间:2012-02-14 03:48:37

标签: java hadoop

我有一个Hadoop 0.20.2群集。

我正在考虑使用DistributedCache将作业代码分发给所有节点。我无法理解addFileToClassPath()addArchiveToClassPath()之间的区别。从逻辑上讲,前者似乎是单个类文件,后者是罐子。但是在javadocs中,他们有这个示例代码:

DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job);

3 个答案:

答案 0 :(得分:2)

question可能会有所帮助

作为评论部分中提到的用户之一,存在与addArchiveToClassPath()相关联的错误。学习和解决问题的最佳方法是将Hadoop更新为1.0.0

From the apache website:

addArchiveToClassPath将存档路径添加到当前的类路径条目集。它还将存档添加到缓存中。存档文件将被解压缩,并在分发时添加到类路径中。

addFileToClassPath向当前的一组类路径条目添加文件路径它也将文件添加到缓存中。添加到此方法的文件在添加到类路径时不会解压缩。要将归档添加到类路径,请改用addArchiveToClassPath(Path)方法。

我意识到Hadoop文档是由一个不太懂英语语法的人编写的。我明白你为什么感到沮丧。

答案 1 :(得分:0)

更新Hadoop并不总是可行的 - 正如有人建议的那样,在这种情况下,只需将这个jar包装用于MR作业的jar就行了,即使大型JAR也不太可能显着影响性能。

此外,如果jar包含您要提交的作业的代码,则无需将其添加到DistributedCache,将作业提交到hadoop意味着Hadoop作业运行器将负责将jar分发给所有正在运行映射器或缩减器的节点。只有在需要一些外部数据时,才需要将文件添加到DistributedCache。

答案 2 :(得分:0)

我稍后发现了一些其他信息,并查看了源代码,发现“File”方法将一个本地文件复制到一个HDFS文件,但“Archive”版本将压缩的本地存档解压缩到HDFS。差别就是这样。

在相关的说明中,回答“为什么要这么麻烦?”评论 - 我有一个相对较大的JAR文件(20MB)和一个将使用相同的代码连续运行大约20个M / R作业的作业。它是迭代的。这样就可以节省大量的数据传输时间来上传代码。