"Превышен лимит накладных расходов 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 анализирует его