Hadoop error no opencv_java in java library path

首先要确保你的opencv在linux上安装编译没有问题,我的环境是ubuntu14.0.4 opencv3.0 Hadoop2.7.1 我采用完全分布式,4个节点,一个主节点,3个从节点,在主节点安装eclipse,eclipse安装了Hadoop-eclipse-plugin拆插件,把你写好的mapreduce程序鼠标右run->run on hadoop 其实是在本地跑,只是调用的hdfs上的文件而已,是单机再跑。如果没问题说明你的opencv环境是好的。但是打成runnable jar 放Hadoop上运行各种报错,首先是

Hadoop error no opencv_java in java library path_第1张图片

解决方法:

可以设置java.library.path指定到你的opencv生成的so库文件,我的是在/usr/local/share/OpenCV/java里面。但是这样对有些人没用,因为你设置了java.library.path指定的文件夹,但是当你运行Hadoop的时候,java.library.path根本没之指过去。

网上一些方法:

1:指定Native library location的位置,但是没用。Hadoop运行的时候你可以用

Text text = new Text(System.getProperty("java.library.path"));
        context.write(text , "xxxxx");

输出他的java.library.path,根本没之指过去。

Hadoop error no opencv_java in java library path_第2张图片

网上的还一种方法:在~/.bashrc里面设置export LD_LIBRARY_PATH=/usr/local/share/OpenCV/java

但是我安装上面的代码输出Hadoop运行时的java.library.path也没包含我设置的这个路径。

我的解决办法:创建/usr/local/share/OpenCV/java/libopencv_javaxxx.so 的软连接到${HADOOP_HOME}/lib/native里面。为什么要放这里面,因为我使用

Text text = new Text(System.getProperty("java.library.path"));
 context.write(text , "xxxxx");

的时候输出文件里面${HADOOP_HOME}/lib/native是在java.library.path里面。让后打包fatjar,然后输入命令Hadoop jar xxx.jar

no opencv_java in java library path问题解决了,但是又报错

Hadoop error no opencv_java in java library path_第3张图片

你们的可能和我不一样,这个问题是我调用mat函数才报这个错,

解决方法

把在驱动类里面的System.loadLibrary(Core.NATIVE_LIBRARY_NAME);注释,这段话应该放到map函数里面

Hadoop error no opencv_java in java library path_第4张图片

问题解决,翻了很都博客,都是问的没有解决方案,包括很多外国网站也访问了。

你可能感兴趣的:(Hadoop,opencv)