मेरे पास 1 मास्टर (नामनोड, माध्यमिकनामोड, संसाधन प्रबंधक) और 2 दास (डेटाानोड, नोडेमनेगर) से बना एक छोटा क्लस्टर है।MapReduce2 में vcores और मेमोरी के आधार पर कंटेनर कैसे बनाए जाते हैं?
मैं गुरु के सूत-site.xml में स्थापित किया है: 512
yarn.scheduler.maximum-allocation-mb
:: 1024yarn.scheduler.minimum-allocation-vcores
: 1yarn.scheduler.maximum-allocation-vcores
: 2yarn.scheduler.minimum-allocation-mb
मैंने दासों के यार्न-साइट.एक्सएमएल में सेट किया है:
yarn.nodemanager.resource.memory-mb
: 2048yarn.nodemanager.resource.cpu-vcores
: 4
तो मास्टर में, मैं mapred-site.xml में स्थापित किया है:
mapreduce.map.memory.mb
: 512mapreduce.map.java.opts
: -Xmx500mmapreduce.map.cpu.vcores
: 1mapreduce.reduce.memory.mb
: 512mapreduce.reduce.java.opts
: -Xmx500mmapreduce.reduce.cpu.vcores
: 1
तो यह मेरी समझ है कि जब एक नौकरी चल रहा है, mapreduce ApplicationMaster 512 एमबी की के रूप में कई कंटेनर बनाने की कोशिश करेंगे और दोनों गुलामों पर 1 vCore, जिसमें केवल 2048 एमबी और 4 vCores प्रत्येक उपलब्ध हैं, जो प्रत्येक दास पर 4 कंटेनरों के लिए जगह प्रदान करता है। यह ठीक है कि मेरी नौकरियों पर क्या हो रहा है, इसलिए अब तक कोई समस्या नहीं है।
हालांकि, जब मैं
mapreduce.map.cpu.vcores
औरmapreduce.reduce.cpu.vcores
को 1 से 2 तक बढ़ाता हूं, तो सैद्धांतिक रूप से प्रति दास 2 कंटेनर बनाने के लिए सैद्धांतिक रूप से पर्याप्त vCores उपलब्ध होना चाहिए? लेकिन नहीं, मेरे पास अभी भी प्रति दास 4 कंटेनर हैं।मैंने 512 से 768 तक
mapreduce.map.memory.mb
औरmapreduce.reduce.memory.mb
को बढ़ाने की कोशिश की। यह 2 कंटेनर (2048/768 = 2) के लिए जगह छोड़ देता है।इससे कोई फर्क नहीं पड़ता कि vCores mappers और reducers के लिए 1 या 2 पर सेट हैं, यह हमेशा 768 एमबी के साथ प्रति गुलाम 2 कंटेनर और 512 एमबी के साथ 4 कंटेनर का उत्पादन करेगा। तो vCores के लिए क्या हैं? एप्लिकेशनमास्टर परवाह नहीं लगती है।
इसके अलावा, जब 2 करने के लिए 768 करने के लिए स्मृति और vCores की स्थापना, मैं इस जानकारी nodemanager यूआई पर एक नक्शाकार कंटेनर के लिए प्रदर्शित किया:
768 एमबी 1024 TotalMemoryNeeded में बदल गया है, और 2 vCores को अनदेखा किया जाता है और 1 TotalVCores के रूप में प्रदर्शित किया जाता है।
- केवल स्मृति का उपयोग किया है (और vCores पर ध्यान नहीं दिया) कंटेनरों की संख्या की गणना करने के लिए:
तो कई सवाल में "यह कैसे काम करता" सवाल तोड़ने के लिए?
mapreduce.map.memory.mb
कंटेनरों की संख्या की गणना के लिए केवल एक पूरी तरह से सार मूल्य है (और यही कारण है कि इसे 2 की अगली शक्ति तक गोल किया जा सकता है)? या यह किसी भी तरह से वास्तविक स्मृति आवंटन का प्रतिनिधित्व करता है?- हम
mapreduce.map.java.opts
में कुछ -Xmx मान निर्दिष्ट क्यों करते हैं? कंटेनर को स्मृति आवंटित करने के लिएmapreduce.map.memory.mb
से मान का उपयोग क्यों नहीं करते? - कुल मिलाकर क्या है और यह हमेशा 1 के बराबर क्यों है? मैंने
mapreduce.map.cpu.vcores
को सभी नोड्स (मास्टर और दास) में बदलने की कोशिश की लेकिन यह कभी भी नहीं बदले।
आप CapacityScheduler उपयोग करते हैं? यदि हां, तो क्या आप मुझे निम्न कॉन्फ़िगरेशन पैरामीटर के मान बता सकते हैं: yarn.scheduler.minimum-allocation-mb, yarn.scheduler.minimum-allocation-vcores, yarn.scheduler.maximum-allocation-mb, yarn.scheduler.maximum- आवंटन-vcores –
इसके अलावा, यदि आप क्षमता शेड्यूलर का उपयोग कर रहे हैं, तो मेरा अनुमान है कि, आपका "yarn.scheduler.capacity.resource-calculator" को "org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator" पर सेट किया गया है (आप DefaultResourceCalculator का उपयोग कर रहे हैं, जो संसाधन आवश्यकताओं की गणना करते समय सीपीयू को अनदेखा करता है) –
धन्यवाद, आप सही हैं! मुझे नहीं पता था कि विभिन्न संसाधन कैलकुलेटर थे। अब मैं अपनी क्षमता-scheduler.xml में DominantResourceCalculator का उपयोग कर रहा हूं और यह काम करता है। – Nicomak