Hadoop HA --- 网络原因/NN Full GC造成集群故障

Hadoop HA — 网络原因/NN Full GC造成集群故障

1 问题描述

简单描述一下问题,集群为Hadoop HDFS HA模式,三个节点104、105、106,由于三个节点的时间不同,以105时间为标准。2017-07-08 01:45分左右,集群出现故障。

2 日志信息

105 NN 日志如下:
Hadoop HA --- 网络原因/NN Full GC造成集群故障_第1张图片

105 DN日志如下:
Hadoop HA --- 网络原因/NN Full GC造成集群故障_第2张图片

104 JN日志如下:
Hadoop HA --- 网络原因/NN Full GC造成集群故障_第3张图片

105 JN日志如下:
Hadoop HA --- 网络原因/NN Full GC造成集群故障_第4张图片

106 JN日志如下:
Hadoop HA --- 网络原因/NN Full GC造成集群故障_第5张图片

3 问题分析

从105的NN日志可以看出,在01:40左右,JN同步edit log的时候,与三个节点之间的传输发生故障,只有105给予28秒的超时响应(还是超时)。由于是三个节点,必须有至少两个jn节点正常工作才能保证edit log的正常写入。查看三个节点的jn日志,可以看出,在这个时间段三个节点的jn在同步edit log的时候,确实出现不同程度的超时。

从105的DN分析,在同一时刻,有一个68秒的GC,由于在进程的启动过程中没有加入GC的参数,无法正确的判断出是由于NN FULL GC引起的还是网络原因引起的。

4 解决方案

1) 网络原因

重点怀疑是由于网络原因引起的,查看之前的jn日志,发现经常会出较长时间的response,由于造成集群故障的场景还是比较容易复现,在Active的NN向jn节点发起长时间的ping,记录ping的时间点,待问题复现,查看当时的网络状态。若确实是由网络原因造成的,那么可以考虑调节jn的写入超时时间。

dfs.qjournal.write-txns.timeout.ms

2) NN FUll GC

在NN的option中添加GC参数(hadoop-env.sh)

-XX:+UseCompressedOops
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=75
-XX:SoftRefLRUPolicyMSPerMB=0

例如:

export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}”

5 后续

等待问题复现,查看验证结果。

你可能感兴趣的:(Hadoop HA --- 网络原因/NN Full GC造成集群故障)