2013-03-25 13 views
16

W Ubuntu, gdy używam Hadoop przykład:Błąd: przestrzeń sterty Java

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

$echo $HADOOP_HEAPSIZE 
2000 

W dzienniku, otrzymuję błąd jako:

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)

Daj nam znać, co jest problemem .

Odpowiedz

42

Najwyraźniej skończył się rozmiar sterty przydzielony do Java. Więc spróbujesz to zwiększyć.

Do tego można wykonać następujące czynności przed wykonaniem hadoop polecenie:

export HADOOP_OPTS="-Xmx4096m" 

Alternatywnie, można osiągnąć to samo, dodając następujące stałe ustawienie w pliku mapred-site.xml, plik ten znajduje się w HADOOP_HOME/conf/:

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

Ustawiłoby to przestrzeń na java na 4096 MB (4 GB), możesz nawet wypróbować ją z mniejszą wartością, jeśli to zadziała. Jeśli to też nie zadziała, zwiększ ją bardziej, jeśli Twój komputer ją obsługuje, a jeśli nie, przenieś się do maszyny mającej więcej pamięci i spróbuj tam. Jako przestrzeń sterty po prostu oznacza, że ​​nie masz wystarczającej ilości pamięci RAM dostępnej dla Javy.

UPDATE: Dla Hadoop 2+, dokonać zmian w mapreduce.map.java.opts zamiast.

+1

wielkie dzięki, to uratowało mi dzień. Najwyraźniej powinno to być oznaczone jako odpowiedź na pytanie! –

+1

Być może dobrym pomysłem byłoby ustawienie finału na true w pliku mapred-site.xml również dla tego ustawienia (ponieważ w przeciwnym razie może on zostać nadpisany przez konfigurację w hadoop-env.sh, jeśli tak się stanie)? – sufinawaz

+0

Po prostu aktualizacja, dla hadoop 2+, zamiast tego zmień mapreduce.map.java.opts. – Shiyu

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

Działa dla mnie.

export HADOOP_OPTS="-Xmx4096m"

nie działa

+0

polecenie eksportu będzie obowiązywać tylko przez czas trwania tej powłoki. –

1

Korzystanie Hadoop 2.5.0-cdh5.2.0 ten pracował dla mnie, aby zmienić rozmiar sterty lokalnego (sekwencyjny) proces Java:

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

powodem jest to, że pracował /usr/lib/hadoop/libexec/hadoop-config.sh ma

# 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

Jeśli dodać obiekt na mapred-site.xml

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

Czasami zdarza się kolejna ponieważ ponad limit pamięci wirtualnej w tej sytuacji, należy dodać

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

na przędzy site.xml

ponieważ jego domyślną 2,1 g czasami za małe.

Powiązane problemy