Python 如何从hadoop mapper调用的可执行文件中访问图像文件 我有一些用C++编写的OpenCV函数,在Linux中编译成二进制。此函数将图像文件位置作为源并对其进行处理,并给出一个值作为输出

Python 如何从hadoop mapper调用的可执行文件中访问图像文件 我有一些用C++编写的OpenCV函数,在Linux中编译成二进制。此函数将图像文件位置作为源并对其进行处理,并给出一个值作为输出,python,opencv,image-processing,hadoop,Python,Opencv,Image Processing,Hadoop,现在,我正在使用hadoop流媒体,它使用python编写的mapper调用这个二进制文件来处理图像。映射器的输入是一个文本文件,其中每行都有图像文件路径 到目前为止: 首先,我用一个系统调用测试了streaming mapreduce,而不是调用img processing exe,所有工作都如期进行。 我制作了二进制文件所需的所有库,如opencv库等。 我通过给图像处理二进制文件指定空文件位置来测试mapreduce。它的工作原理与预期的一样,并在二进制文件中提供嵌入的错误消息作为输出。它

现在,我正在使用hadoop流媒体,它使用python编写的mapper调用这个二进制文件来处理图像。映射器的输入是一个文本文件,其中每行都有图像文件路径

到目前为止:

首先,我用一个系统调用测试了streaming mapreduce,而不是调用img processing exe,所有工作都如期进行。 我制作了二进制文件所需的所有库,如opencv库等。 我通过给图像处理二进制文件指定空文件位置来测试mapreduce。它的工作原理与预期的一样,并在二进制文件中提供嵌入的错误消息作为输出。它成功地完成了所有map和reduce并给出了输出

议题和问题:

但是当我给二进制文件一个实际的图像位置时。Mapreduce未能做到这一点 流式处理错误。StreamJob:作业未成功。错误:NA


关于如何给二进制文件指定文件位置有什么想法吗?或者我应该在映射器中读取图像并将图像数据作为二进制文件发送到被调用的exe吗?

是文件路径HDFS路径还是本地文件路径?我尝试了这两种方法。。在MapReduce中,运行地图任务的计算机上可能不存在本地文件,除非它位于某个共享驱动器中。如果你想使用它们,你必须改变C++的可执行文件,以便能够从HDFS(使用LIbHDFS)读取。@ MattD,两个后续问题:1。是否可以从本地目录读取文件。我知道数据必须移动到正在处理的节点,并且会过载。只是好奇而已。2.我查找了libhdfs,所以如果我使用hdfsOpenFile,然后使用hdfsRead,它会被读取为二进制吗?我正在考虑如何将它与opencv.1中的imread函数结合使用。可以在MapReduce中读取本地文件,只需记住相对路径将从MapReduce执行代码的位置计算。2.hdfsRead将以字节为单位读取,您可以将它们作为图像进行解析。