본문 바로가기
프로그래밍/hadoop

HA 구성 클러스터에서 발생한 Journal Node 오류

by W.C. 2018. 11. 15.


Test Cluster 에서 HA를 구성 했는데 뜬금없이 NameNode가 죽고 StandbyNamenode가 Namenode로 전환되는 일이 있었다.

일단 원인은

java.lang.Thread.run(Thread.java:745)
    Number of suppressed write-lock reports: 0
    Longest write-lock held interval: 22184

Write-lock 이 걸린 것이다. 그로 인해

org.apache.hadoop.ipc.RemoteException(java.io.IOException): IPC's epoch 10 is less than the last promised epoch 11
    at org.apache.hadoop.hdfs.qjournal.server.Journal.checkRequest(Journal.java:428)
    at org.apache.hadoop.hdfs.qjournal.server.Journal.checkWriteRequest(Journal.java:456)
    at org.apache.hadoop.hdfs.qjournal.server.Journal.journal(Journal.java:351)
    at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.journal(JournalNodeRpcServer.java:152)
    at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.journal(QJournalProtocolServerSideTranslatorPB.java:158)
    at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25421)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)

대략 위와 같은 에러가 발생했다.

HA 구성시 Journal Node 가 추가 되는데 이건 namenode가 hdfs에 파일 기록시 동기화를 맞추기 위한 일종의 기록 보관실이다.

그래서 해당 namenode가 죽었을 때 standbynamenode가 전화 되면서 정확히 동기화 하여 실행 되는 것이다.

그런데 위의 로그 내용을 보면 journal node에 기록 되어야 할 예약 번호가 있는데 10번이 11번 보다 늦었다고 나온다.

즉 write-lock이 발생하면서 10번 보다 11번이 먼저 기록 되었고

당연히 순서가 바뀌면서 에러가 발생

결국은 OOM까지 발생한 것이다. 그러면서 재빨리 namenode를 전환 한 것이다.

write-lock 문제는 정확히 알수가 없다는...

빈번히 발생하면 관련 문제를 확인해 봐야 겠다.