2

我使用 DistributedCache.addFileToClassPath(Path file, Configuration conf) 方法向分布式缓存添加了一组 jar,以使依赖项可用于整个集群的 map reduce 作业。现在我想从缓存中删除所有这些 jar 以开始清理,并确保我在那里有正确的 jar 版本。我注释掉了将文件添加到缓存中的代码,并将它们从我在 hdfs 中复制它们的位置删除。问题是 jar 似乎仍然在类路径中,因为 map reduce 作业没有抛出 ClassNotFound 异常。有没有办法在不重新启动任何服务的情况下刷新此缓存?

编辑:随后我刷新了以下文件夹: /var/lib/hadoop-hdfs/cache/mapred/mapred/local/taskTracker/distcache/ 。那并没有解决它。作业仍会找到参考。

4

1 回答 1

2

我现在明白我的问题是什么了。我之前已将 jar 复制到 /usr/lib/hadoop/lib/ 文件夹中。这使它们永久可用于 map reduce 工作。从那里删除它们后,作业抛出了预期的 ClassNotFoundException。另外,我注意到,如果我不使用 addFileToClassPath 添加 jar,它们将无法用于作业。因此,无需刷新分布式缓存或删除您使用 addFileToClassPath 添加的内容,因为您放在那里的内容仅对指定的作业实例可见。

于 2013-01-30T15:44:33.313 回答