Hadoop2 NameNode HA


네임노드HA를 공부하고 이해가 잘 안가서 각각 가설을 세우고 테스트를 진행해보았다.
내가 궁금했던 점은 이렇게 5가지였다. 아직 테스트 전인 것도 있어서 차차 해보고 업뎃할 예정이다.

  1. datanode에서 data가 언제 업데이트/동기화 되는 지
    1. 665M에서 4G로 언제?
  2. 주키퍼의 역할 
    1. 주키퍼가 namenode ha에서 하는 역할이란: 어디가 액티브인지 어디가 스탠바이인지 알려준다 
    2. 주키퍼
    3. 주키퍼가 안돌아가도 hdfs에 접근 가능?
    4. 주키퍼가 전부 
  3. namenode 상태 바뀌면 복구는 어떻게 함?
  4. 꼭 얀이 돌아가야 쓰기 읽기 가능?
    1. 얀은 프로그램이 돌아가지 않는 한, 크게 쓸모 없음
    2. 블록으로 쪼개지고 입력하는건 그냥 HDFS의 능력
    3. HDFS랑 얀은 독립적인 컴포넌트 
    4. 맵리듀스는 그냥 하둡이란 환경에서 쓰기 좋은 애플리케이션
  5. 파일질라로 그냥 리눅스 서버 한개에 파일 올리는 시간 VS 로컬에서 hdfs로 파일 올리는 시간



주키퍼 
환경 : nn1-active / nn2-standby (그냥 이전 스냅샷1로 돌림(n2는 스냅샷2))

가설1 : 주키퍼는 nn가 시작될 때 다른 datanode들에게 hdfs 데이터를 동기화해준다 

환경1: 주키퍼를 켜지 않고 하둡을 실행해서, 실행전과 후의 data 디렉토리의 용량을 확인해본다. 

1-1: 하둡 켜기 전
data 디렉토리의 사용 용량(참고로 얀은 모두 0이었음 순수 dfs파일 크기임)
nn1
518M    data
nn2
648M    data
n3
236M    data/
n4
353M    data/

1-2: 모든 서버를 켜고 하둡 실행 -> node04를 제외하고 data 크기 커짐 +2M 

결론1: 주키퍼가 안켜져 있어도 hdfs가 업데이트 됨 

가설2 : 주키퍼가 3대 이상 켜져 있어야만 hdfs에 접근 할 수 있다. 

환경1 : 주키퍼를 2개만 켜고 n4로 3556065504 B 크기 파일 hdfs에 put -> 업뎃됨
nn1
2.8G    data
nn2
2.8G    data/
n3
2.6G    data/
n4
3.7G    data/

환경2 : 주키퍼 1개(jvm은 돌아가지만 not running 상태로 뜸-> 사실상 주키퍼가 다 안돌아간다고 봐야함)를 킨 상태에서 이전에 입력한 거 삭제한다 -> 업뎃됨
nn1
521M    data
nn2
650M    data/
n3
238M    data/
n4
353M    data/

환경3 : 주키퍼 아예 running x 되지 않는 상태에서 n4로 3556065504 B 크기 파일 hdfs에 put -> 업뎃됨

nn1
2.5G    data
nn2
3.5G    data/
n3
2.2G    data/
n4
3.7G    data

결론2
  1. 주키퍼 작동 유무는 잘 작동하고 있는(active namenode가 있고 datanode가 장애가 없는) hdfs에는 영향을 끼치지 않는다. 
  2. 주키퍼는 2대 이상은 작동되어야 running된다.
  3. 네임노드가 가동될 때 data가 업데이트 되므로 동기화는 namenode 몫이다. 

가설3 : 주키퍼는 꼭 3대여야 active 네임노드와 standby 네임노드를 구분해서 active nn가 장애가 났을 경우 교체해준다- active nn - nn1 / standby nn - nn2


상황1: 주키퍼 3대일 때 active 네임노드와 stanby nn 바꾸기  -> nn1의 namenode를 kill 해줌
  • nn2가 active로 바뀌고 nn1은 접속 불가 
  • 다시 nn1에 namenode키니까 standby로 바뀌었음
  • nn2(active)의 네임노드를 kill했는데 아직 nn1이가 standby임 -> 이론상으로는 다시 nn1이 active 되어야 하지 않을까?
  • nn1 과 nn2를 다시 시작해도 계속 standby 
  • 전부 다시시작함 -> nn2가 active됨(주키퍼가 마지막으로 기억한게 얘인가?) -> 강제로 failover날려줌 (hdfs haadmin -failover nn2 nn1) 
  • HDFS 파일 접근이 안됨
  • 알아본 결과, 하둡은 처음 네임노드가 시작되면 standby임 그리고 그 다음에 결정난다고 함. 근데 나는 설치 방법이 그렇지 않았는걸? 

상황2: 주키퍼가 2대일 때 active nn 와 standby nn 바꾸기 
  • nn2가 active됨 
  • 다시 nn2를 중단하고 nn1을 실행 nn1는 스탠바이
  • nn2의 네임노드를 시작해줬더니 nn1이 액티브, nn2가 스탠바이로 바뀜 자동 failover
  • 다시 하둡을 켜도 결과는 같음 
상황3: 주키퍼가 1대일 때 active nn 와 standby nn 바꾸기 
  • 주키퍼 한대만 돌아감 
  • 근데 에러 떨어짐
  • 하둡을 켰는데 두 네임노드의 상태가 둘다 standby -> 실패함 
상황4: 주키퍼가 안돌아갈때 active nn 와 standby nn 바꾸기 
  • 주키퍼 다 지움
  • 노드 두개가 아예 스탠바이 진행이 안됨 
  • 주키퍼 두개를 켜고 다시 시작하니 됨 

 1,2 -> nn1 active nn2 standby
2,3 -> nn1 standby nn2 active

결론: 주키퍼는 1대만으로는 안돌아가고 각각 주키퍼마다 갖고 있는 정보가 있는데 그 정보가 다름 
    주키퍼 시작->네임노드 시작 -> zkfc 시작 -> 데이터노드 시작 -> 얀 시작 될때, 
zkfc가 보내주는 정보로 네임노드의 정보를 업뎃 그래서 주키퍼는 메모리영역에서 돌아감
실제로 주키퍼에서 액티브네임노드에 락(ActiveStandbyElectorLock)을 걸어주는데 액티브 네임노드를 꺼버리니까 사라짐 

댓글