2013-03-25 21 views
16

Trong Ubuntu, khi tôi chạy ví dụ hadoop:Lỗi: Java không gian đống

$bin/hadoop jar hadoop-examples-1.0.4.jar grep input output 'dfs[a-z.]+' 

$echo $HADOOP_HEAPSIZE 
2000 

Trong nhật ký, tôi nhận được lỗi như:

INFO mapred.JobClient: Task Id : attempt_201303251213_0012_m_000000_2, Status : FAILED Error: Java heap space 13/03/25 15:03:43 INFO mapred.JobClient: Task Id :attempt_201303251213_0012_m_000001_2, Status : FAILED Error: Java heap space13/03/25 15:04:28 INFO mapred.JobClient: Job Failed: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201303251213_0012_m_000000 java.io.IOException: Job failed! at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1265) at org.apache.hadoop.examples.Grep.run(Grep.java:69) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.examples.Grep.main(Grep.java:93)

Cho chúng tôi biết vấn đề là gì .

Trả lời

42

Rõ ràng bạn đã hết kích thước heap được phân bổ cho Java. Vì vậy, bạn sẽ cố gắng để tăng điều đó.

Cho rằng bạn có thể thực hiện như sau trước khi thực hiện hadoop lệnh:

export HADOOP_OPTS="-Xmx4096m" 

Ngoài ra, bạn có thể đạt được điều tương tự bằng cách thêm các thiết lập vĩnh viễn sau đây trong tập tin mapred-site.xml của bạn, tập tin này nằm trong HADOOP_HOME/conf/:

<property> 
    <name>mapred.child.java.opts</name> 
    <value>-Xmx4096m</value> 
</property> 

Điều này sẽ đặt không gian heap java của bạn thành 4096 MB (4GB), thậm chí bạn có thể thử nó với giá trị thấp hơn trước nếu hoạt động. Nếu điều đó cũng không hiệu quả thì hãy tăng thêm nếu máy của bạn hỗ trợ nó, nếu không thì chuyển sang máy có nhiều bộ nhớ hơn và thử ở đó. Vì không gian heap đơn giản nghĩa là bạn không có đủ RAM cho Java.

CẬP NHẬT: Đối với Hadoop 2+, hãy thực hiện thay đổi trong mapreduce.map.java.opts thay thế.

+1

cảm ơn rất nhiều, điều này đã tiết kiệm được một ngày cho tôi. Rõ ràng điều này nên đã được đánh dấu là câu trả lời cho câu hỏi! –

+1

Có lẽ nó sẽ là một ý tưởng tốt để đặt cuối cùng thành true trong mapred-site.xml cho cài đặt này (vì nếu không nó có thể bị ghi đè bởi cấu hình trong hadoop-env.sh, có nên xảy ra là một) không? – sufinawaz

+0

Chỉ cần cập nhật, đối với hadoop 2+, thay vào đó hãy thay đổi mapreduce.map.java.opts. – Shiyu

6
<property> 
    <name>mapred.child.java.opts</name> 
    <value>-Xmx4096m</value> 
</property> 

Làm việc cho tôi.

export HADOOP_OPTS="-Xmx4096m"

không hoạt động

+0

lệnh xuất sẽ chỉ trong khoảng thời gian của trình bao đó. –

1

Sử dụng Hadoop 2.5.0-cdh5.2.0, điều này đã làm việc cho tôi để thay đổi kích thước heap của địa phương (tuần tự) quá trình java:

export HADOOP_HEAPSIZE=2900 
hadoop jar analytics.jar ..... 

Lý do hoạt động là /usr/lib/hadoop/libexec/hadoop-config.sh có

# check envvars which might override default args 
if [ "$HADOOP_HEAPSIZE" != "" ]; then 
    #echo "run with heapsize $HADOOP_HEAPSIZE" 
    JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m" 
    #echo $JAVA_HEAP_MAX 
fi 
0

Nếu bạn thêm thuộc tính trên mapred-site.xml

<property> 
    <name>mapred.child.java.opts</name> 
    <value>-Xmx2048m</value> 
</property> 

Đôi khi nó xảy ra một vì nó nhiều hơn giới hạn bộ nhớ ảo Trong tình huống này, bạn phải thêm

<property> 
     <name>yarn.nodemanager.vmem-pmem-ratio</name> 
     <value>4.2</value> 
</property> 

trên sợi-site.xml

vì 2.1G mặc định của nó đôi khi quá nhỏ.

Các vấn đề liên quan