2010-05-22 8 views
10

में वैश्विक चर एक मेरा मानचित्र पुनरावृत्ति मानचित्र/दृष्टिकोण को कम करता है। और अगर कुछ शर्तों को पूरा किया जाता है तो इसे रोकने की जरूरत है। क्या वैसे भी मैं एक वैश्विक चर सेट कर सकता हूं जिसे सभी मानचित्रों में वितरित किया जा सकता है/कार्यों को कम किया जा सकता है और जांच कर सकता है कि वैश्विक चर पूर्ण होने के लिए स्थिति तक पहुंचता है या नहीं।हडूप

ऐसा कुछ।

While(Condition != true){ 

      Configuration conf = getConf(); 
      Job job = new Job(conf, "Dijkstra Graph Search"); 

      job.setJarByClass(GraphSearch.class); 
      job.setMapperClass(DijkstraMap.class); 
      job.setReducerClass(DijkstraReduce.class); 

      job.setOutputKeyClass(IntWritable.class); 
      job.setOutputValueClass(Text.class); 

} 

जहां स्थिति एक वैश्विक चर है जिसे प्रत्येक मानचित्र के दौरान/निष्पादन को कम करने के बाद संशोधित किया जाता है।

उत्तर

5

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

अधिक आम तौर पर

- वहाँ दो मुख्य तरीके राज्य को क्रियान्वित करने नोड्स के बीच साझा किया जाता है (हालांकि यह ध्यान दिया जाना चाहिए कि साझा करने राज्य सबसे अच्छा बचा के बाद से यह क्षमता को सीमित करता है) कर रहे हैं।

  1. HDFS के लिए एक फ़ाइल लिखें कि अन्य नोड कर सकते हैं पढ़ें (सुनिश्चित करें कि फ़ाइल साफ हो जाता है जब काम से बाहर निकलता है, और कहा कि सट्टा निष्पादन अजीब विफलताओं का कारण नहीं बनेगा बनाने)।
  2. समर्पित जेडके पेड़ नोड्स में कुछ डेटा स्टोर करने के लिए चिड़ियाघर का उपयोग करें।
+0

आप कृपया कैसे काउंटर का उपयोग करने के बारे में कुछ और समझा सकते हैं? धन्यवाद। – Deepak

+1

इसे संक्षिप्त परिचय के लिए आज़माएं: http://philippeadjiman.com/blog/2010/01/07/hadoop-tutorial-series-issue-3-counters-in-action/ – SquareCog

0

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

6

आप एक मूल्य है कि आप अपने मानचित्रकारों में उपयोग करने में सक्षम हो जाएगा स्थापित करने के लिए Configuration.set (स्ट्रिंग नाम, स्ट्रिंग मान) उपयोग कर सकते हैं/कम करने वाली/आदि:

अपने ड्राइवर में:

conf.set("my.dijkstra.parameter", "value"); 

और उदाहरण के लिए

public void configure(JobConf job) { 
     myParam = job.get("my.dijkstra.parameter"); 
    } 

लेकिन यह होगा की संभावना मदद नहीं आप पिछले नौकरियों के उत्पादन पर देखने के लिए तय करने के लिए एक और यात्रा शुरू करने के लिए है कि क्या: अपने नक्शाकार में। अर्थात। नौकरी निष्पादन के बाद यह मूल्य वापस नहीं धकेल दिया जाएगा।

के लिए आप फ़ाइलों है कि सभी नोड्स के बीच वितरित किया जाएगा स्टोर करने के लिए Hadoop के DistributedCache उपयोग कर सकते हैं। यह एचडीएफएस पर कुछ स्टोर करने से थोड़ा बेहतर है यदि आप जिस मूल्य को पारित करने जा रहे हैं वह कुछ छोटा है।

पाठ्यक्रम counters के

इस उद्देश्य के लिए इस्तेमाल किया जा सकता। लेकिन वे एल्गोरिदम में निर्णय लेने के प्रयोजनों के लिए बहुत विश्वसनीय नहीं दिखते हैं। ऐसा लगता है कि कुछ मामलों में उन्हें दो बार बढ़ाया जा सकता है (यदि कुछ कार्य एक बार फिर निष्पादित किया गया था, उदाहरण के लिए विफलता या सट्टा निष्पादन के मामले में) - मुझे यकीन नहीं है।

+0

यह उत्तर (मेरा) प्रश्न बिल्कुल ठीक है। आपका बहुत बहुत धन्यवाद! – Malcolm

3

यह है कि यह कैसे Hadoop 2 में काम करता है।0

अपने ड्राइवर में:

conf.set("my.dijkstra.parameter", "value"); 

और अपने मैपर में:

protected void setup(Context context) throws IOException, 
      InterruptedException { 
     Configuration conf = context.getConfiguration(); 

     strProp = conf.get("my.dijkstra.parameter"); 
     // and then you can use it 
    }