溜达
发布于

关于hdfs出现Error: Flush failed for required journal 问题解决

如图:

为什么 jn 会导致 nn 挂掉
hdfs 的实现,jn 的目的是为了协调主备节点间数据一致。当进行大量写等操作导致处理时间过长,超过设置的 jn 超时等待时间,或者因为 full gc、网络波动等导致超时,此刻 jn 不清楚 nn 处于什么状态,且不确定 nn 会不会恢复。出于数据一致性的考虑,会主动调用方法 System.exit()杀掉当前 active 的 nn,进而促使进行主备切换,保护数据一致,目前通过参数调大超时时间可解决此问题

说明
根据 cap 理论,hdfs 是属于 cp 的,无法满足 a(可用性),会使得主备切换期间暂停服务,待切换成功后数据同步再对外提供服务。

解决:

 <property>
     <name>dfs.qjournal.write-txns.timeout.ms</name>
     <value>90000</value>
 </property> 

调大 dfs.qjournal.write-txns.timeout.ms 的参数(默认 20000)可解决

评论(1)
test