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

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

by W.C. 2018. 11. 15.
728x90


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 문제는 정확히 알수가 없다는...

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