린아저씨의 잡학사전

안녕하세요. 린아저씨 입니다.

오늘은 HDFS Corrupt 파일 확인 및 제거 방법에 대해 포스팅해보려고 합니다. 하둡 클러스터를 관리하다 보면 잦은 현상은 아니지만 간혹 HDFS 블록이 손상되는 경우가 발생하곤 합니다. 이때 이 손상된 블록을 Corrupt 파일 블록이라고 합니다. HDFS는 기본적으로 3 Copy를 유지하기 때문에 Corrupt 블록이 발생하더라도 데이터에 영향을 주지는 않습니다. 남아있는 2 copy의 블럭으로도 데이터를 읽는데는 아무 문제가 없기 때문입니다. 하지만 Corrupt 파일 블럭이 존재하면 이로 인해 정상적이 3 copy 블럭이 아닌 정상적인 2 copy 블럭과 깨진 1 copy 블럭이 존재하기 때문에 Corrupt 파일 블럭을 제거해주어야 합니다. 

 

1. HDFS Corrupt 파일 블럭 리스트 확인

HDFS Corrupt 파일 블럭은 hdfs fsck 명령어를 통해 쉽고 빠르게 확인 할 수 있습니다. 단순히 fsck로 전체 데이터를 검사하게되면 보유하고 있는 데이터 크기에 따라 엄청난 시간이 소요되는 경우도 있는데, Corrupt 파일 블럭 리스트 확인은 10 PB에 가까운 데이터를 보유하고 있더라도 순식간에 확인할 수 있습니다. 

 

$ hdfs fsck -list-corruptfileblocks	

Connection to namenode via http://hadoop-test-001.test.com:50070
The list of corrupt files under path '/' are:
blk_190281477 /user/lina/math/knntest.parquet
The filesystem under path '/' has 1 CORRUPT files

 

위와 같이 명령어를 수행하면 전체 경로를 탐색해서 어떤 파일의 블럭이 깨졌는지 확인해 주고, 전체 몇개의 Corrupt 파일이 존재하는지 알려줍니다. 위의 예와 같은 경우에는 /user/lina/math/knntest.parquet 파일의 blk_190281477 블럭이 깨졌으며, 전체 1개의 corrupt 파일이 존재합니다.

 

주의할 점은 hdfs 파일을 탐색할 수 있는 권한이 있는 계정으로 다음 명령어를 수행해야 합니다.

2. HDFS Corrupt 파일 제거하기

HDFS Corrupt 파일을 제거할 수 있는 방법은 두가지가 있습니다.

 

첫번째로는 깨진 블럭을 /lost+found 디렉터리로 이동시키는 것입니다. 이렇게 /lost+found 디렉터리로 이동되면 namenode는 더이상 깨질 블럭이 없는 블럭으로 판단하고 새롭게 하나의 블럭을 생성 할 것입니다.

 

두번째로는 깨진 블럭을 아예 삭제하는 것입니다. 개인적으로는 위의 /lost+found 이동시키는 방법을 추천드립니다. 하둡과 같은 데이터 인프라 관리자는 무조건 안전한 방법이 최우선되어야하기 때문입니다. 

 

### 1. /lost+found 디렉터리로 corrupt 파일 이동
$ hdfs fsck -move

### 2. corrupt 파일 삭제
$ hdfs fsck -delete

 

이렇게 Hadoop 클러스터에서 HDFS Corrupt 파일 블럭이 발생하였을 경우 어떻게 확인하고, 어떻게 처리할 수 있는지에 대해서 정리해 보았습니다. Corrupt 파일 블럭이 다수 발생하였을 경우에는 큰 이슈로 작용하겠지만, 단순히 몇 개 수준의 Corrupt 파일은 HDFS에게 큰 장애는 아니므로 다음과 같은 방법을 통해 처리하시면 됩니다. 끝!

공유하기

facebook twitter kakaoTalk kakaostory naver band