ใน Hadoop v1 ฉันได้กำหนดตัวทำแผนที่และช่องตัวลดจำนวน 7 ช่องที่มีขนาด 1GB ตัวทำแผนที่และตัวลดขนาดของฉันทำงานได้ดี เครื่องของฉันมีหน่วยความจำ 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 เพียงพอสำหรับงานแผนที่ / ลดขนาดของฉัน เหตุใดเมื่อฉันกำหนดหน่วยความจำให้กับคอนเทนเนอร์มากขึ้นงานจึงใช้มากขึ้น เป็นเพราะแต่ละงานแยกกันมากขึ้นหรือเปล่า? ฉันรู้สึกว่ามันมีประสิทธิภาพมากขึ้นในการลดขนาดของคอนเทนเนอร์ลงเล็กน้อยและสร้างคอนเทนเนอร์เพิ่มขึ้นเพื่อให้งานต่างๆทำงานควบคู่กันไปมากขึ้น ปัญหาคือฉันจะแน่ใจได้อย่างไรว่าแต่ละคอนเทนเนอร์จะไม่ถูกกำหนดให้มีการแยกมากกว่าที่จะจัดการได้