Tôi đang cố gắng chạy một công việc bộ nhớ cao trên cụm Hadoop (0.20.203). Tôi đã sửa đổi tệp mapred-site.xml để thực thi một số giới hạn bộ nhớ.Chỉ định giới hạn bộ nhớ với hadoop
<property>
<name>mapred.cluster.max.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapred.cluster.max.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapred.cluster.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapred.cluster.reduce.memory.mb</name>
<value>2048</value>
</property>
Trong công việc của mình, tôi đang chỉ định lượng bộ nhớ mình cần. Thật không may, mặc dù tôi đang chạy quá trình của tôi với -Xmx2g
(công việc sẽ chạy tốt với bộ nhớ này nhiều như một ứng dụng giao diện điều khiển) Tôi cần phải yêu cầu bộ nhớ nhiều hơn cho người lập bản đồ của tôi (như là một subquestion, tại sao điều này?) Hoặc nó là bị giết.
val conf = new Configuration()
conf.set("mapred.child.java.opts", "-Xms256m -Xmx2g -XX:+UseSerialGC");
conf.set("mapred.job.map.memory.mb", "4096");
conf.set("mapred.job.reduce.memory.mb", "1024");
Bộ giảm tốc này hầu như không cần bất kỳ bộ nhớ nào vì tôi đang thực hiện trình giảm nhận dạng.
class IdentityReducer[K, V] extends Reducer[K, V, K, V] {
override def reduce(key: K,
values: java.lang.Iterable[V],
context:Reducer[K,V,K,V]#Context) {
for (v <- values) {
context write (key, v)
}
}
}
Tuy nhiên, trình giảm tốc vẫn đang sử dụng nhiều bộ nhớ. Có thể cung cấp cho các đối số JVM giảm khác so với trình ánh xạ không? Hadoop giết bộ giảm tốc và tuyên bố nó đang sử dụng bộ nhớ 3960 MB! Và các bộ giảm tốc không kết thúc công việc. Sao có thể như thế được?
TaskTree [pid=10282,tipID=attempt_201111041418_0005_r_000000_0] is running beyond memory-limits.
Current usage : 4152717312bytes.
Limit : 1073741824bytes.
Killing task.
UPDATE: ngay cả khi tôi chỉ định một công việc trực tuyến với cat
như mapper và uniq
như là sản phẩm giảm và -Xms512M -Xmx1g -XX:+UseSerialGC
nhiệm vụ của tôi mất hơn 2g bộ nhớ ảo! Điều này có vẻ lộng lẫy ở 4x kích thước heap tối đa.
TaskTree [pid=3101,tipID=attempt_201111041418_0112_m_000000_0] is running beyond memory-limits.
Current usage : 2186784768bytes.
Limit : 2147483648bytes.
Killing task.
Cập nhật: các original JIRA cho việc thay đổi định dạng cấu hình để sử dụng bộ nhớ đặc biệt đề cập đến việc sử dụng Java là chủ yếu quan tâm đến bộ nhớ vật lý để ngăn chặn trận đòn. Tôi nghĩ rằng đây là chính xác những gì tôi muốn: Tôi không muốn một nút để quay lên một người lập bản đồ nếu có bộ nhớ vật lý không đầy đủ có sẵn. Tuy nhiên, tất cả các tùy chọn này dường như đã được thực hiện như những ràng buộc bộ nhớ ảo, rất khó quản lý.
Chỉ cần tò mò - sự khác biệt giữa việc thiết lập bộ nhớ tối đa bằng cách sử dụng mapred.child.java.opts/-Xmx và mapred.job.map.memory.mb/mapred.job.reduce.memory.mb là gì? Tôi đã đưa ra một truy vấn trong SO (http://goo.gl/aIBLr), nhưng không có phản hồi. –