我是Hadoop的新手。我正在使用Hadoop 0.22。 在驱动程序中我使用了这段代码:
Job job = Job.getInstance(configuration);
...
job.addArchiveToClassPath(new Path(JAR_DIR);
...
在Map类中,我必须使用哪些代码在本地类路径中添加jar?
更多详情
我在地图中需要一个工作并减少阶段htmlunit.jar。我使用上面的代码将此jar添加到classpath,但是当我提交作业时,我在使用htmlunit references的行中有一个ClassNotFoundException。如果上面的代码没问题,而且DistributedCache会自动在tasktrackers类路径中添加jar,可能是什么问题? 我提交作业时还必须使用-libjars htmlunit.jar选项吗?我必须使用另一个hadoop组件吗?
答案 0 :(得分:0)
您无需做任何事情。
将jar添加到作业类路径后,您所说的是
“将其包含在地图的类路径中并减少作业”
只要你的映射器和Reducer从Mapper和Reducer基类扩展,它就会“正常工作”。
值得注意的是,你可能应该为你需要的每个Jar使用addFileToClassPath。
另一种选择(我们这样做)是创建一个包含源和依赖项的jar。
像往常一样构建代码jar,然后在名为'lib'的jar中创建一个子目录,并在此处添加所有依赖项jar。然后,您的整个作业都是自包含的,您无需担心将其他jar添加到分布式缓存中。
例如,你有一个包含以下内容的jar:
/com/example/Something.class
/com/example/SomethingElse.class
/lib/dependency.jar
/lib/dependency2.jar
(jar只是一个zip文件,所以你可以使用常规的zip创建工具来构建它)
由于各种原因,这也比将依赖项的.class文件直接添加到jar中更好。