“GC开销超过限制”在Hadoop 0.20的DataNode(“GC Overhead limit

2019-06-23 13:25发布

我已经搜查,没有找到相关的Hadoop的Datanode过程垂死由于GC开销超过限制多的信息,所以我想我会发布一个问题。

我们正在运行一个测试,我们需要确认我们的Hadoop集群可以处理有〜存储在其上(目前是4节点群集)300万文件。 我们使用的是64位JVM,因此我们投入8克的名称节点。 然而,正如我的测试程序写入多个文件到DFS时,数据节点开始死亡了与此错误:在线程异常“数据节点:在/ var / Hadoop的/数据/ Hadoop的/数据]” java.lang.OutOfMemoryError:GC开销超过限制

我看到的一些选项的一些职位(平行GC?)我想可以在hadoop-env.sh设置,但我也不太清楚的语法和我是那种新手的,所以我也不太神交它是如何做。 感谢这里的任何帮助!

Answer 1:

尝试通过使用此来增加数据节点的内存:(这个工作需要Hadoop的重新启动)

export HADOOP_DATANODE_OPTS="-Xmx10g"

这将设置堆到10GB ......你可以增加根据自己的需要。

您也可以在开始粘贴此$HADOOP_CONF_DIR/hadoop-env.sh文件。



Answer 2:

如果正在运行的地图减少来自命令行作业时,可以使用参数增加堆-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.optsmapred.map.child.java.optsmapred.reduce.child.java.opts 。 这些参数不Hadoop的2(见工作了什么是“mapreduce.map.memory.mb”和Apache的Hadoop的YARN“mapred.map.child.java.opts”之间的关系? )。



Answer 3:

这后解决了这个问题对我来说。

因此,关键是要“ 前置一个环境变量 ”(见过这个linux命令语法:)第1次)

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


Answer 4:

GC开销限制表明您(微小)堆已满。

这是经常发生的事情中的MapReduce作业当u处理大量的数据。 试试这个:

< property >

  < name > mapred.child.java.opts < /name >

   < value > -Xmx1024m -XX:-UseGCOverheadLimit < /value >

< /property >

此外,尝试这些下面的事情:

使用合成器,减速机不应超过贴图数量小倍数得到任何名单更长

同时,你可以从OOME产生堆转储与YourKit等ADN分析它分析



文章来源: “GC Overhead limit exceeded” on Hadoop .20 datanode