hdfs balancer 는 DataNode 사이의 사용률을 맞춘다. hdfs diskbalancer 는 한 DataNode 안의 디스크(볼륨) 사이를 맞춘다. 디스크를 새로 꽂았거나 한 볼륨만 가득 찬 경우에 쓴다. 노드 전체 사용률은 평균과 비슷한데 특정 디스크만 100% 에 가까운 상황이 전형적이다.
Hadoop 2.8 이상에서 쓸 수 있다.
계획을 만들고, 실행하고, 상태를 본다.
hdfs diskbalancer -report -node datanode01.example.net
hdfs diskbalancer -plan datanode01.example.net
hdfs diskbalancer -execute /system/diskbalancer/<date>/datanode01.example.net.plan.json
hdfs diskbalancer -query datanode01.example.net
hdfs diskbalancer -cancel /system/diskbalancer/<date>/datanode01.example.net.plan.json
-plan 은 계획 파일을 HDFS 의 /system/diskbalancer/ 아래에 만들고 그 경로를 출력한다. -execute 에는 그 경로를 그대로 넘긴다. 출력 위치를 바꾸려면 -out 을 준다.
계획을 만들 때 옵션으로 지정한다.
hdfs diskbalancer -plan datanode01.example.net \
-bandwidth 50 \
-thresholdPercentage 5 \
-maxerror 5
| 옵션 | 뜻 |
|---|---|
-bandwidth |
디스크 간 이동 대역폭(MB/s) |
-thresholdPercentage |
볼륨 간 허용 편차 백분율 |
-maxerror |
중단 전까지 허용할 블록 복사 실패 수 |
-v |
생성된 계획을 표준 출력에 표시 |
전역 기본값은 dfs.disk.balancer.max.disk.throughputInMBperSec 이며 기본 10MB/s 다. 소규모 클러스터는 30~50MB/s, 대규모는 그 이상으로 올리기도 한다. 이 값은 DataNode 쪽 설정이므로 NameNode 를 재시작할 필요가 없다. 옵션으로 넘기면 해당 계획에만 적용된다.
<property>
<name>dfs.disk.balancer.max.disk.throughputInMBperSec</name>
<value>50</value>
</property>
기능 자체를 끄고 켜는 스위치는 dfs.disk.balancer.enabled 이며 Hadoop 3.x 에서는 기본으로 켜져 있다. 꺼져 있으면 -plan 이 거부된다.
이동 중에는 해당 노드의 디스크 I/O 가 올라가므로 부하가 낮은 시간대에 돌린다. 여러 노드를 한꺼번에 처리해야 한다면 노드별로 계획을 만들어 순차로 실행하고, -query 로 끝난 것을 확인한 뒤 다음으로 넘어간다.
디스크를 추가한 직후라면 밸런싱보다 먼저 볼륨이 정상적으로 인식됐는지 확인한다. dfs.datanode.data.dir 에 새 경로가 들어갔는지, 권한과 소유자가 맞는지 본다.