- 각 노드 및 디스크에 분할 및 복제되어 저장되는 데이터들의 차이를 줄이기 위해, 각 노드 및 디스크에 고르게 데이터를 분산하기 위한 작업이다.
- 기본적으로는 "hdfs balancer -policy datanode -threshold 5"(노드간 차이가 5%이하가 될때까지 밸런싱) 정도의 옵션으로 처리 가능하지만, 시간이 오래걸리므로 많은 자원을 사용하더라도 밸런싱의 우선순위를 높이고자 하면 아래 명령을 참고하여 처리한다.
# Kerberos 인증이 활성화 돼있다면 티켓을 발급한다.
# kinit -kt hdfs.keytab hdfs@KRB.HAEDONGG.NET
kinit hdfs@KRB.HAEDONGG.NET
# Balancer가 사용할 대역폭을 늘려준다. 예시는 10GiB/sec
hdfs dfsadmin -setBalancerBandwidth 10737418240
# Balancing 수행
# hdfs balancer -policy datanode -threshold 5 # 데이터노드 기준 차이가 5%이내가 될때까지 밸런싱
# 데이터 분산 차이가 1%이내가 될 때까지 빠르게 밸런싱
hdfs balancer -Ddfs.balancer.moveWinWidth=5400000 \
-Ddfs.balancer.moverThreads=1000 \
-Ddfs.balancer.dispatcherThreads=200 \
-Ddfs.datanode.balance.max.concurrent.moves=5 \
-Ddfs.balance.bandwidthPerSec=10737418240 \
-Ddfs.balancer.max-size-to-move=10737418240 \
-threshold 1
# 다른 작업에 영향을 주지 않도록 Balancer 대역폭을 낮춘다. 예시는 10MiB/sec
hdfs dfsadmin -setBalancerBandwidth 104857600
- moveWinWidth : 단위 ms. 지정된 시간 동안의 블록 이동 데이터를 기반으로 균형 조정을 수행.
- moverThreads: CPU thread 수.
- dispatcherThreads: Balancer 작업 분배 thread 수.
- max.concurrent.moves: 단일 데이터 노드에서 동시에 이동되는 블록의 수.
- bandwidthPerSec: 단위 byte. Balancer가 사용하는 대역폭.
- max-size-to-move: 단위 byte. Balancer가 이동할 수 있는 단일 블록의 최대 크기.
- theshold: 단위 %. 클러스터 균형 임계 값. 값이 1이라면 노드 사용량의 1% 수준이 될때까지 수행.