2017-07-05 15 views
6

मेरे पास 32 जीबी रैम और 64 जीबी वाला एक हैडूप क्लस्टर में 10 नोड्स हैं।सीमा YARN कंटेनर प्रोग्रामेटिक रूप से

इन 10 नोड्स नोड सीमा yarn.nodemanager.resource.memory-mb 26GB करने के लिए और 52GB करने के लिए 64GB नोड के लिए सेट कर दिया जाता के लिए (कुछ नौकरियों एकल कम करने के लिए 50GB की आवश्यकता है कि है, वे इस नोड पर चलने)

समस्या है, जब मैं बुनियादी चलाने नौकरियों के लिए 8 जीबी की आवश्यकता होती है, 32 जीबी नोड्स समानांतर में 3 मैपर (26/8 = 3) और 64 जीबी नोड स्पॉन्स 6 मैपर होते हैं। सीपीयू लोड की वजह से यह नोड आमतौर पर अंतिम समाप्त होता है।

मैं नौकरी कंटेनर संसाधन प्रोग्रामेटिक रूप से सीमित करना चाहता हूं, उदा। अधिकांश नौकरियों के लिए कंटेनर सीमा 26 जीबी तक सेट करें। यह कैसे किया जा सकता है?

उत्तर

2

सभी yarn.nodemanager.resource.memory-mb (मेमोरी) पहले, yarn.nodemanager.resource.cpu-vcores (Vcore) Nodemanager डेमॉन/सेवा कॉन्फ़िगरेशन गुण हैं और धागे क्लाइंट अनुप्रयोग में ओवरराइड नहीं किया जा सकता। यदि आप इन कॉन्फ़िगरेशन गुणों को बदलते हैं तो आपको nodemanager सेवाओं को पुनरारंभ करने की आवश्यकता है।

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

शेड्यूलिंग नीति फेयर शेड्यूलर कतार/पूल स्तर पर सेट की जा सकती हैं।

शेड्यूलिंग नीति: किसी भी कतार की शेड्यूलिंग नीति सेट करने के लिए।

एक बार जब आप, दोनों स्मृति कर सकते हैं सीपीयू कोर कर सकते हैं डीआरएफ शेड्यूलिंग नीति के साथ नए मेले अनुसूचक कतार/पूल बनाया है - अनुमति प्राप्त मान "फीफो"/"निष्पक्ष"/"डीआरएफ"

अधिक जानकारी के लिए this apache doc देखें हैं इस प्रकार कार्यक्रम में सेट किया जाना चाहिए।

कॉन्फ़िगरेशन conf = नया कॉन्फ़िगरेशन();

मैप्रिडस एप्लिकेशन में कंटेनर आकार को परिभाषित करने के लिए कैसे करें।

Configuration conf = new Configuration(); 

conf.set("mapreduce.map.memory.mb","4096"); 
conf.set(mapreduce.reduce.memory.mb","4096"); 

conf.set(mapreduce.map.cpu.vcores","1"); 
conf.set(mapreduce.reduce.cpu.vcores","1"); 

संदर्भ - 1 https://hadoop.apache.org/docs/r2.7.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml नक्शाकार/कम करने के लिए cpu.vcores आवंटन के

डिफ़ॉल्ट मान होगा, आप इस मूल्य अगर यह एक सीपीयू गहन आवेदन है बढ़ा सकते हैं। याद रखें यदि आप इस मान को बढ़ाते हैं, समानांतर में चल रहे मैपर/रेड्यूसर कार्यों की संख्या भी कम हो जाएगी।

+0

हम्म, मुझे लगता है कि शेड्यूलर के साथ पूरी चीजें वांछनीय नहीं है, लेकिन यह सीपीयू।vcores सेटिंग वास्तव में मदद कर सकते हैं, क्योंकि हालांकि नोड्स के लिए रैम राशि अलग है, लेकिन सीपीयू कोर एक जैसा है, इसलिए मैं मैपर के लिए 2 vcores सेट कर सकता हूं और यह विभिन्न नोड्स के लिए मैपर्स की समान मात्रा में वृद्धि करेगा। मैं इसे कोशिश करूंगा – AdamSkywalker

+0

अच्छा लगता है, जो काम कर सकता है, यदि कुल चलने वाले कंटेनर आपकी क्लस्टर क्षमता को दबाते हैं। – sachin

+0

पिछली टिप्पणी में टाइपो के लिए खेद है, सीपीयू vcores सीमा गैर ड्रॉ शेड्यूलिंग नीति में चेक नहीं किया जाएगा। – sachin

0

आपको इस तरह की कॉन्फ़िगरेशन सेट करना होगा। इस

// create a configuration 
Configuration conf = new Configuration(); 
// create a new job based on the configuration 
Job job = new Job(conf); 
// here you have to put your mapper class 
job.setMapperClass(Mapper.class); 
// here you have to put your reducer class 
job.setReducerClass(Reducer.class); 
// here you have to set the jar which is containing your 
// map/reduce class, so you can use the mapper class 
job.setJarByClass(Mapper.class); 
// key/value of your reducer output 
job.setOutputKeyClass(Text.class); 
job.setOutputValueClass(Text.class); 
// this is setting the format of your input, can be TextInputFormat 
job.setInputFormatClass(SequenceFileInputFormat.class); 
// same with output 
job.setOutputFormatClass(TextOutputFormat.class); 
// here you can set the path of your input 
SequenceFileInputFormat.addInputPath(job, new Path("files/toMap/")); 
// this deletes possible output paths to prevent job failures 
FileSystem fs = FileSystem.get(conf); 
Path out = new Path("files/out/processed/"); 
fs.delete(out, true); 
// finally set the empty out path 
TextOutputFormat.setOutputPath(job, out); 

// this waits until the job completes and prints debug out to STDOUT or whatever 
// has been configured in your log4j properties. 
job.waitForCompletion(true); 

यार्न के लिए, निम्न कॉन्फ़िगरेशन सेट करने की आवश्यकता है।

// this should be like defined in your yarn-site.xml 
conf.set("yarn.resourcemanager.address", "yarn-manager.com:50001"); 

//For set to 26GB 
conf.set("yarn.nodemanager.resource.memory-mb", "26624"); 


// framework is now "yarn", should be defined like this in mapred-site.xm 
conf.set("mapreduce.framework.name", "yarn"); 

// like defined in hdfs-site.xml 
conf.set("fs.default.name", "hdfs://namenode.com:9000"); 
+0

yarn.nodemanager.resource.memory-mb संपत्ति प्रोग्रामेटिक रूप से सेट नहीं की जा सकती है। – sachin

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