Hadoop v1에서는 크기가 1GB 인 7 개의 매퍼와 감속기 슬롯을 각각 할당했으며 매퍼 및 감속기가 정상적으로 실행됩니다. 내 컴퓨터에는 8G 메모리, 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.
그런 다음 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>
하지만 여전히 오류가 발생합니다.
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의 메모리는 내지도 / 축소 작업에 충분합니다. 컨테이너에 더 많은 메모리를 할당하면 작업이 더 많이 사용하는 이유는 무엇입니까? 각 작업이 더 많은 분할을 받기 때문입니까? 더 많은 작업이 병렬로 실행되도록 컨테이너 크기를 조금 줄이고 더 많은 컨테이너를 만드는 것이 더 효율적이라고 생각합니다. 문제는 각 컨테이너에 처리 할 수있는 것보다 더 많은 분할이 할당되지 않도록하려면 어떻게해야합니까?