수동으로 Azure HDInsight 클러스터 스케일링

HDInsight는 클러스터의 작업자 노드 수를 증가 및 감소하는 옵션을 제공하여 탄력성을 보장합니다. 이러한 탄력성을 통해 몇 시간 후 또는 주말에 클러스터를 축소할 수 있습니다. 그리고 최고 비즈니스 수요 동안 확장합니다.

클러스터에 적절한 리소스가 있도록 주기적 일괄 처리를 수행하기 전에 클러스터를 확장합니다. 처리가 완료된 후 사용량이 다시 줄어들면, HDInsight 클러스터를 더 적은 수의 작업자 노드로 축소할 수 있습니다.

다음 방법 중 하나를 사용하여 클러스터를 수동으로 크기 조정할 수 있습니다. 자동 크기 조정 옵션을 사용하여 특정 메트릭에 대한 응답으로 자동으로 확장 및 축소할 수도 있습니다.

참고 항목

HDInsight 버전 3.1.3 이상을 사용하는 클러스터만 지원됩니다. 클러스터 버전을 알 수 없는 경우 속성 페이지를 확인할 수 있습니다.

클러스터 크기 조정 유틸리티

Microsoft는 클러스터 크기를 조정하는 다음과 같은 유틸리티를 제공합니다.

유틸리티 설명
PowerShell Az Set-AzHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
PowerShell AzureRM Set-AzureRmHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
Azure CLI az hdinsight resize --resource-group RESOURCEGROUP --name CLUSTERNAME --workernode-count NEWSIZE
Azure 클래식 CLI azure hdinsight cluster resize CLUSTERNAME NEWSIZE
Azure Portal HDInsight 클러스터 창을 열고 왼쪽 메뉴에서 클러스터 크기를 선택한 다음, 클러스터 크기 창에서 작업자 노드 수를 입력하고 저장을 선택합니다.

Azure portal scale cluster option.

이러한 방법 중 하나를 사용하여 몇 분 만에 HDInsight 클러스터를 확장 또는 축소할 수 있습니다.

Important

  • Azure 클래식 CLI는 사용되지 않으므로 클래식 배포 모델과 함께여야만 사용됩니다. 다른 모든 배포에는 Azure CLI를 사용합니다.
  • PowerShell AzureRM 모듈은 더 이상 사용되지 않습니다. 가능하면 Az module을 사용하세요.

크기 조정 작업의 영향

실행 중인 HDInsight 클러스터에 노드를 추가해도(스케일 업) 작업은 영향을 받지 않습니다. 크기 조정 프로세스가 실행되는 동안 새 작업을 안전하게 제출할 수 있습니다. 조정 작업이 실패하면 실패로 인해 클러스터가 작동 상태가 됩니다.

노드를 제거하는 경우 (스케일 다운) 크기 조정 작업이 완료되면 보류 중이거나 실행 중인 작업은 실패합니다. 이 오류는 크기 조정 프로세스 중 일부 서비스가 다시 시작되기 때문에 발생합니다. 수동 크기 조정 작업을 수행하는 동안 클러스터가 안전 모드에서 중단될 수 있습니다.

데이터 노드 수 변경에 따른 영향은 다음과 같이 HDInsight에서 지원하는 각 클러스터 유형에 따라 다릅니다.

  • Apache Hadoop

    모든 작업에 영향을 주지 않고 실행 중인 Hadoop 클러스터의 작업자 노드 수를 원활하게 늘릴 수 있습니다. 작업이 진행 중인 동안에 새 작업을 제출할 수 있습니다. 스케일링 작업의 실패는 정상적으로 처리됩니다. 클러스터는 항상 기능 상태로 남아있습니다.

    데이터 노드가 적은 Hadoop 클러스터가 스케일 다운되면 일부 서비스가 다시 시작됩니다. 그러면 실행 중인 작업과 보류 중인 작업이 크기 조정 작업을 완료하지 못하고 실패합니다. 그러나 작업이 완료되면 작업을 다시 제출할 수 있습니다.

  • Apache HBase

    HBase 클러스터가 실행 중인 동안 노드를 원활하게 추가하거나 제거할 수 있습니다. 지역 서버는 크기 조정 작업을 완료하는 몇 분 안에 자동으로 균형을 맞춥니다. 그러나 지역 서버를 수동으로 분산할 수 있습니다. 클러스터 헤드 노드에 로그인하고 다음 명령을 실행합니다.

    pushd %HBASE_HOME%\bin
    hbase shell
    balancer
    

    HBase 셸을 사용하는 방법에 대한 자세한 내용은 HDInsight에서 Apache HBase 예제 시작을 참조하세요.

  • Kafka

    크기 조정 작업 후 파티션 복제본의 균형을 다시 조정해야 합니다. 자세한 내용은 HDInsight에서 Apache Kafka를 사용한 데이터의 고가용성 문서를 참조하세요.

  • Apache Hive LLAP

    N 작업자 노드로 크기를 조정한 후, HDInsight는 다음 구성을 자동으로 설정하고 Hive를 다시 시작합니다.

    • 총 동시 발생 쿼리 수: hive.server2.tez.sessions.per.default.queue = min(N, 32)
    • Hive의 LLAP에서 사용되는 노드 수: num_llap_nodes = N
    • Hive LLAP daemon을 실행하는 노드 수: num_llap_nodes_for_llap_daemons = N

클러스터를 안전하게 축소하는 방법

실행 중인 작업으로 클러스터 규모 축소

규모 축소 작업 중에 실행 중인 작업이 실패하는 것을 방지하기 위해 다음 세 가지 작업을 시도할 수 있습니다.

  1. 클러스터를 축소하기 전에 작업이 완료될 때까지 기다립니다.
  2. 수동으로 작업을 종료합니다.
  3. 크기 조정 작업이 완료된 후 작업을 다시 전송합니다.

보류 중이거나 실행 중인 작업 목록을 보려면 YARN 리소스 관리자 UI를 사용하여 다음 단계를 수행할 수 있습니다.

  1. Azure Portal에서 디렉터리를 선택합니다. 클러스터가 새 포털 페이지에서 열립니다.

  2. 메인 보기에서 클러스터 대시보드>Ambari home으로 이동합니다. 클러스터 자격 증명을 입력합니다.

  3. Ambari UI에서 왼쪽 메뉴에 있는 서비스 목록에서 YARN를 선택합니다.

  4. YARN 페이지에서 빠른 링크를 선택하고 활성 헤드 노드 위로 마우스로 가져간 후 리소스 관리자 UI를 클릭합니다.

    Apache Ambari quick links Resource Manager UI.

https://<HDInsightClusterName>.azurehdinsight.net/yarnui/hn/cluster에서 리소스 관리자 UI에 직접 액세스할 수 있습니다.

현재 상태와 함께 작업 목록이 표시됩니다. 스크린샷에는 현재 실행 중인 하나의 작업이 있습니다.

Resource Manager UI applications.

실행 중인 해당 애플리케이션을 수동으로 종료하려면 SSH 셸에서 다음 명령을 실행합니다.

yarn application -kill <application_id>

예시:

yarn application -kill "application_1499348398273_0003"

안전 모드에서 중단

클러스터를 축소하는 경우 HDInsight는 Apache Ambari 관리 인터페이스를 사용하여 먼저 추가 작업자 노드의 서비스를 해제합니다. 노드가 HDFS 블록을 다른 온라인 작업자 노드에 복제합니다. 그 후에 HDInsight는 클러스터를 안전하게 확장합니다. HDFS는 크기 조정 작업을 수행하는 동안 안전 모드로 전환됩니다. 크기 조정이 완료되면 HDFS가 나오게 되어 있습니다. 그러나 일부 경우에는 복제 중인 파일 블록 때문에 크기 조정 작업을 수행하는 동안 HDFS는 안전 모드에서 중단됩니다.

기본적으로 HDFS는 사용할 수 있는 각 파일 블록의 복사본 수를 제어하는 dfs.replication1의 설정으로 구성됩니다. 파일 블록의 각 복사본은 클러스터의 다른 노드에 저장됩니다.

예상되는 블록 복사본 수를 사용할 수 없는 경우, HDFS는 safe 모드로 전환되고 Ambari에서 경고를 생성합니다. HDFS는 크기 조정 작업을 위해 안전 모드로 전환될 수도 있습니다. 필요한 수의 노드가 복제에 대해 검색되지 않는 경우 클러스터가 안전 모드에서 중단될 수 있습니다.

안전 모드가 켜지는 오류 예제

org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive/hive/819c215c-6d87-4311-97c8-4f0b9d2adcf0. Name node is in safe mode.
org.apache.http.conn.HttpHostConnectException: Connect to active-headnode-name.servername.internal.cloudapp.net:10001 [active-headnode-name.servername. internal.cloudapp.net/1.1.1.1] failed: Connection refused

클러스터 크기가 조정될 시간이 가까워질 때 /var/log/hadoop/hdfs/ 폴더에서 이름 노드 로그를 검토하여 안전 모드가 시작되었는지 확인할 수 있습니다. 로그 파일의 이름은 Hadoop-hdfs-namenode-<active-headnode-name>.*입니다.

근본 원인은 Hive가 쿼리를 실행하는 동안 HDFS에서 임시 파일을 사용하는 것입니다. HDFS가 안전 모드를 시작하면, Hive는 HDFS에 쓸 수 없으므로 쿼리를 실행할 수 없습니다. HDFS의 임시 파일은 개별 작업자 노드 VM에 탑재된 로컬 드라이브에 있습니다. 파일은 최소 3개의 복제본으로 다른 작업자 노드 간에 복제됩니다.

HDInsight가 안전 모드에서 중단되는 것을 방지하는 방법

다음과 같은 여러 가지 방법으로 HDInsight가 안전 모드를 유지하지 않도록 할 수 있습니다.

  • HDInsight를 축소하기 전에 모든 Hive 작업을 중지합니다. 또는 실행 중인 Hive 작업과 충돌하지 않도록 축소 프로세스를 예약합니다.
  • 축소하기 전에 HDFS에서 Hive의 스크래치 tmp 디렉터리 파일을 수동으로 정리합니다.
  • HDInsight를 최소 3개의 작업자 노드로만 축소합니다. 작업자 노드 1개만큼 줄이지는 마세요.
  • 필요한 경우 안전 모드를 종료하는 명령을 실행합니다.

다음 섹션에서는 이러한 옵션을 설명합니다.

모든 Hive 작업 중지

하나의 작업자 노드를 축소하기 전에 모든 Hive 작업을 중지합니다. 워크로드가 예약되면 Hive 작업이 완료된 후에 스케일 다운을 실행합니다.

크기를 조정하기 전에 Hive 작업을 중지하면 tmp 폴더 (있는 경우)의 스크래치 파일 수를 최소화 하는 데 도움이 됩니다.

Hive의 스크래치 파일을 수동으로 정리

Hive가 임시 파일을 남겨 두면 안전 모드를 피하기 위해 축소 전에 해당 파일을 수동으로 정리할 수 있습니다.

  1. hive.exec.scratchdir 구성 속성을 확인하여 Hive임시 파일에 사용 중인 위치를 확인하십시오. 이 매개 변수는 /etc/hive/conf/hive-site.xml 내에 설정됩니다.

    <property>
        <name>hive.exec.scratchdir</name>
        <value>hdfs://mycluster/tmp/hive</value>
    </property>
    
  2. Hive 서비스를 중지하고 모든 쿼리 및 작업이 완료되었는지 확인합니다.

  3. 위에서 찾은 스크래치 디렉터리의 내용을 나열하여 hdfs://mycluster/tmp/hive/ 파일이 포함되어 있는지 확인합니다.

    hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    

    다음은 파일이 있는 경우의 샘플 출력입니다.

    sshuser@scalin:~$ hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/_tmp_space.db
    -rw-r--r--   3 hive hdfs         27 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.info
    -rw-r--r--   3 hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.lck
    drwx------   - hive hdfs          0 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699
    -rw-r--r--   3 hive hdfs         26 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699/inuse.info
    
  4. 이러한 파일에 대해 Hive가 완료된 것이 확인되면 제거해도 됩니다. Yarn Resource Manager UI 페이지에서 확인하여 Hive에 실행 중인 쿼리가 없는지 확인합니다.

    HDFS에서 파일을 제거하는 명령줄 예제는 다음과 같습니다.

    hadoop fs -rm -r -skipTrash hdfs://mycluster/tmp/hive/
    

3개 이상의 작업자 노드로 HDInsight 확장

3개 이상의 작업자 노드로 축소하는 경우 클러스터가 안전 모드에서 중단되면 최소한 세 개의 작업자 노드로 유지합니다.

작업자 노드가 세 개인 경우 하나의 작업자 노드만으로 축소하는 것보다 비용이 많이 듭니다. 그러나 이 작업을 수행하면 클러스터가 안전 모드에서 멈추는 것을 방지할 수 있습니다.

HDInsight를 하나의 작업자 노드로 규모 축소

클러스터가 하나의 노드로 크기 조정되더라도 작업자 노드 0은 계속 유지됩니다. 작업자 노드 0은 서비스 해제될 수 없습니다.

안전 모드를 종료하는 명령 실행

마지막 옵션은 안전 모드 종료 명령을 실행하는 것입니다. 복제 중인 Hive 파일 때문에 HDFS가 안전 모드를 시작한 경우 다음 명령을 실행하여 안전 모드를 종료합니다.

hdfs dfsadmin -D 'fs.default.name=hdfs://mycluster/' -safemode leave

Apache HBase 클러스터 축소

지역 서버는 몇 분 안에 크기 조정 작업을 완료한 후 자동으로 균형을 맞춥니다. 지역 서버를 수동으로 조정하려면 다음 단계를 완료합니다.

  1. SSH를 사용하여 HDInsight 클러스터에 연결합니다. 자세한 내용은 HDInsight와 함께 SSH 사용을 참조하세요.

  2. HBase 셸을 시작합니다.

    hbase shell
    
  3. 다음 명령을 사용하여 지역 서버의 부하를 수동으로 분산합니다.

    balancer
    

다음 단계

HDInsight 클러스터 크기 조정에 대한 자세한 내용은 다음을 참조하세요.