2012-03-31 11 views
13

मेरे पास एक matlab कोड है जो छवियों को संसाधित करता है। मैं एक हैडोप मैपर बनाना चाहता हूं जो उस कोड का उपयोग करता है। मुझे यकीन है कि नहीं निम्न समाधानों भर में लेकिन आया था जो एक सबसे अच्छा है (के रूप में यह मेरे लिए Hadoop में प्रत्येक गुलाम नोड पर matlab संकलक क्रम स्थापित करने के लिए बहुत मुश्किल है):मैपर (हैडोप) में MATLAB कोड का उपयोग कैसे करें?

  1. मैन्युअल OpenCV में है कि matlab कोड परिवर्तित C++ और मैपर से अपने exe/dll (और उचित पैरामीटर की आपूर्ति) कॉल करें। निश्चित नहीं है, क्योंकि क्लस्टर ने विंडोज के बजाय प्रत्येक नोड पर लिनक्स स्थापित किया है।

  2. हाडोप स्ट्रीमिंग का उपयोग करें। लेकिन हैडोप स्ट्रीमिंग के लिए एक निष्पादन योग्य की आवश्यकता है क्योंकि मैपर और मैटलैब के निष्पादन योग्य को भी मैटलैब कंपाइलर रनटाइम की आवश्यकता होती है जो प्रत्येक गुलाम नोड पर स्थापित करना बहुत मुश्किल है।

  3. इसे स्वचालित रूप से सी/सी ++ कोड में परिवर्तित करें और अपने एक्सई को स्वचालित रूप से बनाएं (सुनिश्चित नहीं है कि यह सही है या नहीं, इसलिए exe को चलाने के लिए मैटलैब रनटाइम की आवश्यकता होगी या रूपांतरण में संकलक समस्याएं हो सकती हैं जो बहुत मुश्किल हैं ठीक करें)

  4. मैटलैब जावा बिल्डर का उपयोग करें। लेकिन इस प्रकार बनाई गई जार फ़ाइल को रनटाइम की भी आवश्यकता होगी।

कोई सुझाव?

अग्रिम धन्यवाद।

उत्तर

9

जैसा कि आप शायद पहले से ही संदेह कर रहे हैं, यह MATLAB के लिए रनटाइम आवश्यकता के कारण स्वाभाविक रूप से करना मुश्किल होगा। कोंडोर पर MATLAB कोड चलाने का प्रयास करते समय मेरे पास एक समान अनुभव था (रनटाइम लाइब्रेरी वितरित करना)।

जहां तक ​​आप सूचीबद्ध विकल्पों का संबंध रखते हैं, विकल्प # 1 सबसे अच्छा काम करेगा। इसके अलावा, शायद आप लिनक्स के साथ काम करने से बचने के लिए उपलब्ध नहीं होंगे।

हालांकि, यदि आप उच्च स्तरीय सॉफ़्टवेयर (जैसे MATLAB, Octave, Scilab और अन्य) द्वारा प्रदान की गई सुविधा खोना नहीं चाहते हैं तो आप ऑक्टेव निष्पादन योग्य स्क्रिप्ट के संयोजन में हैडोप स्ट्रीमिंग का प्रयास कर सकते हैं।

हैडोप स्ट्रीमिंग निष्पादन योग्य की प्रकृति की परवाह नहीं करता है (चाहे यह एक निष्पादन योग्य स्क्रिप्ट या निष्पादन योग्य फ़ाइल है, इस के अनुसार (http://hadoop.apache.org/common/docs/r0.15.2/streaming .html))।

यह सब आवश्यक है, यह है कि इसे "निष्पादन योग्य" दिया जाता है, इसके अलावा ए) stdin से पढ़ा जा सकता है, बी) stdout को आउटपुट भेजें।

जीएनयू ऑक्टेव कार्यक्रमों को स्टडीन से पढ़ने की क्षमता के साथ निष्पादन योग्य स्क्रिप्ट (लिनक्स में) में बदल दिया जा सकता है और आउटपुट को stdout (http://www.gnu.org/software/octave/doc/interpreter/Executable -Octave-Programs.html)। कमांड प्रॉम्प्ट मुद्दे से अब

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

निम्न आदेश:

एक साधारण उदाहरण के रूप में इस पर विचार करें:

एक फ़ाइल में निम्न सामग्री के साथ ("al.oct" उदाहरण के लिए) बनाएं

chmod + x al।अक्टूबर

al.oct अब एक निष्पादन योग्य है ... आप "./al.oct" के साथ निष्पादित कर सकते हैं। जहां stdin, stdout में फिट बैठता है देखने के लिए (ताकि आप Hadoop के साथ उपयोग कर सकते हैं) आप इस कोशिश कर सकते हैं:

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

या दूसरे शब्दों में ... "बिल्ली" फ़ाइल al.oct, पाइप इसके उत्पादन निष्पादन योग्य स्क्रिप्ट al.oct पर और फिर सॉर्ट यूटिलिटी के लिए al.oct के आउटपुट को पाइप करें (यह केवल एक उदाहरण है, हमारे पास "बिल्ली" हो सकती है, लेकिन चूंकि हम जानते हैं कि al.oct एक साधारण टेक्स्ट फ़ाइल है बस इसका इस्तेमाल करें)।

यह निश्चित रूप से हो सकता है कि ऑक्टेव आपके MATLAB कोड को कॉल करने का प्रयास करने वाली सभी चीज़ों का समर्थन नहीं करता है, लेकिन यह उच्च स्तर कोड की सुविधा/शक्ति खोए बिना हडोप स्ट्रीमिंग का उपयोग करने का एक वैकल्पिक तरीका हो सकता है।

+0

महान सुझाव! मैं यह कोशिश करूंगा .. – Harsh

+0

लेकिन मुझे लगता है कि मुझे ऐसा करने के लिए हैडूप क्लस्टर के प्रत्येक कार्यकर्ता नोड में ऑक्टेट स्थापित करने की आवश्यकता है, क्या मैं सही हूँ? क्या ऑक्टेट कोड से .out फ़ाइल बनाने का कोई तरीका नहीं है? यह बहुत उपयोगी होगा .. – Harsh

+0

हां, यह मामला होगा: -/इस समय ओक्टेव या यहां तक ​​कि लिप्यंतरण ऑक्टेट कोड को निष्पादन योग्य कुछ संकलित करना असंभव है। कृपया [यह] देखें (http://stackoverflow.com/questions/5101219/how-do-i-convert-octave-code-to-c-or-c) और [यह] (http: //octave.1599824 .n4.nabble.com/octave-to-independent-C-code-td1630298.html) (मैंने लंबे समय तक दूसरे का पालन नहीं किया है)। आपको अपने श्रमिकों पर किसी तरह का नियंत्रण चाहिए ... हो सकता है कि आपकी सेवा के व्यवस्थापक उपर्युक्त विकल्पों के काम करने के लिए सबसे व्यवहार्य होने में मदद कर सकें (?)। –

2

क्या एल्गोरिदम की प्रकृति को परिवर्तित करने की प्रकृति नहीं है? यदि MATLAB/Octave कोड कसकर युग्मित होता है, तो इसे मानचित्र-मानचित्र पर फैलाने से भयानक व्यवहार हो सकता है।

2

आपके पहले विकल्प के संबंध में: मैटलैब कोडर अब आपके एल्गोरिदम के सी-कोड जेनरेट करने के लिए कई छवि प्रसंस्करण कार्यों (आंशिक रूप से सिस्टम ऑब्जेक्ट्स के माध्यम से) का समर्थन करता है, जो मूल रूप से प्लेटफ़ॉर्म स्वतंत्र है और उसे रनटाइम वातावरण की आवश्यकता नहीं है। मेरे अनुभव से यह कोड एक कारक के बारे में है 2..3 "हाथ-कोडित" ओपनसीवी से धीमा (दृढ़ता से आपके एल्गोरिदम और सीपीयू पर निर्भर करता है)। मुख्य दोष यह है कि आपको एक मैटलैब कोडर लाइसेंस ($$$) की आवश्यकता है।

0

यहां अधिकांश उत्तर पूर्व MATLAB R2014b प्रतीत होते हैं।

आर2014 बी में, MATLAB मैडलबस के भीतर मैड्रिड और हडोप के साथ एकीकरण की अनुमति देता है।

मैं अपने विशिष्ट उपयोग के बारे में निश्चित नहीं हो सकते, लेकिन आप जाँच करना चाहते हो सकता है:

http://www.mathworks.com/help/matlab/mapreduce.html

http://www.mathworks.com/discovery/matlab-mapreduce-hadoop.html

संबंधित मुद्दे