Trong Hadoop v1, tôi đã chỉ định mỗi 7 khe cắm bản đồ và trình thu gọn với kích thước 1GB, trình liên kết và trình giảm tốc của tôi chạy tốt. Máy mình có bộ nhớ 8G, vi xử lý 8 nhân. Bây giờ với YARN, khi chạy cùng một ứng dụng trên cùng một máy, tôi đã gặp lỗi vùng chứa. Theo mặc định, tôi có cài đặt này:
<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>
Nó đã cho tôi lỗi:
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.
Sau đó, tôi đã cố gắng đặt giới hạn bộ nhớ trong 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>
Nhưng vẫn gặp lỗi:
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.
Tôi bối rối tại sao tác vụ bản đồ lại cần nhiều bộ nhớ như vậy. Theo hiểu biết của tôi, 1GB bộ nhớ là đủ cho tác vụ bản đồ / thu nhỏ của tôi. Tại sao khi tôi gán nhiều bộ nhớ hơn cho vùng chứa, tác vụ sử dụng nhiều hơn? Có phải vì mỗi nhiệm vụ được phân chia nhiều hơn? Tôi cảm thấy sẽ hiệu quả hơn khi giảm kích thước của vùng chứa một chút và tạo nhiều vùng chứa hơn để nhiều tác vụ chạy song song hơn. Vấn đề là làm thế nào tôi có thể đảm bảo rằng mỗi vùng chứa sẽ không được chỉ định nhiều phân chia hơn mức nó có thể xử lý?