2010-12-02 5 views
8

खोजने में असमर्थ मैं एक हैडूप-स्ट्रीमिंग पायथन नौकरी चलाने की कोशिश कर रहा हूं।हाडोप स्ट्रीमिंग - फ़ाइल त्रुटि

bin/hadoop jar contrib/streaming/hadoop-0.20.1-streaming.jar 
-D stream.non.zero.exit.is.failure=true 
-input /ixml 
-output /oxml 
-mapper scripts/mapper.py 
-file scripts/mapper.py 
-inputreader "StreamXmlRecordReader,begin=channel,end=/channel" 
-jobconf mapred.reduce.tasks=0 

मैंने सुनिश्चित किया है कि mapper.py में सभी अनुमतियां हैं। यह पता त्रुटियों कह

Caused by: java.io.IOException: Cannot run program "mapper.py":  
error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:214) 
... 19 more 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 

मैं HDFS को mapper.py कॉपी करने और एक ही HDFS देने की कोशिश की: //localhost/mapper.py लिंक, वह भी काम नहीं करता है! इस बग को ठीक करने के बारे में कोई विचार?

+0

आप इस समस्या का समाधान हो:

यहाँ आदेश है? मुझे विंडोज सर्वर 2012 पर एक ही समस्या का सामना करना पड़ रहा है। –

उत्तर

6

HadoopStreaming wiki page पर उदाहरण को देखते हुए, ऐसा लगता है कि आप

-mapper scripts/mapper.py 
-file scripts/mapper.py 

के बाद से "भेज दिया फ़ाइलों कार्यशील निर्देशिका करने के लिए जाना"

-mapper mapper.py 
-file scripts/mapper.py 

को बदलना चाहिए। आपको सीधे पाइथन दुभाषिया निर्दिष्ट करने की आवश्यकता हो सकती है:

-mapper /path/to/python mapper.py 
-file scripts/mapper.py 
+0

धन्यवाद ब्रैड, लेकिन त्रुटि /सिस्टम/लाइब्रेरी/फ्रैमवर्क्स/पायथन.फ्रेमवर्क/वर्जन/2.5/Resources/Python.app/Contents/MacOS/Python: में नहीं बदला जा सकता खुली फ़ाइल 'mapper.py': [Errno 2] ऐसी कोई फ़ाइल या निर्देशिका java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): उपप्रोसेस कोड 2 – vkris

+0

के साथ विफल रहा है मेरे पास एक कार्यशील स्क्रिप्ट है जिसमें -फाइल ../scripts/ है mapper.py -mapper ../scripts/mapper.py – Brig

0

क्या आपके mapper.py पर निष्पादन अनुमति है? यदि नहीं तो आपको इसकी आवश्यकता है।

chmod a+x scripts/mapper.py 

Hadoop कांटे और स्क्रिप्ट से पहले ही लिखते हैं/STD को पढ़ता है, तो आप इसे चलाने के लिए अनुमति निष्पादित देने की आवश्यकता चलाता है।

+0

हाँ यह है। मैंने इस पोस्ट में उल्लेख किया है कि इसमें सभी अनुमतियां हैं। – vkris

+1

शायद आपको अपने टास्क ट्रैकर नोड्स में से किसी एक पर जाना चाहिए और बिल्ली somedata.csv | ./mapper चलने का प्रयास करें।py आपको डेटा नोड से कुछ असंगत के साथ एक त्रुटि मिल सकती है। स्क्रिप्ट निर्देशिका भी बिन और contrib के एक भाई है? –

+0

मैं एक छद्म वितरित मोड में चलाने की कोशिश कर रहा हूं। मैंने एक वास्तविक क्लस्टर के साथ चलने का प्रयास किया, फिर भी वही समस्या देता है। तो चल रहा बिल्ली इनपुटफाइल | ./mapper.py काम करता है !! हां, स्क्रिप्ट निर्देशिका बिन, contrib का एक भाई है। – vkris

0

मुझे एक ही त्रुटि मिली जब मेरा मैपर शून्य या खाली स्ट्रिंग देता है। तो मैं मूल्य के लिए एक जांच करना था:

try: 
    # Skip over any errors 

    word = words[18].strip() 

     if (len(word) == 0): 
      word = "UKNOWN" 

    print '%s\t%s' % (word, 1) 

except Value: 
    pass 
+0

ओह! मैंने अपने इनपुट डेटा के साथ प्रयास किया, यह काम कर रहा था जब मैंने बिल्ली इनपुट.txt किया था। python mapper.py – vkris

+0

मेरा परीक्षण डेटा बिल्ली पास करता है | mapper.py | reducer.py परीक्षण भी। मुझे त्रुटि प्रबंधन में भी जोड़ना पड़ा – Brig

3

आपकी समस्या सबसे अधिक संभावना है कि अजगर निष्पादन दास पर मौजूद नहीं है (जहां TaskTracker चल रहा है)। जावा एक ही त्रुटि संदेश देगा।

इसे हर जगह इंस्टॉल करें जहां इसका उपयोग किया जाता है। संयुक्त राष्ट्र अपनी फ़ाइल आप कुटिया के रूप में आप शायद पहले से ही कर उपयोग कर सकते हैं:

#!/usr/bin/python -O 
rest 
of 
the 
code 

सुनिश्चित करें कि कुटिया के बाद पथ एक ही जहां अजगर TaskTrackers पर स्थापित है सुनिश्चित करें।

+0

धन्यवाद, यह मेरी समस्या थी! मेरे लिए क्या काम किया गया था '#!/Usr/bin/env python'। –

1

मैं स्ट्रीमिंग पायथन नौकरी चलाने की कोशिश कर रहे एक सीडीएच 4 हैडोप क्लस्टर पर एक ही मुद्दे में भाग गया। चाल पहले लाइनों के रूप में अपने नक्शाकार/कम करने फ़ाइल में जोड़ने के लिए है:

import sys 
sys.path.append('.') 

यह वर्तमान कार्यशील निर्देशिका में अजगर देखो कर देगा और यह तब चलाने के लिए, यह भी सुनिश्चित करें कि आपके मामला सही है सक्षम होना चाहिए ।

2

एक और स्नीकी चीज इसका कारण बन सकती है। स्क्रिप्ट पर अपनी लाइन-अंत डॉस शैली रहे हैं, तो आपकी पहली पंक्ति ("कुटिया लाइन") नग्न आंखों के लिए कुछ ऐसा दिखाई देगा:

#!/usr/bin/python 

...my code here... 

लेकिन इसकी बाइट्स गिरी जब करने के लिए इस तरह दिखेगा

% od -a myScript.py 
0000000 # ! / u s r / b i n / p y t h o 
0000020 n cr nl cr nl . . . m y sp c o d e sp 
0000040 h e r e . . . cr nl 

यह एक निष्पादन "/usr/bin/python\r" कहा जाता है, जो यह नहीं मिल सकता है की तलाश में है, इसलिए इसे "No such file or directory" साथ मर जाता है: यह अपनी स्क्रिप्ट निष्पादित करने के लिए कोशिश करता है।

यह मुझे आज, फिर से, इसलिए मुझे इसे SO पर कहीं लिखना पड़ा।

+0

क्या हमारे पास यह कारण है कि यह नीचे मतदान क्यों किया गया था? – Jeevs

+0

यहां एक ही विचार मिला: http://stackoverflow.com/questions/20218521/hadoop-streaming-external-mapper-script-file-not-found – Jeevs

+0

सप्ताहांत में इस से घिरा हुआ है। ओबामा धन्यवाद! : डी – dave

0

फ़ाइल नहीं मिली त्रुटि कभी-कभी "फ़ाइल नहीं मिली" का अर्थ नहीं है, इसके बजाय इसका अर्थ है "इस स्क्रिप्ट को निष्पादित नहीं किया जा सकता"।

यह जानने के बाद मैं, इस तरह समस्याओं को हल किया है जब आप मुद्दों स्ट्रीमिंग मैं आप इस जांच सूची का पालन करने के लिए सुझाव पर (कोई जावा) के साथ सामना कर रहे हैं:

  1. स्क्रिप्ट चलाने करता है? शुरूआत न करें दुभाषिया का उपयोग कर रहा है iee python myScript.py इसे ./myScript.py के रूप में शुरू करने पर निष्पादन योग्य बनाते हैं, यह स्ट्रीमिंग आपकी स्क्रिप्ट को कॉल करने का तरीका है।
  2. -verbose का उपयोग यह देखने के लिए करें कि जार में क्या चल रहा है, जिसे कंटेनर में तैनात किया जाएगा, कभी-कभी यह सहायता।
  3. कंटेनर स्क्रिप्ट के अंदर सिमलिंक असली फाइल नहीं हैं।
  4. -file का उपयोग कर स्थानांतरित की गई फ़ाइलें फ़ोल्डर्स में नहीं हैं। -mapper folder/script.py या -reducer folder/script.py इलाज कर रहे हैं के रूप में script.py
  5. कंटेनरों और अंदर उन्हें नष्ट हो जाती हैं के बाद काम पूरा करता है, अगर आप को देखने के लिए क्या एक कंटेनर में क्या हो रहा है यह HDFS, IE में कदम चाहते हैं कुछ भी: एक .sh साथ नक्शाकार या कम करने की जगह स्क्रिप्ट जो काम करता है।

इस चेकलिस्ट ने मुझे बहुत मदद की, मुझे उम्मीद है कि आपके लिए भी उपयोगी हो सकता है।

यहां अस्पष्ट त्रुटि संदेश के साथ क्लासिक लॉग का पालन करता है।

यह सच है, यह प्रोग्राम नहीं चला सकता है।

Caused by: java.io.IOException: Cannot run program "/hadoop/yarn/local/usercache/root/appcache/application_1475243242823_0007/container_1475243242823_0007_01_000004/./reducer.py": 
error=2, No such file or directory 

यही कारण है झूठ।

at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:209) 
    ... 15 more 

इस पढ़ें:

Caused by: java.io.IOException: error=2, No such file or directory 

यह एक झूठ है कि अगर -verbose यह पैकेजिंग की सूची में से पता चलता फ़ाइल मौजूद है।

at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:187) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) 
0

पाइथन कोड के साथ नक्शा चलाने के दौरान मुझे एक ही समस्या का सामना करना पड़ा है। समाधान है: हमें "-फाइल" को मैपर और रेड्यूसर के सामने भी निर्दिष्ट करना होगा।

hadoop jar /opt/cloudera/parcels/CDH-5.12.2-1.cdh5.12.2.p0.4/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.12.2.jar **-file /home/mapper.py** -mapper /home/mapper.py **-file /home/reducer.py** -reducer /home/reducer.py -input /system/mainstream/tmp/file.txt -output /system/mainstream/tmp/output