2013-02-12 42 views
5

मैं हडोप में कुछ आसान करने का प्रयास कर रहा हूं और पाया कि मैपर्स और रेड्यूसर लिखते समय हर जगह स्थैतिक के रूप में परिभाषित किया जाता है। मेरा काम कई map भागों और एक अंतिम reduce में विघटित होने जा रहा है। क्या होगा यदि मैं अपने नौकरियों में से किसी एक अन्य नौकरी में पुन: उपयोग करना चाहूंगा? अगर मेरे पास मैपर वर्ग को आंतरिक static के रूप में परिभाषित किया गया है, तो क्या मैं इसे अन्य नौकरी में उपयोग कर सकता हूं? इसके अलावा गैर-तुच्छ समस्याओं को कई और जटिल मैपर की आवश्यकता हो सकती है, इसलिए बनाए रखने के दौरान उन्हें एक विशाल फ़ाइल में डालकर भयानक हो जाता है।हैडोप में क्या मैपर और रेड्यूसर स्थिर वर्ग होना चाहिए?

क्या नौकरी की तुलना में नियमित कक्षाओं (संभवतः अलग जार में भी) के रूप में मैपर और रेड्यूसर होने का कोई तरीका है?

उत्तर

8

क्या आपका प्रश्न है कि कक्षा को स्थैतिक होना चाहिए, स्थिर हो सकता है, या आंतरिक हो सकता है, या आंतरिक होना चाहिए?

Hadoop ही है, अपने Mapper या Reducer प्रतिबिंब द्वारा दृष्टांत करने में सक्षम होने की जरूरत है वर्ग संदर्भ/नाम अपने Job में विन्यस्त दिया। यह असफल हो जाएगा यदि यह एक गैर स्थैतिक आंतरिक वर्ग है क्योंकि एक उदाहरण केवल आपके कुछ वर्गों के संदर्भ में बनाया जा सकता है, जो शायद हडोप के बारे में कुछ भी नहीं जानता है। (जब तक कि आंतरिक वर्ग अपनी संलग्न कक्षा को विस्तारित न करे, मुझे लगता है।)

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

मेरे लिए Mapper या Reducer स्पष्ट रूप से एक शीर्ष-स्तरीय अवधारणा है और एक शीर्ष-स्तरीय वर्ग के योग्य है। कुछ उन्हें "धावक" वर्ग के साथ जोड़ने के लिए उन्हें आंतरिक स्थिर बनाना चाहते हैं। मुझे यह पसंद नहीं है क्योंकि यह वास्तव में उप-पैकेज के लिए क्या है। आप इससे बचने के लिए एक और डिजाइन कारण नोट करते हैं। चौथे प्रश्न के लिए: नहीं, मुझे विश्वास है कि आंतरिक कक्षाएं अच्छी प्रथा नहीं हैं।

अंतिम प्रश्न: हाँ Mapper और Reducer कक्षाएं अलग जेएआर फ़ाइल में हो सकती हैं। आप हडोप को बताते हैं कि जेएआर फाइलों में यह सब कोड शामिल है, और यही वह है जो इसे श्रमिकों को भेज देगा। श्रमिकों को आपके Job की आवश्यकता नहीं है। हालांकि उन्हें कुछ भी चाहिए जो Mapper और Reducer उनके समान JAR पर निर्भर करता है।

1

मुझे लगता है कि उपर्युक्त उत्तर बहुत सटीक है और तर्क को पूरा करता है। सिवाय, मुझे लगता है कि मानचित्र बनाने और कम करने के दौरान आंतरिक कक्षाओं का उपयोग किया जाना चाहिए। आईएमओ, सभी कोड एक ही स्थान पर होना चाहिए।

और जेनरिक का उपयोग एकल वर्ग में विचारपूर्वक किया जा सकता है ताकि कोई टाइपकास्टिंग त्रुटियां न हों।

+0

यह कोई जवाब नहीं है। यदि आप पर्याप्त प्रतिष्ठा प्राप्त करते हैं तो आप एक टिप्पणी छोड़ सकते हैं। – songyuanyao