OpenCV库加载了hadoop但没有工作
我正在尝试将OpenCV与Hadoop一起使用。 以下是我的代码。 我只是测试OpenCV库是否与Hadoop一起工作,即当我在Hadoop的函数public int run(String[] args)
中运行OpenCV代码时。
我在互联网上搜索,并找到了一些如何在Hadoop中添加OpenCV本机库( libopencv_java310.so
)的方法。 我尝试了一些方法,但它没有用。 例如本教程 。
它说将JAVA.LIBRARY.PATH
添加到hadoop-config.sh
文件中。 但它没有用。 我收到了这个错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path at line System.loadLibrary(Core.NATIVE.LIBRARY.NAME);
最后,我将OpenCV本机库( libopencv_java310.so
)添加到此路径(从Internet获得解决方案)
$HADOOP_HOME/lib/native
它似乎有效。 我没有得到上述错误。 但是我在下一行遇到了这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)
此错误符合以下条件:
CascadeClassifier cad = new CascadeClassifier();
据我所知,如果未加载OpenCV本机库,则会出现此错误。 但是现在加载了库,我不知道这个错误的原因是什么。
public int run(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(readVideoFile.class); job.setJobName("smallfilestoseqfile"); job.setInputFormatClass(readVideoInputFormat.class); job.setNumReduceTasks(1); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.setMapperClass(readVideoMapper.class); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); CascadeClassifier cad = new CascadeClassifier(); return job.waitForCompletion(true) ? 0 : 1; }
我遇到了同样的问题。 我使用了以下解决方法。
您可以从使用JavaCV工具开始,因为它与hadoop完美配合。 然后使用OpenCv,通过将所有opencv库和jar包装在可执行jar中来创建一个可执行jar。 现在,本机库由操作系统加载。 因此,在可执行jar文件中,编写提取OpenCv本机库的代码来调整pry文件,然后加载库,最后删除临时文件。
- hadoop方法将输出发送到多个目录
- ClassNotFoundException org.apache.mahout.math.VectorWritable
- Hadoop中的setJarByClass()
- 将1GB数据加载到hbase中需要1小时
- 在多个CPU核心上运行独立的Hadoop应用程序
- 当尝试从Java中读取HDFS中的文件时,“错误的FS …期望:file:///”
- 如何将.txt / .csv文件转换为ORC格式
- 错误的值类:类org.apache.hadoop.io.Text不是类org.apache.hadoop.io.IntWritable
- Hadoop的FileSystem列出API调用中的通配符