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

sqougxex  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(381)

我的所有hadoop节点上都有一个jar文件 /home/ubuntu/libs/javacv-0.9.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节点的本地文件系统访问第三方库?

dtcbnfnu

dtcbnfnu1#

您需要将文件复制到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文件。

t9aqgxwy

t9aqgxwy2#

另一种选择是使用分布式缓存 addFileToClassPath(new Path("/myapp/mylib.jar"), job); 提交应该添加到Map器和reducer任务的类路径的jar文件。
注意:确保首先将jar文件复制到hdfs。
您甚至可以使用hadoop命令行参数将jar文件添加到类路径 -libjars <jar_file> .
注意:确保mapreduce应用程序实现toolrunner以允许 -libjars 命令行中的选项。

相关问题