我在/home/ubuntu/libs/javacv-0.9.jar
的所有Hadoop节点上都有一个jar文件,还有一些其他jar文件。
当我的MapReduce应用程序在Hadoop节点上执行时,我收到此异常
java.io.FileNotFoundException: File does not exist hdfs://192.168.0.18:50000/home/ubuntu/libs/javacv-0.9.jar
如何解决此异常?在Hadoop中运行的jar如何从Hadoop节点的本地文件系统访问第三方库?
您需要将文件复制到HDFS而不是本地文件系统。
要将文件复制到 HDFS,您需要使用:
hadoop fs -put localfile hdfsPath
其他选项是将文件路径更改为:
file:///home/ubuntu/libs/javacv-0.9.jar
要将 jar 文件添加到类路径中,请查看 DistributedCache:
DistributedCache.addFileToClassPath(new Path("file:///home/ubuntu/libs/javacv-0.9.jar"), job);
您可能需要遍历该目录中的所有 jar 文件。
另一种选择是使用分布式缓存addFileToClassPath(new Path("/myapp/mylib.jar"), job);
提交应添加到映射器和化简器任务的类路径中的 Jar 文件。
注意:确保先将jar文件复制到HDFS。
您甚至可以使用 hadoop 命令行参数 -libjars <jar_file>
将 jar 文件添加到类路径中。
注意:确保你的MapReduce应用程序实现了ToolRunner,以允许
-libjars
命令行中的选项。