我使用的是cdh5.1.2,我看到了一个datanode经常暂停的错误。我从日志上看到的。
WARN org.apache.hadoop.util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 12428ms
GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=12707ms
你知道我为什么看到这个吗?hdfs容量偶尔会下降一个节点。
2条答案
按热度按时间332nm8kg1#
gc池“concurrentmarksweep”有个集合:计数=1时间=12707ms
cms收集器的gc暂停时间过长。
要进一步调查,您应该通过打开gc日志记录
-Xloggc:<path to gc log file> -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
如果您使用的是Java7,还可以添加-XX:+PrintGCCause
.gcviewer可以帮助可视化日志。
一旦你找到了原因,你可以尝试调整cms以避免这些暂停。对于初学者,有官方的cms调优指南。
csga3l582#
我们在运行cdh5.3.2时遇到了一个非常类似的问题,我们无法在hadoop集群上成功启动hdfsnamenode服务。
当时这非常令人费解,因为我们在/var/log/messages和/var/log/hadoop hdfs/namenode.log.out中没有观察到任何明显的错误,而不是warn org.apache.hadoop.util.jvmpausemonitor:在jvm或主机(例如gc)中检测到暂停
在与cloudera支持部门合作后,我们能够确定遇到了一个未被记录的oom异常。。。一般的经验法则是看一下堆大小的配置。。。对于每一百万个块,应该至少有1gb的堆大小。
在我们的例子中,解决方法非常简单,只需增加namenode和secondary namenode服务的java堆大小,然后重新启动。。。因为我们有150万块,但堆大小只使用默认的1gb设置。在增加java堆大小并重新启动hdfs服务之后,我们的总体情况是绿色的。
干杯!