메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


Cloudera CDH/CDP HDFS Balancer설정및 수행

총관리자 2018.03.21 15:08 조회 수 : 163

*출처 : http://imp51.tistory.com/entry/HDFS-Balancer?category=658901


DataNode 추가/삭제의 경우 보유된 DataNode에 저장된 데이터를 전체 DataNode에 균등하게 배포하기 위해 HDFS에서 제공되는 Balancer 기능을 사용하여 데이터 조정을해야 합니다.

기본적으로 클러스터 사이즈가 큰 경우, HDFS Balancer에 이동되는 데이터의 규모가 일별 2TB로 제약되어 있기 때문에 매우 오랜 시간이 소요될 수 있습니다. 또한, 데이터 이동의 경우 NameNode의 메타 정보가 변경되기 때문에 Impala Daemon들에게 Balancer이후로 조정된 메타 정보를 인지하기 위해 Refreshment / Invalidate Metadata Command나 Catalog 서비스를 재시작이 요구되기도 합니다.

HDFS Balancers

HDFS 데이터는 예를 들면 기존 클러스터에 신규 DataNode를 추가 / 삭제하는 다양한 이유로 DataNode 전역에 균등하게 배분되어 있지 않을 수 있습니다. HDFS는 블록 배치 상태를 분석하고 DataNode간 데이터 균형을 제어하기 위한 Balancer 유틸을 제공합니다. Balancer는 클러스터 데이터 노드간의 데이터가 균등하게 배분될 때까지 데이터 블록을 이동시켜주는 역할을 담당합니다. Balancer는 데이터 노드 간의 데이터 분배의 역할을 담당하지, 단일 데이터 노드의 디스크 볼륨간의 데이터 조정 역할에는 관여를 하지 않습니다. 

Configuring and Running the HDFS Balancer Using Cloudera Manager

Cloudera Manager에서, HDFS Balancer 유틸은 Balancer 역할로 구성되어 있습니다. Balancer Role은 일반적으로 HDFS 서비스를 설치할 때 추가되며, Balancer 역할이 클러스터 노드에 추가되어 있지 않은 경우, 수동으로 Balancer Role을 추가할 수 있습니다. 

Configuring the Balancer Threshold

Balacner의 기본 임계값은 10%이며, 이는 개별 DataNode 디스크 사용량이 클러스터 전체 사용량과 10% 이내의 차이점이 존재하는지를 파악합니다. 예를 들어, 클러스터의 전체 DataNode의 사용량이 클러스터의 전체 디스크 저장 용량의 40%인 경우, 개별 DataNode의 디스크 사용량이 각 DataNode 디스크 저장 용량의 30%~50% 이내에 존재하는지 여부를 파악합니다. 이 유효한 범의를 초과하는 데이터 노드의 데이터에 대해 여부 또는 부족한 디스크 사용량을 보이는 데이터 노드로 데이터를 이동시키는 역할을 담당합니다. 임계값을 변경하기 위해서는,:

  1. HDFS 서비스로 이동 후, Configuration 탭을 클릭.
  2. "Scope > Balancer"를 선택.
  3. "Category > Main"를 선택
  4. Rebalancing Threshold 속성 값을 설정  

  5. 변경사항을 저장하기 위해서 "Save Changes"를 클릭.

Configuring Concurrent Moves

"dfs.datanode.balance.max.concurrent.moves" 옵션은 DataNode Balancer가 사용하는 최대 스레드의 수를 의미합니다. 이 옵션은 Balacner가 데이터를 이동하는 작업이 전체 DataNode의 리소스를 점유하여 정상적인 작업이 진행되는 현상을 방지하는 용도로 사용됩니다. 이 값을 늘리면 더 많은 Balancer Thread가 작업을 하기 때문에 데이터 이동을 좀 더 빠르게 진행할 수 있지만, 다른 정상적인 워크로드 작업과 리소스 경합을 할 가능성이 높아집니다. 또한 이 값을 작게 설정을 하면 데이터 Balacner 작업은 느리게 진행되지만 다른 워크로드의 작업과 데이터 노드의 리소스 경합이 될 가능성을 낮게 할 수 있습니다. 이 속성의 값을 변경하기 위해서는 Balancer와 DataNode의 두 옵션을 모두 수정해야 합니다. 

  • Datanode의 옵션을 구성하기 위해서는:

    • HDFS 서비스로 이동 후, Configuration 탭을 클릭.
    • DataNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml를 선택.
    • 다음과 같이 구성 - 예를 들면, 50으로 설정.

      <property>
        <name>dfs.datanode.balance.max.concurrent.moves</name>
        <value>50</value>
      </property>
    • DataNode 재시작.
  • Balancer의 옵션을 구성하기 위해서:

    1. HDFS 서비스로 이동 후, Configuration 탭을 클릭.
    2. Balancer Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml를 선택.
    3. 다음과 같이 구성 - 예를 들면, 50으로 설정.
      <property>
        <name>dfs.datanode.balance.max.concurrent.moves</name>
        <value>50</value>
      </property>

기타 옵션 : dfs.balance.bandwidthPerSec 

밸런서에 할당할 노드당 네트워크 대역폭은 일반적으로 사용 가능한 총 대역폭의 최대 10%으로 설정하는 것이 좋다고 합니다. 실제 프로덕션 환경에서 10Gb Ethernet인 경우 아래 설정값을 추천 합니다.
dfs.balance.bandwidthPerSec 10MB -> 최대 1GB

Running the Balancer

  1. HDFS 서비스로 이둥 후, HDFS 서비스에 Balancer 역할이 추가되어 있는지를 확인. 
  2. Actions > Rebalance를 차례로 선택.
  3. Rebalance 클릭. - 완료된 상태로 변경이 되며, Balancer가 성공적으로 실행된 것을 의미합니다. 


참고 문헌: 

- https://www.cloudera.com/documentation/enterprise/5-10-x/topics/admin_hdfs_balancer.html#xd_583c10bfdbd326ba--6eed2fb8-14349d04bee--780a

- https://www.cloudera.com/documentation/enterprise/properties/5-11-x/topics/cm_props_cdh580_hdfs.html



출처: http://imp51.tistory.com/entry/HDFS-Balancer?category=658901 [Slow but Surely!]

번호 제목 글쓴이 날짜 조회 수
617 AnalysisException: Incomplatible return type 'DECIMAL(38,0)' and 'DECIMAL(38,5)' of exprs가 발생시 조치 총관리자 2021.07.26 33
616 drop table로 삭제했으나 tablet server에는 여전히 존재하는 테이블 삭제방법 총관리자 2021.07.09 7533
615 impala session type별 표시되는 정보로 구분하는 방법 총관리자 2021.05.25 89
614 Hive JDBC Connection과 유형별 에러및 필요한 jar파일 총관리자 2021.05.24 809
613 [Kudu] tablet server 혹은 kudu master가 어떤 원인에 의해서 replica가 failed상태인 경우 복구하는 방법 총관리자 2021.05.24 309
612 impald에서 idle_query_timeout 와 idle_session_timeout 구분 총관리자 2021.05.20 1630
611 missing block및 관련 파일명 찾는 명령어 총관리자 2021.02.20 153
610 lombok설치방법 총관리자 2020.06.20 49
609 [sap] Error: java.io.IOException: SQLException in nextKeyValue 오류 발생 총관리자 2020.06.08 253
608 [kudu]테이블 drop이 안되고 timeout이 걸리는 경우 조치 방법 총관리자 2020.06.08 340
607 [oozie] oozie shell action에서 shellscript수행결과의 2개 변수를 decision 액션에서 사용하기 총관리자 2020.06.05 133
606 [Sentry]HDFS의 ACL을 Sentry와 연동후 테스트 총관리자 2020.06.02 610
605 [sqoop] mapper를 2이상으로 설정하기 위한 split-by컬럼을 찾을때 유용하게 활용할 수 있는 쿼리 총관리자 2020.05.13 326
604 mysql sqoop작업을 위해서 mysql-connector-java.jar을 추가하는 경우 확실하게 인식시키는 방법 총관리자 2020.05.11 61
603 W/F수행후 Logs not available for 1. Aggregation may not to complete. 표시되며 로그내용이 보이지 않은 경우 총관리자 2020.05.08 2110
602 A Cluster의 HDFS 디렉토리및 파일을 사용자및 권한 유지 하여 다운 받아서 B Cluster에 넣기 총관리자 2020.05.06 77
601 impala external 테이블 생성시 컬럼과 라인 구분자를 지정하여 테이블 생성하는 예시 총관리자 2020.02.20 107
600 [Kerberos]Kerberos상태의 클러스터에 JDBC로 접근할때 케이스별 오류내용 총관리자 2020.02.14 747
599 cloudera서비스 중지및 기동순서 총관리자 2020.02.14 177
598 impala테이블 쿼리시 max_row_size 관련 오류가 발생할때 조치사항 총관리자 2020.02.12 213

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로