Hadoop java.lang.OutOfMemoryError: превышен верхний предел GC [дубликат]

Я думаю, что ваши гипотезы верны. Эксперимент с id (идентификация объекта):

In [1]: id(255)
Out[1]: 146349024

In [2]: id(255)
Out[2]: 146349024

In [3]: id(257)
Out[3]: 146802752

In [4]: id(257)
Out[4]: 148993740

In [5]: a=255

In [6]: b=255

In [7]: c=257

In [8]: d=257

In [9]: id(a), id(b), id(c), id(d)
Out[9]: (146349024, 146349024, 146783024, 146804020)

Похоже, что числа <= 255 рассматриваются как литералы, а что-то выше, обрабатывается по-разному!

7
задан hatrickpatrick 11 April 2012 в 16:56
поделиться

4 ответа

Попытайтесь увеличить память для datanode, используя это: (требуется перезагрузка hadoop для этого, чтобы это работало)

export HADOOP_DATANODE_OPTS="-Xmx10g"

Это установит кучу в 10gb ... вы можете увеличить в соответствии с вашими потребностями .

Вы также можете вставить это в начале в файл $HADOOP_CONF_DIR/hadoop-env.sh.

7
ответ дан Tejas Patil 19 August 2018 в 13:21
поделиться
  • 1
    Это в основном решило его, но я также узнал, что при хранении большого количества файлов на небольшом кластере использование DataNode быстро растет, потому что существует ограниченная локализация репликации. Если мы добавляем узлы, то память узла данных не должна подниматься так быстро (так что я слышу!). – hatrickpatrick 12 June 2012 в 21:48
  • 2
    @hatrickpatrick HDFS использует блоки 64 МБ для хранения файлов ... если файлы маленькие, тогда большая часть памяти будет потрачена впустую, и даже namenode придется отслеживать их. Наличие нескольких, но массивных файлов лучше, чем наличие большого количества небольших файлов. – Tejas Patil 16 June 2012 в 09:05

Если вы выполняете работу по сокращению карты из командной строки, вы можете увеличить кучу, используя параметр -D 'mapreduce.map.java.opts=-Xmx1024m' и / или -D 'mapreduce.reduce.java.opts = -Xmx1024m'. Пример:

hadoop --config /etc/hadoop/conf jar /usr/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf /etc/hbase/conf/hbase-site.xml -D 'mapreduce.map.java.opts=-Xmx1024m' --hbase-indexer-file $HOME/morphline-hbase-mapper.xml --zk-host 127.0.0.1/solr --collection hbase-collection1 --go-live --log4j /home/cloudera/morphlines/log4j.properties

Обратите внимание, что в некоторых документах Cloudera они все еще используют старые параметры mapred.child.java.opts, mapred.map.child.java.opts и mapred.reduce.child.java.opts. Эти параметры больше не работают для Hadoop 2 (см. . Какова связь между «mapreduce.map.memory.mb» и «mapred.map.child.java.opts» в Apache Hadoop YARN? ). [/ д2]

0
ответ дан Community 19 August 2018 в 13:21
поделиться

Эта проблема решена для меня. Превышение Hadoop «верхний предел GC превышен»

Таким образом, ключ должен быть «Подготовить эту переменную среды» (в первый раз видел этот синтаксис командной строки Linux :))

HADOOP_CLIENT_OPTS = "- Xmx10g" hasoop jar "your.jar" "source.dir" "target.dir"

0
ответ дан Khalid Mammadov 19 August 2018 в 13:21
поделиться

Верхний предел GC указывает, что ваша (крошечная) куча заполнена.

Это то, что часто происходит в операциях MapReduce, когда вы обрабатываете большое количество данных. Попробуйте следующее:

& lt; свойство>

& lt; name> mapred.child.java.opts & lt; / name>

& lt; значение> -Xmx1024m -XX: -UseGCOverheadLimit & lt; / value>

& lt; / property>

Кроме того, попробуйте следующие вещи:

Используйте комбинаторы, редукторы не должны получать списки длиннее, чем малые кратные числа карт

В то же время вы можете генерировать кучу дампа из OOME и анализировать с помощью YourKit, и т. д. анализировать его

-3
ответ дан shiva kumar s 19 August 2018 в 13:21
поделиться
  • 1
    Это просто неправильно. – Thomas Jungblut 13 April 2012 в 09:50
  • 2
    @ThomasJungblut +1. mapred.child.java.opts можно использовать контрольную кучу для заданий hasoop, а не для datanode. – Tejas Patil 13 April 2012 в 10:16
  • 3
    хорошо, я не проверял его. Но на самом деле его проблема состоит из двух типов: (1) Ограничение памяти узлов данных (2) Между сортировкой шагов и т. д. Итак, моя точка зрения заключается в том, что мы не можем вслепую увеличить размер кучи узлов данных t0 10 ГБ, 20 ГБ, если мы сможем настроить параметры (как указано выше) и использовать комбинаторы, я думаю, что решение будет хорошим. – shiva kumar s 13 April 2012 в 19:58
Другие вопросы по тегам:

Похожие вопросы: