当前位置: 首页 > 面试题库 >

如何在Mapper(Hadoop)中使用MATLAB代码?

姜楷
2023-03-14
问题内容

我有一个处理图像的Matlab代码。我想创建一个使用该代码的Hadoop映射器。我遇到了以下解决方案,但不确定哪种解决方案最好(对我而言,很难在hadoop中的每个从属节点上安装matlab编译器运行时):

  1. 手动将Matlab代码转换为C ++中的OpenCV,然后从映射器中调用其exe / dll(并为其提供适当的参数)。不确定,因为群集在每个节点上都安装了Linux,而不是Windows。

  2. 使用Hadoop流。但是Hadoop流式传输需要一个可执行文件作为映射器,而matlab的可执行文件还需要Matlab编译器运行时,这很难在每个从属节点上安装。

  3. 将其自动转换为C / C ++代码并自动创建其exe(不确定这是否正确,因为该exe需要运行matlab运行时,或者转换中可能存在编译器问题,这些问题很难修复)

  4. 使用Matlab Java Builder。但是这样创建的jar文件也将需要运行时。

有什么建议?

提前致谢。


问题答案:

正如您可能已经怀疑的那样,由于MATLAB的运行时要求,这本来就很难做到。尝试在Condor上运行MATLAB代码时,我有类似的经历(必须分发运行时库)。

就您列出的选项而言,选项1最有效。同样,您可能无法避免使用Linux。

但是,如果您不想失去高级软件(例如MATLAB,Octave,Scilab等)提供的便利,则可以尝试将Hadoop流与Octave可执行脚本结合使用。

Hadoop流式处理并不关心可执行文件的性质(根据此文档,它是可执行脚本还是可执行文件,网址为(http://hadoop.apache.org/common/docs/r0.15.2/streaming.html))

它所需要的就是给它一个“可执行文件”,此外它还可以a)从stdin读取,b)将输出发送到stdout。

GNU
Octave程序可以转换为可执行脚本(在Linux中),能够从stdin读取并将输出发送到stdout(http://www.gnu.org/software/octave/doc/interpreter/Executable-
Octave-Programs .html)。

作为一个简单的例子,考虑一下:

创建一个包含以下内容的文件(例如“ al.oct”):

#!/bin/octave -qf  (Please note, in my installation i had to use "#!/etc/alternatives/octave -qf")
Q = fread(stdin); #Standard Octave / MATLAB code from here on
disp(Q);

现在,从命令提示符处发出以下命令:

chmod + x al.oct

al.oct现在是可执行文件…您可以使用“
./al.oct”执行它。要查看stdin,stdout适合的位置(以便可以在Hadoop中使用它),可以尝试以下操作:

>>cat al.oct|./al.oct|sort

或换句话说…“将”文件al.oct捕获,将其输出传递到可执行脚本al.oct,然后将al.oct的输出传递给sort实用程序(这只是一个示例,我们可以使用“
cat”的任何文件,但是由于我们知道al.oct是一个简单的文本文件,因此我们仅使用此文件)。

当然,Octave可能不支持您的MATLAB代码尝试调用的所有功能,但是这可能是使用Hadoop
Streaming的另一种方式,而又不会失去高级代码的便利性/功能。



 类似资料:
  • 我的目标是检查是否在网络上的文件夹中找到具有特定(名称的一部分)的文件,同时考虑到它下面的所有文件夹。要做到这一点,我需要一种方法,以有效地获得一个列表的所有文件和文件夹在给定的文件夹和下面。我的递归函数在本地驱动器上每秒处理2500个项目,但在网络驱动器上每秒只处理几个项目。我需要更快的东西。 核心问题是:获取文件夹中包含isDirectory属性或类似属性的项目列表的最快方法是什么? 我把希望

  • 我正试图在一些维基百科转储(以压缩的bz2形式)上运行一个带有java Mapper/Reducer的hadoop流作业。我正在尝试使用WikiHadoop,这是Wikimedia最近发布的一个界面。 WikiReader_Mapper。JAVA 维基阅读器。JAVA 我正在运行的命令是 我收到的错误信息是 我更熟悉新的hadoop API和旧的。由于我的mapper和reducer代码位于两个不

  • 我正在使用下面的代码片段映射对象 它没有映射,但当我添加这个时,它工作得很好 但却无法理解它的功能<代码>导入={Instant.class,DateTimeFormatter.class}它如何帮助映射对象?

  • 下面是我使用WritableComparator的代码段,但它不起作用

  • 本文向大家介绍MyBatis Mapper代理使用方法详解,包括了MyBatis Mapper代理使用方法详解的使用技巧和注意事项,需要的朋友参考一下 MyBatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和J