린아저씨의 잡학사전

Hadoop 클러스터를 운영하다 보면 Block의 복제 수를 3에서 2로 줄일 필요가 있는 경우도 생기고, 또는 종종 Datanode Disk fault 등으로 인해 설정해놓은 replication factor(dfs.replication 값)보다 블럭 수가 적어지는 Under Replicated block이 발생하는 경우도 있습니다.

 

Under Replicated block이 발생할 경우, 대부분은 자동으로 replication factor를 유지하기 위해 block 복제를 진행하지만, 정말 드물게 자동으로 block이 replication factor까지 복제되지 않는 경우 조치 방법에 대해 알아보려고 합니다.

 

 

1.  파일의 복제 block 수 조정하기

Hadoop 클러스터 운영시 어떤 데이터(파일)의 복제 블럭 수가 굳이 3이 아니어도 되는 경우가 있습니다. 이럴 경우 복제 블럭 수를 3에서 2나 1로 줄여줌으로써 데이터 저장 공간을 확보하여, 좀 더 효율적인 클러스터 운영이 가능해 집니다.

 

$ su - hdfs
$ hdfs dfs -setrep -R -w 2 /lin_data/setrep_ch_file

 

다음과 같이 -setrep 명령어를 이용하여 변경할 복제 블럭 수와 변경할 디렉터리나 파일 경로를 매개 변수로 하여 복제 블럭 수 변경이 가능합니다. 

  • -R : 이전 버전과의 호환성을 허용하는 플래그로 복제 수 조정 작업에 영향을 주지는 않습ㄴ디ㅏ.
  • -w : 복제 수 조정이 완료될 때까지 기다리도록 요청하는 플래그 입니다. 조정해야하는 블럭의 크기가 크거나 많을 경우 오랜 시간이 소요 될 수 있습니다.

 

2. Under Replicated Block 조치하기

현재 dfs.replication 설정의 수보다 복제된 블럭 수가 적어 Under replicated block이 발생하였을 경우, 조치할 수 있는 방법 입니다. 

 

$ su - hdfs
$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> ~/under_rep_file_list
$ for file in `cat ~/under_rep_file_list`; do hdfs dfs -setrep -w 3 $file; done

 

1의 복제 block 수 조정하는 방법과 동일한 명령어를 사용하게 됩니다. 1에서는 내가 원하는 경로의 파일의 복제 블럭 수를 변경해 주었다면, 이번에는 원치 않게 Under replicated 된 파일들의 복제 블럭 수를 조정해주어야 하기 때문에 해당 파일들의 경로를 추출하는 작업이 필요합니다.

 

따라서 hdfs fsck 명령어를 이용하여 해당 클러스터에 존재하는 모든 Under replicated block의 파일 경로 리스트를 추출합니다. 그리고 추출된 리스트를 이용하여 for문을 넣고 해당 파일들의 복제 블럭 수를 다시 3으로 변경해주는 것 입니다.

 

 

참고 : Apache Hadoop - FileSystemShell(setrep)

공유하기

facebook twitter kakaoTalk kakaostory naver band