초기화 작업

Dataproc 클러스터를 만들 때 Dataproc이 클러스터가 설정된 직후 Dataproc 클러스터의 모든 노드에서 실행하는 실행 파일 또는 스크립트에서 초기화 작업을 지정할 수 있습니다. 초기화 작업은 종종 Python 패키지 설치와 같은 작업 종속 항목을 설정하므로 작업이 실행될 때 종속 항목을 설치하지 않고도 작업을 클러스터에 제출할 수 있습니다.

자주 사용되는 다른 샘플 초기화 작업 스크립트는 다음 위치에서 확인할 수 있습니다.

중요 고려사항 및 가이드라인

  • gs://goog-dataproc-initialization-actions-<REGION>> 공개 버킷에 있는 초기화 작업을 참조하는 프로덕션 클러스터는 만들지 마세요. 이러한 스크립트는 참조 구현으로 제공되며, 지속적인 GitHub 저장소 변경 사항과 동기화됩니다. 이때 공개 버킷에 새 버전의 초기화 작업이 있으면 클러스터 생성이 중단될 수 있습니다. 대신 다음 예시와 같이 공개 버킷의 초기화 작업을 버킷으로 복사합니다.
    REGION=region
    
    gsutil cp gs://goog-dataproc-initialization-actions-${REGION}/tez/tez.sh gs://my-bucket/
    
    
    그런 다음 복사본을 참고하여 클러스터를 만듭니다.
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --initialization-actions=gs://my-bucket/tez.sh \
        ... other flags ...
    
    초기화 작업 복사본을 공개 버킷 또는 GitHub 저장소에서 발생한 초기화 작업의 변경사항을 동기화할 시점을 결정할 수 있습니다.
  • 초기화 작업은 클러스터를 만드는 동안에 각 노드에서 실행됩니다. 또한 클러스터를 확장 또는 자동 확장할 때 새로 추가된 각 노드에서도 실행됩니다.
  • 초기화 작업은 root 사용자로 실행됩니다. 즉, sudo를 사용할 필요가 **없습니다**.
  • 초기화 작업에는 절대 경로를 사용해야 합니다.
  • 스크립트 해석 방법을 나타내기 위해 초기화 작업은 shebang 줄을 사용해야 합니다(예: #!/bin/bash 또는 #!/usr/bin/python).
  • 초기화 작업이 0이 아닌 종료 코드로 종료되는 경우 클러스터 만들기 작업이 'ERROR' 상태를 보고합니다. 초기화 작업을 디버깅하려면 클러스터의 VM 인스턴스에 SSH로 연결하여 로그를 검토합니다. 초기화 작업 문제를 수정한 후 클러스터를 삭제한 다음 다시 만들 수 있습니다.
  • 내부 IP 주소만 사용하여 Cloud Dataproc 클러스터를 만드는 경우, Cloud NAT 또는 Cloud VPN를 통해 트래픽을 보내도록 경로를 구성하지 않으면 초기화 작업에서 인터넷을 통한 github.com 액세스 시도가 실패합니다. 인터넷에 액세스하지 않고도 비공개 Google 액세스를 사용 설정할 수 있고 Cloud Storage에 작업 종속 항목을 배치할 수 있습니다. 클러스터 노드는 인터넷 IP를 통해 Cloud Storage에서 종속 항목을 다운로드할 수 있습니다.
  • 초기화 작업 대신 Dataproc 커스텀 이미지를 사용하여 작업 종속 항목을 설정할 수 있습니다.
  • 초기화 처리:
    • HDFS가 안전 모드를 종료하고 HDFS DataNode가 2개 이상 조인될 때까지 마스터 노드 초기화 작업은 시작되지 않습니다. 이를 통해 초기화 작업을 마스터에서 실행하여 HDFS에 파일을 쓸 수 있습니다.
    • dataproc:dataproc.worker.custom.init.actions.mode=RUN_BEFORE_SERVICES 클러스터 속성이 설정되면 각 작업자가 HDFS DataNode 데몬을 시작하기 전에 초기화 작업을 실행합니다. 마스터 초기화 작업은 두 개 이상의 작업자가 초기화 작업을 완료할 때까지 시작하지 않으며, 이 때문에 클러스터 생성 시간이 늘어날 가능성이 높습니다.
    • 각 클러스터 노드에서 여러 초기화 작업은 cluster create 명령어에 지정된 순서대로 실행됩니다. 그러나 별도의 노드에서 초기화 작업이 독립적으로 처리됩니다. 작업자 초기화 작업은 마스터 초기화 작업 전, 후, 또는 동시에 실행될 수 있습니다.
    • 클러스터를 만들 때 사용자가 선택한 선택적 구성요소는 클러스터에서 초기화 작업이 실행되기 전에 클러스터에 설치 및 활성화됩니다.
    • 권장사항:
      • 메타데이터를 사용하여 노드에서 초기화 작업을 조건부로 실행하는 노드의 역할을 결정하세요(클러스터 메타데이터 사용 참조).
      • 안정성을 위해 초기화 작업 사본을 Cloud Storage 버킷에 복사세요(초기화 작업 사용 방법 참조).
      • 초기화 작업을 안정화할 수 있도록 인터넷에서 다운로드할 때 재시도를 추가하세요.

초기화 작업 사용

클러스터 초기화 작업은 클러스터를 만드는 방법에 관계없이 다음을 통해 지정할 수 있습니다.

gcloud 명령

gcloud dataproc clusters create 명령어를 사용하여 클러스터를 만드는 경우 --initialization-actions 플래그를 사용하여 초기화 실행 파일 또는 스크립트의 하나 이상의 쉼표로 구분된 Cloud Storage 위치(URI)를 지정합니다. 참고: 'gs://bucket/my//object//name'과 같이 Cloud Storage 위치에서 처음 'gs://' 다음에 '/'가 여러 번 연속으로 나오는 경우는 지원되지 않습니다.

이 플래그를 사용하는 구문은 아래에 나와 있으며 gcloud dataproc clusters create --help를 실행하여 명령줄에서 확인할 수 있습니다.

gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --initialization-actions=Cloud Storage URI(s) (gs://bucket/...) \
    --initialization-action-timeout=timeout-value (default=10m) \
    ... other flags ...
참고:
  • --initialization-action-timeout 플래그를 사용하여 초기화 작업의 제한 시간을 지정합니다. 기본 제한시간은 10분입니다. 초기화 실행 파일 또는 스크립트가 제한 시간이 끝날 때까지 완료되지 않으면 Dataproc이 초기화 작업을 취소합니다.
  • dataproc:dataproc.worker.custom.init.actions.mode 클러스터 속성을 사용하여 노드 관리자 및 데이터 노드 데몬이 시작되기 전에 기본 작업자에서 초기화 작업을 실행합니다.

REST API

clusters.create API 요청의 일부로 ClusterConfig.initializationActions 배열에서 하나 이상의 스크립트 또는 실행 파일을 지정합니다.

예시

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "default",
      "zoneUri": "us-central1-b"
    },
    "masterConfig": {
      "numInstances": 1,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "workerConfig": {
      "numInstances": 2,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "initializationActions": [
      {
        "executableFile": "gs://cloud-example-bucket/my-init-action.sh"
      }
    ]
  }
}

콘솔

  • Dataproc 클러스터 만들기 페이지를 열고 클러스터 맞춤설정 패널을 선택합니다.
  • 초기화 작업 섹션에서 실행 파일 필드에 각 초기화 작업의 Cloud Storage 버킷 위치를 입력합니다. 둘러보기를 클릭하여 Cloud Console Cloud Storage 브라우저 페이지를 열고 스크립트 또는 실행 파일을 선택합니다. 초기화 작업 추가를 클릭하여 새 파일을 각각 추가합니다.
  • 초기화 작업에 인수 전달

    Dataproc은 클러스터에서 실행되는 인스턴스의 특수 메타데이터 값을 설정합니다. 초기화 작업에 인수를 전달하기 위한 방법으로 자체적인 커스텀 메타데이터를 설정할 수 있습니다.

    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --initialization-actions=Cloud Storage URI(s) (gs://bucket/...) \
        --metadata=name1=value1,name2=value2... \
        ... other flags ...
    

    메타데이터 값은 초기화 작업 내에서 다음과 같이 읽을 수 있습니다.

    var1=$(/usr/share/google/get_metadata_value attributes/name1)
    

    노드 선택

    초기화 작업을 마스터 노드 또는 작업자 노드로 제한하려는 경우 간단한 노드-선택 로직을 실행 파일 또는 스크립트에 추가할 수 있습니다.

    ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
    if [[ "${ROLE}" == 'Master' ]]; then
      ... master specific actions ...
    else
      ... worker specific actions ...
    fi
    

    바이너리 준비

    일반적인 클러스터 초기화 시나리오는 작업이 제출될 때마다 바이너리를 준비할 필요가 없도록 클러스터에 작업 바이너리를 준비하는 것입니다. 예를 들어 다음 초기화 스크립트가 Cloud Storage 버킷 위치인 gs://my-bucket/download-job-jar.sh에 저장된다고 가정해 보겠습니다.

    #!/bin/bash
    ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
    if [[ "${ROLE}" == 'Master' ]]; then
      gsutil cp gs://my-bucket/jobs/sessionalize-logs-1.0.jar home/username
    fi
    

    이 스크립트의 위치는 gcloud dataproc clusters create 명령어에 전달할 수 있습니다.

    gcloud dataproc clusters create my-dataproc-cluster \
        --region=${REGION} \
        --initialization-actions=gs://my-bucket/download-job-jar.sh
    

    Dataproc은 모든 노드에서 이 스크립트를 실행하고 스크립트의 노드-선택 논리의 결과로 jar을 마스터 노드에 다운로드합니다. 그러면 제출된 작업에서 다음과 같이 사전 준비된 jar을 사용할 수 있습니다.

    gcloud dataproc jobs submit hadoop \
        --cluster=my-dataproc-cluster \
        --region=${REGION} \
        --jar=file:///home/username/sessionalize-logs-1.0.jar
    

    초기화 작업 샘플

    자주 사용되는 다른 샘플 초기화 작업 스크립트는 gs://goog-dataproc-initialization-actions-<REGION>, 리전별 공개 Cloud Storage 버킷, GitHub 저장소에 위치합니다. 스크립트를 제공하려면 CONTRIBUTING.md 문서를 검토한 후 pull 요청을 제출합니다.

    로깅

    각 초기화 작업의 실행 출력은 /var/log/dataproc-initialization-script-X.log에 인스턴스별로 로깅됩니다. 여기서 X는 각 연속 초기화 작업 스크립트의 0부터 시작하는 색인입니다. 예를 들어 클러스터에 2개의 초기화 작업이 있는 경우 출력은 /var/log/dataproc-initialization-script-0.log/var/log/dataproc-initialization-script-1.log에 로깅됩니다.

    다음 단계

    GitHiub 초기화 작업 살펴보기