메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

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


Cloudera CDH/CDP HDFS Balancer설정및 수행

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

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

번호 제목 글쓴이 날짜 조회 수
341 우분투 16.04 설치후 APM (Apache2, PHP, MySQL) 설치 총관리자 2017.01.29 185
340 mongodb 2.6.6 설치(64bit) 총관리자 2015.09.30 185
339 Soft memory limit exceeded (at 100.05% of capacity) 오류 조치 총관리자 2022.01.17 181
338 cloudera에서 spark-shell를 실행했을때 default master는 spark.master=yarn-client임 총관리자 2018.06.20 181
337 lagom을 이용한 샘플 경매 프로그램 실행방법 총관리자 2017.06.20 181
336 drools를 이용한 로그,rule matching등의 테스트 java프로그램 file 총관리자 2016.07.21 181
335 java quartz 시간 설정 참고사항 총관리자 2015.12.16 179
334 cloudera서비스 중지및 기동순서 총관리자 2020.02.14 178
333 build할때 unmappable character for encoding MS949 에러 발생시 조치사항 총관리자 2016.08.03 178
332 mybais #과 $의 차이점 총관리자 2015.11.10 178
331 Oracle 12c DB의 LOB타입 컬럼이 있는 테이블을 import할 때 주의 할 사항 gooper 2022.09.14 175
330 문자열을 숫자(integer)로 casting하기 총관리자 2016.01.13 175
329 scala-eclipse 다운로드 총관리자 2019.06.09 174
328 shard3가 있는 서버에 문제가 있는 상태에서 solr query를 요청하는 경우 "no servers hosting shard: shard3" 오류가 발생하는 경우 조치사항 총관리자 2018.01.04 174
327 Mountable HDFS on CentOS 6.x(hadoop 2.7.2의 nfs기능을 이용) 총관리자 2016.11.24 174
326 jena/fuseki 3.4.0 설치 총관리자 2017.07.25 172
325 kerberos설정된 상태의 spooldir->memory->hdfs로 저장하는 과정의 flume agent configuration구성 예시 총관리자 2019.05.30 171
» HDFS Balancer설정및 수행 총관리자 2018.03.21 171
323 Embedded PostgreSql설정을 외부의 MariaDB로변경하기 [1] 총관리자 2018.05.22 170
322 javax.net.ssl.SSLHanshakeException: SSLHandshakeException invoking https://mainCluster.gooper.com:7183/api/v1/users: sun.security.validator.ValidatorException: No trusted certificate found gooper 2022.06.29 169

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.

위로