代码之家  ›  专栏  ›  技术社区  ›  Tariq

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

  •  2
  • Tariq  · 技术社区  · 11 年前

    我在所有Hadoop节点上都有一个jar文件 /home/ubuntu/libs/javacv-0.9.jar ,以及其他一些jar文件。

    当我的 MapReduce(地图减少) 应用程序正在上执行 Hadoop(Hadoop) 节点,我遇到此异常

    java.io.FileNotFoundException: File does not exist hdfs://192.168.0.18:50000/home/ubuntu/libs/javacv-0.9.jar
    

    如何解决此异常?我在Hadoop中运行的jar如何从Hadoop节点的本地文件系统访问第三方库?

    2 回复  |  直到 11 年前
        1
  •  2
  •   Ged    6 年前

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

        2
  •  2
  •   Ashrith    11 年前

    另一种选择是使用 distributed cache addFileToClassPath(new Path("/myapp/mylib.jar"), job); 提交应该添加到mapper和reducer任务的类路径中的Jar文件。

    注意:确保首先将jar文件复制到HDFS。

    您甚至可以使用hadoop命令行参数将jar文件添加到类路径 -libjars <jar_file> .

    注意:确保MapReduce应用程序实现 ToolRunner 允许 -libjars 选项。

    推荐文章