Hadoop从Hadoop节点的本地文件系统访问第三方库
我在/home/ubuntu/libs/javacv-0.9.jar
上的所有Hadoop节点上都有一个jar文件,还有一些其他jar文件。
当我的MapReduce应用程序在Hadoop节点上执行时,我遇到了这个exception
java.io.FileNotFoundException: File does not exist hdfs://192.168.0.18:50000/home/ubuntu/libs/javacv-0.9.jar
我该如何解决此exception? 我的jar如何在Hadoop中运行从Hadoop节点的本地文件系统访问第三方库?
您需要将文件复制到HDFS而不是本地文件系统。
要将文件复制到HDFS,您需要使用:
hadop 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);
提交应该添加到mapper和reducer任务的类路径中的Jar文件。
注意:确保首先将jar文件复制到HDFS。
您甚至可以使用hadoop命令行参数-libjars
将jar文件添加到类路径。
注意:确保MapReduce应用程序通过命令行实现ToolRunner以允许
-libjars
选项。