2012-03-31 5 views
13

私は画像を処理するmatlabコードを持っています。私は、そのコードを使用するHadoopマッパーを作成したいと思います。私は(私のためのHadoop内の各スレーブノード上のMatlabのコンパイラのランタイムをインストールすることは非常に困難であるとして)最高であるかわからない、次のソリューションではなくなりました:マッパー(Hadoop)でMATLABコードを使用するには?

  1. が手動でCにOpenCVのにそのMATLABコードを変換する++ mapperからexe/dllを呼び出して(適切なパラメータを提供する)クラスタはWindowsではなくすべてのノードにLinuxがインストールされているため、わかりません。

  2. Hadoop Streamingを使用してください。しかし、Hadoopストリーミングでは、マッパーとして実行可能ファイルが必要です。また、matlabの実行可能ファイルには、すべてのスレーブノードにインストールするのが非常に困難なMatlabコンパイラーランタイムが必要です。

  3. 自動的にC/C++コードに変換して、自動的にそのexeファイルを作成します(exeファイルにはmatlabランタイムが必要なため、または非常に難しいコンパイルの問題があるため修正)

  4. Matlab Java Builderを使用してください。しかし、こうして作成されたjarファイルにはランタイムも必要です。

ありがとうございます。

答えて

9

既に疑問に思っているように、これはMATLABの実行時の要件のために本質的に困難です。私はCondor上でMATLABコードを実行しようとすると、同様の経験(ランタイムライブラリを配布する必要がありました)がありました。

リストに表示されているオプションに関する限り、オプション1が最適です。また、おそらくLinuxでの作業を避けることはできません。

しかし、より高度なソフトウェア(MATLAB、Octave、Scilabなど)の利便性を失いたくない場合は、Octave実行可能スクリプトと組み合わせてHadoopストリーミングを試すことができます。

Hadoopストリーミングは、実行可能ファイル(実行可能スクリプトか実行可能ファイルかに関係なく、この(http://hadoop.apache.org/common/docs/r0.15.2/streaming .html))。

「実行可能ファイル」が与えられていること、さらにa)stdinから読み込み、b)stdoutに出力を送ることができることです。

GNU Octaveプログラムは、stdinから読み込み、出力をstdout(http://www.gnu.org/software/octave/doc/interpreter/Executable)に送信する機能を備えた実行可能なスクリプト(Linux)に変換することができます。 -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 + xal。10月

al.octは、あなたが "./al.oct" とそれを実行することができます...今すぐ実行可能です。

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

や他の言葉で「猫」ファイルal.oct、パイプの出力...:(あなたはHadoopのとそれを使用できるように)標準入力は、stdoutがこれを試すことができますに収まる場所を確認するには実行可能なスクリプトal.octに渡して、al.octの出力をソートユーティリティにパイプします(これは単なる例です。すべてcatというファイルがありますが、al.octは単純なテキストファイルですちょうどこれを使用してください)。

もちろん、OctaveはMATLABコードが呼び出そうとしているすべてのものをサポートしていないかもしれませんが、これはHadoop Streamingを高水準コードの利便性/パワーを失うことなく使用する代替手段です。

+0

グレート提案!私はこれを試してみます.. – Harsh

+0

しかし、これを行うためにhadoopクラスタのすべてのワーカーノードにオクターブをインストールする必要があると思いますが、そうですか?オクターブコードから.outファイルを作成する方法はありませんか?それは非常に役に立ちます.. – Harsh

+0

はい、それはそうです: - /現時点ではOctaveをコンパイルすることはできません。 [this](http://stackoverflow.com/questions/5101219/how-do-i-convert-octave-code-to-c-or-c)と[this](http://octave.1599824 .n4.nabble.com /オクターブから独立したCコード-dd1630298.html)(私は長い間、2番目のものをフォローしていません)。あなたはあなたの従業員を何らかの形で管理する必要があります...あなたのサービスの管理者は、上記のオプションのうち最も実行可能なものを仕事に役立てることができます(?)。 –

2

変換されるアルゴリズムの性質は重要ではありませんか? MATLAB/Octaveコードが緊密に結合されている場合は、マップを縮小して展開すると恐ろしい動作になることがあります。

2

最初のオプションについて:Matlab Coderは、アルゴリズムのCコードを自動的に生成するための、多くの画像処理関数をサポートしています(基本的にプラットフォームに依存せず、実行環境は不要です)。私の経験から、このコードは、手作業でコード化されたOpenCV(アルゴリズムとCPUに強く依存します)よりも遅い約2..3倍です。 主な欠点は、Matlab Coderライセンス($$$)が必要です。