Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop分布式缓存类路径_Java_Hadoop - Fatal编程技术网

Java Hadoop分布式缓存类路径

Java Hadoop分布式缓存类路径,java,hadoop,Java,Hadoop,我有一个Hadoop 0.20.2集群 我正在考虑使用将作业代码分发到所有节点。我无法理解addFileToClassPath()和addArchiveToClassPath()之间的区别。从逻辑上讲,前者似乎适用于单类文件,后者适用于JAR。但就在Javadoc中,他们有以下示例代码: DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job); 这可能会有帮助 作为评论部分提到的用户之一,有一个与addArc

我有一个Hadoop 0.20.2集群

我正在考虑使用将作业代码分发到所有节点。我无法理解
addFileToClassPath()
addArchiveToClassPath()
之间的区别。从逻辑上讲,前者似乎适用于单类文件,后者适用于JAR。但就在Javadoc中,他们有以下示例代码:

DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job);
这可能会有帮助

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

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

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


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

更新Hadoop并不总是可行的——正如有人建议的那样,在这种情况下,将这个jar与用于MR作业的jar打包是有意义的,即使是一个大的jar也不太可能显著影响性能


此外,如果jar包含您正在提交的作业的代码,则无需将其添加到DistributedCache,将作业提交到hadoop意味着hadoop作业运行程序将负责将jar分发到运行映射器或还原器的所有节点。只有当您希望在工作中附带一些外部数据时,才需要将文件添加到DistributedCache。

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


在一个相关的注释中,为了回答“为什么这么麻烦?”的评论——我有一个相对较大的JAR文件(20MB)和一个作业,它将使用相同的代码连续运行大约20个M/R作业。它是迭代的。这将节省大量的数据传输,以便一次性上载代码。

为什么要这样做?当您使用
hadoop jar…
提交作业时,它会自动将
.jar
文件发送到任何地方。@orangeoctopus-在我们的例子中,这将是非常低效的。我依赖于很多库,所以这个罐子会很大。我不想在每次启动作业时通过网络将整个信息发送到每个从属节点,分布式缓存也会这样做。它不会永久地将该文件推出,它是一个缓存,因此会随着时间的推移被刷新。通常,人们通过在所有节点上安装库并将它们添加到类路径来实现这一点,而无需Hadoop API的帮助。在制作过程中,人们会使用一些类似于木偶的东西来达到这个目的。似乎与此相关的bug仍然很活跃。这是相关的,我不知道它解释了为什么“文件”和“存档”版本不同。@SeanOwen编辑了这个问题以获得更多解释。谢谢你通知我。同样,这一切都是正确的,但没有得到“文件”和“存档”方法的区别,我最初也感兴趣。