正如您可能已经怀疑的那样,由于 MATLAB 的运行时要求,这本质上很难做到。当我尝试通过 Condor 运行 MATLAB 代码时,我也有过类似的经历(必须分发运行时库)。
就您列出的选项而言,选项 #1 效果最好。此外,您可能无法避免使用 Linux。
但是,如果您不想失去高级软件(例如 MATLAB、Octave、Scilab 等)提供的便利,您可以尝试将 Hadoop 流与 Octave 可执行脚本结合使用。
Hadoop流不关心可执行文件的性质(无论是可执行脚本还是可执行文件,根据此(http://hadoop.apache.org/common/docs/r0.15.2/streaming.html)) 。
它所需要的只是给它一个“可执行文件”,此外还可以a)从标准输入读取,b)将输出发送到标准输出。
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
或者换句话说...“cat”文件 al.oct,将其输出通过管道传输到可执行脚本 al.oct,然后将 al.oct 的输出通过管道传输到排序实用程序(这只是一个示例,我们可以有“ cat”任何文件,但由于我们知道 al.oct 是一个简单的文本文件,所以我们只使用它)。
当然,Octave 可能并不支持 MATLAB 代码尝试调用的所有内容,但这可能是使用 Hadoop Streaming 的替代方法,而不会失去更高级别代码的便利性/功能。