Kontener działa poza limitami pamięci
W Hadoop v1 przypisałem każdemu 7 maperowi i reduktorowi rozmiar 1 GB, moje mapery i reduktory działają dobrze. Moja maszyna ma pamięć 8G, 8 procesorów. Teraz z YARN, po uruchomieniu tej samej aplikacji na tym samym komputerze, mam błąd kontenera. Domyślnie mam te ustawienia:
<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>
To dało mi błąd:
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.
Następnie próbowałem ustawić limit pamięci w mapred-site.xml:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Ale wciąż pojawia się błąd:
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.
Jestem zdezorientowany, dlaczego zadanie mapy wymaga tak dużo pamięci. W moim rozumieniu 1 GB pamięci wystarcza na moje zadanie map / zmniejszenia. Dlaczego, ponieważ przypisuję więcej pamięci do kontenera, zadanie wykorzystuje więcej? Czy to dlatego, że każde zadanie ma więcej podziałów? Wydaje mi się, że bardziej efektywne jest zmniejszenie rozmiaru kontenera i stworzenie większej liczby kontenerów, aby więcej zadań działało równolegle. Problem polega na tym, jak mogę się upewnić, że do każdego kontenera nie zostanie przypisanych więcej podziałów niż może obsłużyć?