Недостаточно памяти в Hadoop - PullRequest
       0

Недостаточно памяти в Hadoop

58 голосов
/ 11 декабря 2011

Я попытался установить Hadoop после этого http://hadoop.apache.org/common/docs/stable/single_node_setup.html документа. Когда я попытался выполнить это

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

Я получаю следующее исключение

java.lang.OutOfMemoryError: Java heap space

Пожалуйста, предложите решение, чтобы я мог попробовать пример. Полное исключение указано ниже. Я новичок в Hadoop, возможно, я сделал что-то глупое. Любое предложение будет высоко оценено.

anuj@anuj-VPCEA13EN:~/hadoop$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
11/12/11 17:38:22 INFO util.NativeCodeLoader: Loaded the native-hadoop library
11/12/11 17:38:22 INFO mapred.FileInputFormat: Total input paths to process : 7
11/12/11 17:38:22 INFO mapred.JobClient: Running job: job_local_0001
11/12/11 17:38:22 INFO util.ProcessTree: setsid exited with exit code 0
11/12/11 17:38:22 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@e49dcd
11/12/11 17:38:22 INFO mapred.MapTask: numReduceTasks: 1
11/12/11 17:38:22 INFO mapred.MapTask: io.sort.mb = 100
11/12/11 17:38:22 WARN mapred.LocalJobRunner: job_local_0001
java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:428)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
11/12/11 17:38:23 INFO mapred.JobClient:  map 0% reduce 0%
11/12/11 17:38:23 INFO mapred.JobClient: Job complete: job_local_0001
11/12/11 17:38:23 INFO mapred.JobClient: Counters: 0
11/12/11 17:38:23 INFO mapred.JobClient: Job Failed: NA
java.io.IOException: Job failed!
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1257)
    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)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
    at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
    at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

Ответы [ 14 ]

78 голосов
/ 16 марта 2012

Для тех, кто использует пакеты RPM или DEB, документация и общие советы вводят в заблуждение.Эти пакеты устанавливают файлы конфигурации hadoop в / etc / hadoop.Они будут иметь приоритет над другими настройками.

/etc/hadoop/hadoop-env.sh устанавливает максимальную память кучи Java для Hadoop, по умолчанию она равна:

export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"

Это значение Xmx слишком низкое, просто измените его на и запустите снова

export HADOOP_CLIENT_OPTS="-<b>Xmx2048m</b> $HADOOP_CLIENT_OPTS"
39 голосов
/ 11 декабря 2011

Вы можете выделить больше памяти, отредактировав файл conf / mapred-site.xml и добавив свойство:

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

Это запустит JVM hadoop с большим пространством кучи.

12 голосов
/ 30 января 2012

Другая возможность - редактирование hadoop-env.sh, которое содержит export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS".В моем случае помогло изменение 128м на 1024м (Hadoop 1.0.0.1 в Debian).

6 голосов
/ 16 ноября 2012

Попробовав столько комбинаций, я наконец-то пришел к выводу, что та же ошибка в моей среде (Ubuntu 12.04, Hadoop 1.0.4) вызвана двумя проблемами.

  1. То же, что и Зак Зак, упомянутый выше.
  2. не забудьте сначала выполнить "ssh localhost". Верьте или нет! Ни один ssh не выдаст сообщение об ошибке в пространстве кучи Java.
5 голосов
/ 06 мая 2016

Вам необходимо внести изменения в mapreduce.{map|reduce}.java.opts, а также в mapreduce.{map|reduce}.memory.mb.

Например:

  hadoop jar <jarName> <fqcn> \
      -Dmapreduce.map.memory.mb=4096 \
      -Dmapreduce.map.java.opts=-Xmx3686m

здесь - хороший ресурс с ответом наэтот вопрос

4 голосов
/ 18 февраля 2012

Вы можете решить эту проблему, отредактировав файл /etc/hadoop/hadoop-env.sh.

Hadoop предоставлял каталог конфигурации / etc / hadoop приоритет над каталогом conf.

Я тоже встречался с такой же ситуацией.

2 голосов
/ 28 мая 2013

Мы столкнулись с такой же ситуацией.

Модификация hadoop-env.sh сработала для меня.

EXPORT HADOOP_HEAPSIZE будет прокомментировано, раскомментируйте и укажите размер по вашему выбору.

По умолчанию HEAPSIZE назначено 1000 МБ.

2 голосов
/ 11 января 2013

То же исключение с Ubuntu, Hadoop 1.1.1.Решение было простым - отредактировать переменную оболочки $ HADOOP_CLIENT_OPTS, установленную некоторым скриптом инициализации.Но потребовалось много времени, чтобы найти его = (

2 голосов
/ 06 ноября 2012

Я установил hadoop 1.0.4 из бинарного tar и имел проблему с нехваткой памяти. Я испробовал решения Тудора, Зака ​​Гарнера, Нишанта Нагвани и Андриса Биркманиса, но ни один из них не помог мне.

Редактирование bin / hadoop для игнорирования $ HADOOP_CLIENT_OPTS помогло мне:

...
elif [ "$COMMAND" = "jar" ] ; then
     CLASS=org.apache.hadoop.util.RunJar
    #Line changed this line to avoid out of memory error:
    #HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
    # changed to:
     HADOOP_OPTS="$HADOOP_OPTS "
...

Я предполагаю, что есть лучший способ сделать это, но я не смог его найти.

2 голосов
/ 12 декабря 2011

Выполните свою работу, как показано ниже:

bin/hadoop jar hadoop-examples-*.jar grep -D mapred.child.java.opts=-Xmx1024M input output 'dfs[a-z.]+' 

Пространство кучи по умолчанию установлено в 32 МБ или 64 МБ. Вы можете увеличить пространство кучи в файле свойств, как указал Тудор, или вы можете изменить его для этого конкретного задания, установив это свойство для этого конкретного задания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...