Hadoop 从 Hadoop 节点的本地文件系统访问第三方库



我在/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命令行中的选项。

相关内容

  • 没有找到相关文章

最新更新