2010-10-12 10 views
20

के बारे में setJarByClass विधि Hadoop API दस्तावेज़ों में यहHadoop क्वेरी नौकरी वर्ग

दिया है कि

setJarByClass 

public void setJarByClass(Class<?> cls) 

Set the Jar by finding where a given class came from. 

वास्तव में क्या इस व्याख्या क्या मतलब है? क्या यह उपर्युक्त विधि में निर्दिष्ट क्लास फ़ाइल तर्क से एक JAR फ़ाइल बनाता है? और क्या यह जार फ़ाइल MapReduce कार्य के लिए निष्पादित की जाती है।

उत्तर

22

यह विधि जार फ़ाइल सेट करती है जिसमें प्रत्येक नोड मैपर और रेड्यूसर कक्षाओं की तलाश करेगा।

यह दिए गए वर्ग से एक जार नहीं बनाता है। इसके बजाय, यह दिए गए वर्ग वाले जार की पहचान करता है। और हाँ, मैपराइडस नौकरी के लिए उस जार फ़ाइल को "निष्पादित" किया गया है (वास्तव में उस जार फ़ाइल में मैपर और रेड्यूसर निष्पादित किया गया है)।

(यह भी देखें Stanley Xu's answer to a similar question इस विधि के लिए जरूरत के बारे में जब से तुम कमांड लाइन पर जार देना)

+1

अच्छा स्पष्टीकरण चिह्न। मुझे यहां कोई संदेह है, अगर मैपर और रेड्यूसर विभिन्न जार फ़ाइल में मौजूद हैं तो क्या होगा? – Nageswaran

0
job.setJarByClass(WordCount.class); 

जार जो कि जार में एक वर्ग को निर्दिष्ट करके Mapper और Reducer शामिल की पहचान करने में मदद करता है।

8

कृपया ध्यान दें कि नौकरी कक्षा पर उपरोक्त विधि ड्राइवर में बुलाया जाता है। आप ड्राइवर को क्लाइंट के रूप में बुलाया जाता है, आमतौर पर आपका डेस्कटॉप या एज मशीन जो क्लस्टर का हिस्सा नहीं है और आपकी कक्षाएं (जार फाइलों में) उस मशीन पर बैठेगी। क्लस्टर पर चलाने के लिए अपने मैप्रिडस नौकरी के लिए, आपको अपने क्लाइंट मशीन से क्लस्टर में अपना मैपर, रेड्यूसर और कोई अन्य आवश्यक कक्षाएं भेजने की आवश्यकता है। आप ड्राइवर वर्ग क्लस्टर में आवश्यक कक्षाओं वाली जार फ़ाइल भेजने का ख्याल रखता है। आपको भेजने के लिए कौन सा जार आपको ड्राइवर के रूप में निर्दिष्ट करने की आवश्यकता है, यह नहीं पता कि आपके ड्राइवर के वर्ग पथ पर आपके पास जार फ़ाइलों के ढेर के बीच कौन सा भेजा जाना चाहिए। यह विधि सेट JarByClass या setJar या जॉब क्लास पर समान विधि के किसी अन्य संस्करण का उपयोग करके किया जाता है।

जाहिर है अगर आप इसे निर्दिष्ट नहीं करते हैं, जिसका मतलब है कि इस विधि को कॉल नहीं करना या टिप्पणी करना न हो, तो दास नोड्स पर क्लास नॉटफाउंड अपवाद होगा।

उम्मीद है कि यह स्पष्ट करता है!

+0

हाय @ रैग्स जार में आमतौर पर मैपर, रेड्यूसर और ड्राइवर कक्षाएं एक साथ सही होती हैं? आप कहने का मतलब है कि जब यह जार क्लस्टर को भेजा जाता है, तो नोड्स को पता होना चाहिए कि शुरू करने के लिए जार से कौन सी कक्षा चुननी है? लेकिन हम पहले से ही हैडऑप कमांड – user2626445

+0

हैडोप ; कक्षा नाम जरूरी नहीं है जब जार के मुख्य वर्ग को ड्राइवर माना जाता है। तो, हमें setJarByClass निर्दिष्ट क्यों करना है? जार या कमांड से बाहर निकल सकते हैं? – user2626445

+0

मेरे पास job.setMapperClass और job.setReducerClass पहले ही ड्राइवर कोड में परिभाषित है। – user2626445

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