Hadoop v1'de, her 7 eşleyici ve düşürücü yuvasını 1 GB boyutunda atadım, eşleyicilerim ve indirgeyicilerim sorunsuz çalışıyor. Makinemde 8G bellek, 8 işlemci var. Şimdi YARN ile aynı uygulamayı aynı makinede çalıştırdığımda konteyner hatası alıyorum. Varsayılan olarak şu ayarlara sahibim:
<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>
Bana hata verdi:
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.
Daha sonra mapred-site.xml'de bellek sınırı ayarlamaya çalıştım:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Ama yine de hata alıyorum:
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.
Harita görevinin neden bu kadar belleğe ihtiyacı olduğunu kafam karıştı. Anladığım kadarıyla haritam / azaltma görevim için 1GB hafıza yeterli. Neden konteynere daha fazla bellek atadıkça görev daha çok kullanıyor? Her görevin daha fazla bölünmesi mi? Kabın boyutunu biraz küçültmenin ve daha fazla kap oluşturmanın daha verimli olduğunu düşünüyorum, böylece daha fazla görev paralel olarak çalışıyor. Sorun şu ki, her bir konteynere başa çıkabileceğinden daha fazla bölme atanmayacağından nasıl emin olabilirim?