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ć?

questionAnswers(6)

yourAnswerToTheQuestion