2012-03-25 8 views
15

main() और ToolRunner.run() से मैप्रिडस नौकरी को कॉल करने के बीच क्या अंतर है? जब हम कहते हैं कि मुख्य वर्ग कहता है, MapReduce extends Configured implements Tool, हमें अतिरिक्त विशेषाधिकार क्या हैं जो हमारे पास नहीं हैं यदि हम मुख्य विधि से नौकरी का सरल रन बनाना चाहते हैं? धन्यवाद।नौकरी को कॉल करने में अंतर

उत्तर

23

बिना किसी अतिरिक्त विशेषाधिकार नहीं है, लेकिन अपने आदेश पंक्ति विकल्पों GenericOptionsParser, जो आप कुछ विन्यास गुण निकालने और इसमें से एक विन्यास वस्तु कॉन्फ़िगर की अनुमति देगा के माध्यम से चलाने के हो: मूल रूप से

http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html

बल्कि यह है कि कुछ को पार्स विकल्प अपने आप को (सूची में तर्क के सूचकांक का उपयोग करके), आप स्पष्ट रूप से कमांड लाइन से विन्यास गुण कॉन्फ़िगर कर सकते हैं:

hadoop jar myJar.jar com.Main prop1value prop2value 

public static void main(String args[]) { 
    Configuration conf = new Configuration(); 
    conf.set("prop1", args[0]); 
    conf.set("prop2", args[1]); 

    conf.get("prop1"); // will resolve to "prop1Value" 
    conf.get("prop2"); // will resolve to "prop2Value" 
} 

ज्यादा मोर बन जाता है ई ToolRunner साथ सघन:

hadoop jar myJar.jar com.Main -Dprop1=prop1value -Dprop2=prop2value 

public int run(String args[]) { 
    Configuration conf = getConf(); 

    conf.get("prop1"); // will resolve to "prop1Value" 
    conf.get("prop2"); // will resolve to "prop2Value" 
} 

एक चेतावनी के अंतिम शब्द है, हालांकि: जब विन्यास विधि getConf() का उपयोग कर, अपनी नौकरी वस्तु पहले बनाने के लिए, और उसके बाद खींचें इसके विन्यास बाहर - नौकरी निर्माता Configruation वस्तु की एक प्रतिलिपि बनाता में पारित कर दिया, इसलिए यदि आप संदर्भ में पारित में परिवर्तन करता है, तो आप काम उन परिवर्तनों को नहीं देख पाएंगे:

public int run(String args[]) { 
    Configuration conf = getConf(); 

    conf.set("prop3", "blah"); 

    Job job = new Job(conf); // job will have a deep copy of conf 

    conf.set("prop4", "dummy"); // here we're amending the original conf 

    job.getConfiguration().get("prop4"); // will resolve to null 
} 
+0

ठीक है, यह कोड के साथ अच्छी व्याख्या थी। मैंने पहले नौकरी ऑब्जेक्ट बनाने की तरह पहले कुछ बिंदुओं पर ध्यान नहीं दिया था और फिर इसकी कॉन्फ़िगरेशन प्राप्त कर रहा था लेकिन अब यह समझ में आता है .. –

11

ToolRunner .run() का उपयोग कर, किसी भी Hadoop आवेदन standard command line options Hadoop द्वारा समर्थित संभाल सकते हैं। ToolRunner आंतरिक रूप से GenericOptionsParser का उपयोग करता है। संक्षेप में, हैडऑप विशिष्ट विकल्प जो कमांड लाइन प्रदान किए जाते हैं उन्हें पार्स किया जाता है और एप्लिकेशन के Configuration ऑब्जेक्ट में सेट किया जाता है। यदि आप बस मुख्य() का उपयोग करते हैं, तो यह स्वचालित रूप से नहीं होता है।

उदाहरण के लिए। यदि आप कहते हैं:

% hadoop MyHadoopApp -D mapred.reduce.tasks=3 

फिर ToolRunner.run(new MyHadoopApp(), args) स्वचालित रूप से मूल्य पैरामीटर mapred.reduce.tasks 3 करने के लिए Configuration वस्तु में सेट हो जाएगा।

कोई अतिरिक्त विशेषाधिकार नहीं है जिसे हम प्राप्त करते हैं। आम तौर पर लोग हडूप नौकरियों में मुख्य() का उपयोग नहीं करते हैं। ToolRunner का उपयोग करना .run() एक मानक अभ्यास है।

+0

@ तेजास-थानक्स बहुत !! :) हाँ, मेरे मन में इतना अस्पष्ट विचार था लेकिन अब यह स्पष्ट है .. –

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