"Превышен лимит накладных расходов GC" на Hadoop.20 узла DataNode

Я искал и не нашел много информации, связанной с процессами Hadoop Datanode, умирающими из-за превышения предела накладных расходов GC, поэтому я подумал, что задам вопрос.

мы запускаем тест, в котором нам нужно подтвердить, что наш кластер Hadoop может обрабатывать файлы ~3million, хранящиеся на нем (в настоящее время кластер 4 узла). Мы используем 64-битную JVM, и мы выделили 8g для namenode. Однако, поскольку моя тестовая программа записывает больше файлов в DFS, datanodes начинают вымирать с этим ошибка: Исключение в потоке " DataNode: [/var/hadoop/data/hadoop / data]" java.ленг.OutOfMemoryError: превышен предел накладных расходов ГК

Я видел несколько сообщений о некоторых вариантах (параллельный GC?) Я думаю, что можно установить в hadoop-env.sh но я не слишком уверен в синтаксисе, и я вроде как новичок, поэтому я не совсем понял, как это делается. Спасибо за любую помощь!

4 ответов


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

export HADOOP_DATANODE_OPTS="-Xmx10g"

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

вы также можете вставить это в начало .


если вы выполняете задание map reduce из командной строки, вы можете увеличить кучу, используя параметр -D 'mapreduce.map.java.opts=-Xmx1024m' и / или-D 'mapreduce.уменьшить.Ява.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.карта.память.mb ' и ' mapred.карта.ребенок.Ява.opts в Apache Hadoop Пряжа?).


эта проблема решена для меня. потоковая передача Hadoop "превышен предел накладных расходов GC"

Итак, ключ должен "добавить эту переменную среды" (1-й раз видел этот синтаксис команды linux :))

HADOOP_CLIENT_OPTS=" - Xmx10g "Hadoop jar" ваш.фляга" "источник.реж. "" цель.реж.--3-->


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

Это то, что часто происходит в операциях MapReduce, когда u обрабатывает много данных. Попробуйте это:

mapred.ребенок.Ява.opts

- Xmx1024m-XX: - UseGCOverheadLimit

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

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

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