Q1、NameNode报: java.lang.OutOfMemoryError: GC overhead limit exceeded
原因:经查看hadoop 堆内存只有4G,而文件+块数有2千万个,每个占用150B,需要3G左右内存,另外namenode还需要负责与DATANODE通信等等,故导致OOM
解决办法:
调整conf/hadoop-env.sh中的堆内存大小:
export HADOOP_HEAPSIZE=6000
export HADOOP_NAMENODE_INIT_HEAPSIZE=6000
然后重启hadoop namenode :
/home/hadoop/hadoop-2.2.0/sbin/hadoop-daemon.sh start namenode
另外需尽量合并小文件、删除不需要的数据,减少 文件数和块数。
Q2:yarn启用日志汇聚问题
当自定义container日志存放目录(yarn.nodemanager.remote-app-log-dir参数指定),提示以下信息:
Logs not available for attempt_1506090137795_0001_m_000000_0. Aggregation may not be complete, Check back later or try the nodemanager at slave2:10929
<!--开启日志汇聚--><property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>864000</value>
</property>
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>-1</value>
</property>
<!--
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/hadoop-yarn/staging/contains</value>
<description>default dir /tmp/logs 目前发现必须使用默认目录,自定义目录无法汇聚</description>
</property>
-->
采取默认目录/tmp/logs后正常,尚未发现具体原因。
另外必须重启所有hdfs+yarn服务后生效,通过yarn rmadmin -refreshNodes来刷新配置并无作用