Hadoop分布式缓存不起作用



我是Hadoop的新手。我正在使用Hadoop 0.22。在驱动程序中,我使用了以下代码:

    Job job = Job.getInstance(configuration);
    ...
    job.addArchiveToClassPath(new Path(JAR_DIR);
    ...

在 Map 类中,我必须使用什么代码在本地类路径中添加 jar?

更多详情

我有一个需要在映射中并减少阶段 htmlunit.jar.我用上面的代码将此 jar 添加到类路径中,但是当我提交作业时,我有一个 ClassNotFoundException 在我使用 htmlunit 引用的行。如果上面的代码没问题,并且分布式缓存会自动在任务跟踪器类路径中添加 jar,那么可能有什么问题?当我提交作业时.jar我还必须使用选项 -libjars htmlunit?我必须使用另一个 hadoop 组件?

你不需要做任何事情。

将 jar 添加到作业类路径后,您所说的是

"将其包含在地图的类路径中并减少作业"

只要您的映射器和化简器

从映射器和化简器基类扩展而来,那么它就会"正常工作"。

值得注意的是,您可能应该对您需要的每个单独的 Jar 使用 addFileToClassPath。

另一种选择(我们这样做)是创建一个包含源代码和依赖项的 jar。

像往常一样构建代码 jar,然后在 jar 中创建一个名为 'lib' 的子目录,并在此处添加所有依赖项 jar。然后,您的整个作业都是独立的,您无需担心将其他 jar 添加到分布式缓存中。

例如,您将有一个包含以下内容的罐子:

/com/example/Something.class
/com/example/SomethingElse.class
/lib/dependency.jar
/lib/dependency2.jar

(jar 只是一个 zip 文件,因此您可以使用常规的 zip 创建实用程序来构建它)

由于各种原因,这也比将依赖项的.class文件直接添加到 jar 中性能更好。

相关内容

  • 没有找到相关文章

最新更新