Hadoop
HDFS - Balance
개발 일기92
2025. 1. 26. 14:36
HDFS를 운영하면서 데이터 불균형이 발생하여 밸런싱을 실행해야 하는 경우가 있다.
주의할 점은 밸런서는 랙 인식(Rack Awareness) 설정이 되어 있지 않으면 동작하지 않는다.
- 데이터 불균형이 발생하는 경우
- 데이터 노드를 추가하는 경우
하둡의 데이터 저장 공간이 부족하여 데이터노드를 추가하는 경우 다른 노드의 사용공간은 70~80% 정도인데 신규 데이터 노드는 사용공간이 0%
-
- 대량의 데이터를 삭제하는 경우
특정 데이터 노드에 블록이 많이 저장되어 데이터노드간 저장공간 차이가 20~30% 정도 발생하는 경우
-
- 대량의 데이터를 추가하는 경우
특정 데이터 노드에 데이터가 적은 경우 네임노드는 데이터 저장공간이 작은 노드를 우선적으로 사용하는데 이 경우 특정 노드로 I/O가 집중 되게 됨
- HDFS Balancer
밸런서는 다음과 같이 실행합니다. 상황에 따라 작업 시간이 굉장히 오래걸릴 수도 있다.
$ hdfs balancer -threshold 5
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved NameNode
Nov 7, 2022 6:50:16 AM 0 4.23 GB 14.96 GB 10 GB hdfs://hdfs-namenode:8020
Nov 7, 2022 7:06:49 AM 1 9.96 GB 9.63 GB 10 GB hdfs://hdfs-namenode:8020
Nov 7, 2022 7:22:56 AM 2 15.53 GB 4.23 GB 8.77 GB hdfs://hdfs-namenode:8020
The cluster is balanced. Exiting...
Nov 7, 2022 7:23:05 AM 3 15.53 GB 0 B 0 B hdfs://hdfs-namenode:8020
Nov 7, 2022 7:23:05 AM Balancing took 44.9548 minutes
- 대역폭
밸런서는 작업간 많은 데이터 이동이 발생하기 때문에 대역폭을 지정하여 다른 작업에 영향이 가지 않도록 하는 것이 좋습니다.
hdfs dfsadmin -setBalancerBandwidth 1073741824
- threshold
각 노드간 데이터 사용비율 차이를 임계값을 이용하여 지정합니다.
hdfs balancer -threshold 3
- 추가 설정: hdfs-site.xml
- dfs.datanode.balance.max.concurrent.moves: 50
데이터노드가 데이터 이동에 사용할 스레드 개수
-
- dfs.datanode.balance.bandwidthPerSec: 10MB
데이터 이동에 사용하는 대역폭