我已经搜查,没有找到相关的Hadoop的Datanode过程垂死由于GC开销超过限制多的信息,所以我想我会发布一个问题。
我们正在运行一个测试,我们需要确认我们的Hadoop集群可以处理有〜存储在其上(目前是4节点群集)300万文件。 我们使用的是64位JVM,因此我们投入8克的名称节点。 然而,正如我的测试程序写入多个文件到DFS时,数据节点开始死亡了与此错误:在线程异常“数据节点:在/ var / Hadoop的/数据/ Hadoop的/数据]” java.lang.OutOfMemoryError:GC开销超过限制
我看到的一些选项的一些职位(平行GC?)我想可以在hadoop-env.sh设置,但我也不太清楚的语法和我是那种新手的,所以我也不太神交它是如何做。 感谢这里的任何帮助!
尝试通过使用此来增加数据节点的内存:(这个工作需要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”和Apache的Hadoop的YARN“mapred.map.child.java.opts”之间的关系? )。
这后解决了这个问题对我来说。
因此,关键是要“ 前置一个环境变量 ”(见过这个linux命令语法:)第1次)
HADOOP_CLIENT_OPTS="-Xmx10g" hadoop jar "your.jar" "source.dir" "target.dir"
GC开销限制表明您(微小)堆已满。
这是经常发生的事情中的MapReduce作业当u处理大量的数据。 试试这个:
< property >
< name > mapred.child.java.opts < /name >
< value > -Xmx1024m -XX:-UseGCOverheadLimit < /value >
< /property >
此外,尝试这些下面的事情:
使用合成器,减速机不应超过贴图数量小倍数得到任何名单更长
同时,你可以从OOME产生堆转储与YourKit等ADN分析它分析