Hadoop v1 में, मैंने प्रत्येक 7 mapper और reducer स्लॉट को 1GB के आकार के साथ असाइन किया है, मेरे mappers और reducers ठीक चलते हैं। मेरी मशीन में 8 जी मेमोरी, 8 प्रोसेसर है। अब YARN के साथ, एक ही मशीन पर एक ही एप्लिकेशन चलाने पर, मुझे कंटेनर की त्रुटि मिली। डिफ़ॉल्ट रूप से, मेरे पास यह सेटिंग है:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
इसने मुझे त्रुटि दी:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
मैंने तब मेप्रेड-site.xml में मेमोरी लिमिट सेट करने की कोशिश की:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
लेकिन अभी भी त्रुटि हो रही है:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.
मैं उलझन में हूं कि मैप टास्क को इस मेमोरी की आवश्यकता क्यों है। मेरी समझ में, 1GB मेमोरी मेरे नक्शे / कार्य को कम करने के लिए पर्याप्त है। क्यों मैं कंटेनर को अधिक मेमोरी असाइन करता हूं, कार्य अधिक उपयोग करता है? क्या इसलिए कि प्रत्येक कार्य में अधिक विभाजन हो जाता है? मुझे लगता है कि कंटेनर के आकार को थोड़ा कम करना और अधिक कंटेनर बनाना अधिक कुशल है, ताकि अधिक कार्य समानांतर में चल रहे हों। समस्या यह है कि मैं यह कैसे सुनिश्चित कर सकता हूं कि प्रत्येक कंटेनर को अधिक से अधिक विभाजन नहीं सौंपे जा सकते हैं?