मैं जहाँ से lib.py
lib
मॉड्यूल आयात करता है एक MapReduce काम main.py
में परिभाषित है, की है।MapReduce नौकरी में कस्टम मॉड्यूल कैसे आयात करें?
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files lib.py,main.py
-mapper "./main.py map" -reducer "./main.py reduce"
-input input -output output
मेरी समझ में, यह प्रत्येक कंप्यूटिंग मशीन पर दोनों main.py
और lib.py
रखना चाहिए वितरित कैश फ़ोल्डर में है और इस तरह मॉड्यूल lib
उपलब्ध बनाने: मैं Hadoop स्ट्रीमिंग Hadoop क्लस्टर के लिए इस काम प्रस्तुत करने के लिए इस प्रकार के रूप में उपयोग main
पर। लेकिन ऐसा नहीं होता है: लॉग से मैं देखता हूं कि वास्तव में को उसी निर्देशिका में कॉपी किया गया है, लेकिन main
आयात नहीं कर सकता, ImportError
फेंक रहा है।
ऐसा क्यों होता है और मैं इसे कैसे ठीक कर सकता हूं?
यूपीडी। जोड़ना पथ के लिए वर्तमान निर्देशिका काम नहीं किया:,
import sys
sys.path.append(os.path.realpath(__file__))
import lib
# ImportError
हालांकि लोड हो रहा है मॉड्यूल मैन्युअल चाल किया:
import imp
lib = imp.load_source('lib', 'lib.py')
लेकिन वह नहीं है जो मैं चाहता। तो पाइथन दुभाषिया एक ही निर्देशिका में अन्य .py
फ़ाइलों को क्यों देखता है, लेकिन उन्हें आयात नहीं कर सकता है? ध्यान दें कि मैंने बिना किसी प्रभाव के एक ही निर्देशिका में खाली __init__.py
फ़ाइल जोड़ने का प्रयास कर लिया है।
क्या आपने यह सुनिश्चित करने के लिए 'main.py' में 'sys.path' की जांच की है कि कार्यशील निर्देशिका शामिल है? – lmjohns3
@ lmjohns3: हाँ, कामकाजी निर्देशिका क्लासपाथ पर है। बीटीडब्लू, क्या यह स्वचालित रूप से स्क्रिप्ट चलाने के लिए शामिल नहीं है? (सिर्फ उत्सुक) – ffriend
मेरा मानना है कि यह पाइथन स्क्रिप्ट्स के लिए सच है जो कमांड लाइन पर शुरू हो गए हैं, लेकिन हैडोप स्ट्रीमिंग एक अन्य तरीके से पाइथन दुभाषिया शुरू कर सकती है (वास्तव में निश्चित नहीं)। किसी भी तरह से, मुझे अभी भी लगता है कि यह एक पथ मुद्दे की तरह लगता है। एक अलग तरीके से अपने मॉड्यूल वितरित करने की एक संभावना के लिए http://www.litfuel.net/plush/?postid=195 देखें। वैकल्पिक रूप से, अपने आदेशों को एक शेल स्क्रिप्ट में लिखने का प्रयास करें और '-mapper' और' -reducer' कमांड-लाइन तर्कों के लिए इसे पास करें। – lmjohns3