Я думаю, что ваши гипотезы верны. Эксперимент с 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
рассматриваются как литералы, а что-то выше, обрабатывается по-разному!
Попытайтесь увеличить память для datanode, используя это: (требуется перезагрузка hadoop для этого, чтобы это работало)
export HADOOP_DATANODE_OPTS="-Xmx10g"
Это установит кучу в 10gb ... вы можете увеличить в соответствии с вашими потребностями .
Вы также можете вставить это в начале в файл $HADOOP_CONF_DIR/hadoop-env.sh
.
Если вы выполняете работу по сокращению карты из командной строки, вы можете увеличить кучу, используя параметр -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]
Эта проблема решена для меня. Превышение Hadoop «верхний предел GC превышен»
Таким образом, ключ должен быть «Подготовить эту переменную среды» (в первый раз видел этот синтаксис командной строки Linux :))
HADOOP_CLIENT_OPTS = "- Xmx10g" hasoop jar "your.jar" "source.dir" "target.dir"
Верхний предел GC указывает, что ваша (крошечная) куча заполнена.
Это то, что часто происходит в операциях MapReduce, когда вы обрабатываете большое количество данных. Попробуйте следующее:
& lt; свойство>
& lt; name> mapred.child.java.opts & lt; / name>
& lt; значение> -Xmx1024m -XX: -UseGCOverheadLimit & lt; / value>
& lt; / property>
Кроме того, попробуйте следующие вещи:
Используйте комбинаторы, редукторы не должны получать списки длиннее, чем малые кратные числа карт
В то же время вы можете генерировать кучу дампа из OOME и анализировать с помощью YourKit, и т. д. анализировать его