Hadoop 파일시스템은 striping 기반의 파일 시스템이다.
하나의 파일을 여러 조작으로 나누어 저장한다는 말이다. 분산파일시스템이 아닌 경우 striping은 하나의 머신에 물리적으로 여러개의 디스크 또는 디스크 드럼에 한 파일을 여러 조각으로 나누어 저장하지만, 분산파일시스템에서의 striping은 한 파일을 여러개의 조각으로 나누어 각각 다른 서버에 저장하는 방식이다.
이런 방식은 데이터 처리 중심의 애플리케이션에서 병렬 처리 효과를 높일수 있다. 하지만 한 파일이 여러대의 서버에 분산되어 저장되어 있기 때문에 한 서버 장애 발생 시 시스템의 전체 파일을 사용하지 못하는 경우도 발생한다. 일반적인 파일시스템일 경우 해당 서버의 파일만 사용할 수 없지만 striping 되어 있는 분산파일시스템에서는 전체 또는 많은 파일을 사용할 수 없게 된다.
이런 위험을 방지하기 위해 Hadoop의 경우 파일의 조각을 여러 서버에 복사하여 저장하는 정책을 가지고 있다. 기본적으로 3개의 복사본이 저장된다.
이런 상황에서 특정 서버에 장애가 발생하게 되면 해당 서버에 저장되어 있는 파일의 조각(블록)이 정해진 복제본수(3)보다 작게 되어 이것을 다시 정해진 갯수만큼 다시 복구 시키는 매커니즘이 필요하다.
Hadoop의 경우 DataNode-NameNode 사이에 3초 주기로 heartbeat 메세지를 주고 받으며 DataNode의 상황을 점검한다. 이 heartbeat 메세지가 일정 시간동안 오지 않는 경우 해당 DataNode는 더 이상 사용할 수 없다고 판단하여 장애가 발생한 DataNode에 저장되어 있던 블럭을 다른 서버에 복제본을 만들어 3개의 복제본을 항상 유지시켜 준다.
장애가 난 서버의 파일을 어떻게 복사하는냐고 물어 볼수도 있겠지만 장애가 난 서버의 파일을 이용하는 것이 아니라 다른 복제본(2개가 더 있다)을 이용하여 복사하는 것이다.
이 주기가 기본적으로는 10분 30초로 설정되어 있다.
이런 구성에서의 문제는 100대 중 5대가 동시에 장애가 발생하여 복구하는데 10분이상 소요된 경우 5대에서 저장되어 있던 모든 파일의 블럭들에 대해 복제가 발생하기 때문에 복제가 끝날때까지는 네트워크 부하가 발생하게 된다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준