在Hadoop .20 datanode上"超出了GC开销限制"

hat*_*ick 8 garbage-collection hadoop

我搜索过并没有找到与Hadoop Datanode进程相关的很多信息,因为超出GC开销限制而死亡,所以我想我会发一个问题.

我们正在运行一个测试,我们需要确认我们的Hadoop集群可以处理其上存储了大约300万个文件(目前是一个4节点集群).我们使用的是64位JVM,我们已经为namenode分配了8g.但是,当我的测试程序将更多文件写入DFS时,数据节点开始因此错误而消失:线程中的异常"DataNode:[/ var/hadoop/data/hadoop/data]"java.lang.OutOfMemoryError:超出GC开销限制

我看到一些关于某些选项的帖子(并行GC?)我猜这可以在hadoop-env.sh中设置但是我不太确定语法而且我是一个新手,所以我不太喜欢怎么做的.感谢您的帮助!

Tej*_*til 8

尝试使用以下方法增加datanode的内存:(需要hadoop restart才能工作)

export HADOOP_DATANODE_OPTS="-Xmx10g"
Run Code Online (Sandbox Code Playgroud)

这会将堆设置为10gb ...您可以根据需要增加.

您也可以将其粘贴到$HADOOP_CONF_DIR/hadoop-env.sh文件的开头.

  • 这基本上解决了这个问题,但我也了解到,当您在一个小型集群上存储大量文件时,DataNode的使用率会快速攀升,因为复制可能会有限.如果我们添加节点,那么数据节点内存不应该快速爬升(所以我听到!). (2认同)
  • @hatrickpatrick HDFS使用64 MB块进行文件存储...如果文件很小,那么就会浪费大量内存,甚至namenode也必须跟踪这些内存.拥有很少但很大的文件比拥有许多小文件更好. (2认同)