2012-03-31 13 views
13

Mam kod Matlab, który przetwarza obrazy. Chcę utworzyć program odwzorowujący Hadoop, który używa tego kodu. Natknąłem się na następujących rozwiązań, ale nie jestem pewien, który z nich jest najlepszy (jak to jest bardzo trudne do zainstalowania MATLAB kompilatora wykonawczego na każdym węźle podrzędnym w Hadoop dla mnie):Jak korzystać z kodu MATLAB w programie odwzorowującym (Hadoop)?

  1. ręcznie przekonwertować kod MATLAB do OpenCV w C++ i wywołaj jego exe/dll (i podaj odpowiednie parametry) z programu odwzorowującego. Nie jestem pewien, ponieważ klaster ma zainstalowany system Linux na każdym węźle zamiast systemu Windows.

  2. Użyj Hadoop Streaming. Jednak streaming Hadoop wymaga pliku wykonywalnego, ponieważ program odwzorowujący i plik wykonywalny programu Matlab wymaga również środowiska wykonawczego Matlab Compiler, które jest bardzo trudne do zainstalowania w każdym węźle slave.

  3. Konwersja go automatycznie do kodu C/C++ i stworzyć swój exe automatycznie (nie wiem, czy jest to prawda, ponieważ albo exe będzie wymagać runtime MATLAB uruchomić lub mogą wystąpić problemy kompilatora w konwersji, które są bardzo trudne do fix)

  4. Użyj programu Matlab Java Builder. Ale utworzony w ten sposób plik jar będzie również wymagał środowiska wykonawczego.

Wszelkie sugestie?

Z góry dziękuję.

Odpowiedz

9

Jak już zapewne już podejrzewasz, będzie to z natury trudne z powodu wymagań środowiska wykonawczego dla MATLAB. Miałem podobne doświadczenie (konieczność dystrybucji bibliotek środowiska wykonawczego) przy próbie uruchomienia kodu MATLAB przez Condor.

Jeśli chodzi o opcje, których dotyczą aukcje, opcja nr 1 będzie działać najlepiej. Prawdopodobnie nie będziesz też dostępny, aby uniknąć pracy z Linuksem.

Jeśli jednak nie chcesz stracić wygody zapewnianej przez oprogramowanie na wyższym poziomie (takie jak MATLAB, Octave, Scilab i inne), możesz wypróbować streaming Hadoop w połączeniu ze skryptami wykonywanymi przez Octave.

Strumieniowe przesyłanie Hadoop nie bierze pod uwagę natury pliku wykonywalnego (niezależnie od tego, czy jest to skrypt wykonywalny czy plik wykonywalny, zgodnie z tym (http://hadoop.apache.org/common/docs/r0.15.2/streaming) .html)).

Wszystko, czego wymaga, to podanie "pliku wykonywalnego", który dodatkowo może a) odczytać ze standardowego wejścia, b) wysłać wyjście do standardowego wyjścia.

Programy Octave GNU można przekształcić w skrypty wykonywalne (w systemie Linux) z możliwością odczytu ze standardowego wejścia i wysłania danych wyjściowych na stdout (http://www.gnu.org/software/octave/doc/interpreter/Executable -Octave-Programs.html).

Jako prosty przykład rozważ to:

Utwórz plik (na przykład „al.oct”) o następującej treści:

#!/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); 

Teraz z wiersza polecenia wydania następującego polecenia:

chmod + x al.październik

al.oct jest wykonywalny ... Można go wykonać z "./al.oct". Aby zobaczyć, gdzie stdin, stdout pasuje (tak, że można go używać z Hadoop) można spróbować to:

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

lub innymi słowy ... „kot” THE al.oct plik, jego produkcja rur do skryptu wykonywalnego al.oct, a następnie wypakuj wyjście al.oct do narzędzia sortowania (jest to tylko przykład, możemy mieć "cat" dowolny plik, ale ponieważ wiemy, że al.oct jest prostym plikiem tekstowym, po prostu użyj tego).

Oczywiście może to oznaczać, że Octave nie obsługuje wszystkiego, co próbuje kodować MATLAB, ale może to być alternatywny sposób korzystania z Hadoop Streaming bez utraty wygody/mocy kodu wyższego poziomu.

+0

Świetna propozycja! Spróbuję tego .. – Harsh

+0

Ale myślę, że muszę zainstalować oktawę w każdym węźle roboczym klastra hadoop, aby to zrobić, czy mam rację? Czy nie istnieje sposób na utworzenie pliku .out z kodu oktawowego? Byłoby to bardzo pomocne .. – Harsh

+0

Tak, to by było w tym przypadku: -/W tej chwili niemożliwe jest skompilowanie Oktawy, a nawet transliterowanie kodu oktawowego do czegoś wykonywalnego. Zobacz [this] (http://stackoverflow.com/questions/5101219/how-do-i-concon-octave-code-to-c-or-c) i [this] (http: //octave.1599824 .n4.nabble.com/oktawa-niezależna-C-code-td1630298.html) (od dłuższego czasu nie śledziłem tego drugiego). Potrzebujesz jakiejś kontroli nad swoimi pracownikami ... Może administratorzy Twojej usługi mogą pomóc w uzyskaniu jak najlepszego z powyższych opcji do pracy (?). –

2

Czy charakter algorytmu do konwersji nie ma znaczenia? Jeśli kod MATLAB/Octave jest ściśle powiązany, rozprzestrzenienie go na mapę zmniejszoną może spowodować okropne zachowanie.

2

W odniesieniu do pierwszej opcji: Program Matlab Coder obsługuje teraz wiele funkcji przetwarzania obrazu (częściowo za pośrednictwem obiektów systemowych), aby automatycznie generować kod C swojego algorytmu, który jest w zasadzie niezależny od platformy i nie wymaga środowiska wykonawczego. Z mojego doświadczenia wynika, że ​​kod ten jest o współczynniku 2..3 wolniejszym niż "ręcznie kodowany" OpenCV (silnie zależy od twojego algorytmu i procesora). Główną wadą jest potrzeba licencji na koder Matlab ($$$).

Powiązane problemy