Datanode 遇到 JVM 暂停问题

Datanode having trouble with JVM pausing

我在 CDH 5.1.2 上,我看到这个错误,其中一个数据节点经常暂停。我从日志中看到了这个。

 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 容量有时会下降一个节点。

GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=12707ms

您的 CMS 收集器出现长时间的 GC 暂停。

要进一步调查,您应该通过 -Xloggc:<path to gc log file> -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 打开 GC 日志记录,如果您使用 java 7,还要添加 -XX:+PrintGCCause.

GCViewer 可以帮助可视化日志。

找到原因后,您可以尝试调整 CMS 以避免这些暂停。对于初学者来说,有 official CMS tuning guide.

我们刚刚遇到了一个非常相似的问题 运行 CDH 5.3.2,我们无法在我们的 Hadoop 集群上成功启动 HDFS NameNode 服务。

当时非常令人费解,因为我们没有在 /var/log/messages 和 /var/log/hadoop-hdfs/NAMENODE.log.out 中观察到任何明显的错误,除了 WARN org.apache.hadoop.util.JvmPauseMonitor:在 JVM 或主机(例如 GC)中检测到暂停

在与 Cloudera Support 合作后,我们能够确定我们 运行 进入了一个未被记录的 OOM 异常......作为一般经验法则,请查看您的配置堆大小...对于每 100 万个块,您应该至少有 1GB 的堆大小。

在我们的例子中,解决方法很简单,就是增加 Java NameNode 和辅助 NameNode 服务的堆大小并重新启动...因为我们有 150 万个块,但只使用默认的 1GB 设置对于堆大小。在增加 Java 堆大小并重新启动 HDFS 服务后,我们全面变绿了。

干杯!