메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

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


Cloudera CDH/CDP HDFS Balancer설정및 수행

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

*출처 : 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!]

번호 제목 글쓴이 날짜 조회 수
358 [TLS]pkcs12형식의 인증서 생성및 jks형식 인증서 생성 커맨드 예시 총관리자 2022.03.15 120
357 [TLS]TLS용 사설 인증서 변경 혹은 신규 지정시 No trusted certificate found 오류 발생시 확인및 조치사항 총관리자 2022.03.15 60
356 [CentOS 7.4]Hadoop NFS gateway기동시 Cannot connect to port 2049 오류 발생시 확인/조치 총관리자 2022.03.02 74
355 Oracle RAC 구성된 DB서버에 대한 컴포넌트별 설정 방법 총관리자 2022.02.12 27
354 service name방식의 oracle을 메타정보 저장소로 사용할때 Hue Configuration설정하는 방법 총관리자 2022.02.12 15
353 oracle 접속 방식에 따른 --connect 지정 방법 총관리자 2022.02.11 24
352 kudu rebalance수행 command예시 총관리자 2022.01.17 84
351 Kudu tablet이 FAILED일때 원인 확인 방법 총관리자 2022.01.17 89
350 Failed to write to server: (no server available): 총관리자 2022.01.17 32
349 Soft memory limit exceeded (at 100.05% of capacity) 오류 조치 총관리자 2022.01.17 177
348 not leader of this config: current role FOLLOWER 오류 발생시 확인방법 총관리자 2022.01.17 23
347 Oracle NLOB type의 데이터를 import하는 경우 No Java type for SQL type 2011 for column rst와 같은 오류 발생시 조치사항 총관리자 2022.01.14 35
346 kudu 테이블 metadata강제 삭제시 발생하는 오류 메세지 총관리자 2022.01.12 108
345 hadoop nfs gateway설정 (Cloudera 6.3.4, CentOS 7.4 환경에서) 총관리자 2022.01.07 124
344 oracle 12에 sqoop해서 데이터 import하기 (console에서 sqoop import하는 방법) 총관리자 2021.12.31 48
343 클러스터내의 전체 workflow및 coordinator현황을 사용자별로 추출하는 방법 총관리자 2021.11.25 25
342 hue.axes_accessattempt테이블의 username컬럼에 NULL 혹은 space가 들어갈수도 있음. 총관리자 2021.11.03 2838
341 Query Status: Sender xxx.xxx.xxx.xxx timed out waiting for receiver fragment instance: 1234:cdsf, dest node: 10 의 오류 원인및 대응방안 총관리자 2021.11.03 77
340 hive metastore db중 TBLS, TABLE_PARAMS테이블 설명 총관리자 2021.10.22 259
339 kudu hms check 사용법(예시) 총관리자 2021.10.22 65

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.

위로