2021. 2. 13. 13:35 빅데이터/HDFS
HDFS Balancer
출처 : 빅데이터 전문가의 하둡 관리 ( 9장 HDFS 데이터 리밸런싱하기 ) ISBN 9788931555752
하둡을 오랜시간 운영하다보면 스토리지에 skew가 발생해 불균형한 상태가 될 수 있다
그리고 클러스터에 새로운 노드가 들어올 때도 불균형이 발생한다.
하둡은 이런 데이터 불균형을 자동으로 해결해주진 않는다.
그 대신 하둡은 데이터 노드의 공간 사용율과 클러스터내 데이터노드의 사용률과 비교해 특정 비율 이하로 유지 할 수 있게 balancer 기능을 제공한다
balancer를 이용하면 클러스터내 블록을 분산 시켜 데이터노드가 비슷한 비율로 데이터를 갖도록 조정한다.
balancer를 실행하는 방법은 2가지가 있다.
1) start-balancer.sh
2) hdfs -balancer
hdfs balancer의 threshold 매개변수는 전체 클러스터의 DFS 사용률에서 각 데이터 노드의 사용률의 분산비율을 의미한다. 이 값을 기준으로 벗어나게 되면 노드들이 균형 잡힐 수 있게 재조정 한다.
balancer의 threshold 기본값은 10이다. 밸런서가 클러스터의 평균 디스크 사용률의 ± 10% 이상의 사용률을 갖는 데이터 노드가 없을 때 까지 데이터 블록을 이동한다는 의미이다.
threshold 조정 명령어 : hdfs balancer -threshold 5
이 값이 작을 수록 밸런서가 수행해야 할 작업이 많아지고, 클러스터가 더 균형 잡힌 상태로 된다.
밸런서를 실행 할 때 클러스터에선 두가지 값을 사용한다.
* 클러스터 전체 평균사용률 = used volume * 100 / total volume
* 각 노드의 사용률
클러스터 전체 평균 사용률은 hdfs dfsadmin -report 를 통해 DFS Used : 항목으로 볼 수 있고
namenode web을 통해서도 확인 할 수 있다
밸런서 툴을 실행해야 할 시점
대규모 클러스터는 정기적으로 실행하는게 좋다.
클러스터에 새로운 노드들을 추가하고 나서 밸런서를 실행하는것이 좋다.
새로운 노드 추가 후 밸런스 작업은 작업시간이 오래 걸린다.
밸런서의 overhead는 높지 않아서 클러스터 overhead가 높지 않을 때 주기적으로 실행하는것이 가장 좋다.
밸런서 시작 할 때 network 대역폭을 조정 할 수 있는데 기본 값은 10mb / sec 이다.
이 값을 높이면 더 빨리 끝난다. 대역폭에서 10% 까지는 클러스터에 큰 부담을 주지 않고 실행 한다.
20mb로 올리는 방법
hdfs dfsadmin -setBalancerBandwidth 20971520
대역폭을 올리기전에 적절한 대역폭인지 확인이 필요하다.
ethtool eth0
공간확보 할 때 복제계수 낮추기를 통해서 공간을 추가 확보 할 수 있다.
hdfs-site.xml 파일에 있는 dfs.replication 값은 클러스터 레벨에서 복제 계수를 조정하는것이다.
기본값은 3인데 2로 변경할 경우 클러스터 전체 블록에 대해서 3 -> 2로 변경된다.
하둡은 파일별로 복제계수를 지정 할 수 있다.
hdfs dfs -setRep를 이용해 파일레벨로 복제계수를 변경 할 수 있다. (cold data에 사용하면 좋음)
hdfs dfs -setRep -w 2 -R /moneymall/tsv/etc-log/
-R : recursive로 하위 디렉토리의 전체대상으로 복제계수 변경
-w : 복제 작업이 완료 될 때 까지 기다림