Dataproc 커스텀 이미지 만들기

Dataproc 클러스터는 사용자의 사전 설치된 패키지가 포함된 커스텀 이미지를 통해 프로비저닝될 수 있습니다. 다음 단계에서는 커스텀 이미지를 만들고 Dataproc 클러스터에 설치하는 방법을 설명합니다.

참고:

  • 이 문서의 안내는 Linux 운영체제에만 해당합니다. 다른 운영체제는 향후 출시되는 Dataproc 버전에서 지원될 예정입니다.
  • 커스텀 이미지 빌드는 Dataproc 기본 이미지에서 시작해야 합니다(Debian, Rocky Linux, Ubuntu 기본 이미지 지원).
  • 선택적 구성요소 사용: 기본적으로 커스텀 이미지는 기본 이미지에서 모든 Dataproc 선택적 구성요소(OS 패키지 및 구성)를 상속합니다. 기본 OS 패키지 버전 및 구성을 맞춤설정할 수 있지만, 클러스터를 만들 때 선택적 구성요소 이름을 지정해야 합니다(예: gcloud dataproc clusters create --optional-components=COMPONENT_NAME 명령어 실행 — 선택적 구성요소 추가 참조). 클러스터를 만들 때 구성요소 이름을 지정하지 않으면 구성요소(커스텀 OS 패키지 및 구성 포함)가 삭제됩니다.

시작하기 전에

프로젝트 설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API Dataproc API, Compute Engine API, and Cloud Storage 사용 설정

    API 사용 설정

  5. Google Cloud CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. API Dataproc API, Compute Engine API, and Cloud Storage 사용 설정

    API 사용 설정

  10. Google Cloud CLI를 설치합니다.
  11. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  12. Python 3.11+를 설치합니다.
  13. 커스텀 패키지 또는 업데이트 구성을 설치하는 맞춤설정 스크립트를 준비합니다. 예를 들면 다음과 같습니다.
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

프로젝트에 Cloud Storage 버킷 만들기

  1. Google Cloud Console에서 Cloud Storage 버킷 페이지로 이동합니다.

    버킷 페이지로 이동

  2. 버킷 만들기를 클릭합니다.
  3. 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 단계로 이동하려면 계속을 클릭합니다.
    • 버킷 이름 지정에서 버킷 이름 지정 요구사항을 충족하는 이름을 입력합니다.
    • 데이터를 저장할 위치 선택에서 다음을 수행합니다.
      • 위치 유형 옵션을 선택합니다.
      • 위치 옵션을 선택합니다.
    • 데이터의 기본 스토리지 클래스 선택에서 스토리지 클래스를 선택합니다.
    • 객체 액세스를 제어하는 방식 선택에서 액세스 제어 옵션을 선택합니다.
    • 고급 설정(선택사항)에서 암호화 방법, 보관 정책 또는 버킷 라벨을 지정합니다.
  4. 만들기를 클릭합니다.

커스텀 이미지 생성

Python 프로그램인 generate_custom_image.py를 사용하여 Dataproc 커스텀 이미지를 만듭니다.

작동 방식

generate_custom_image.py 프로그램은 지정된 Dataproc 기본 이미지로 임시 Compute Engine VM 인스턴스를 시작한 다음 VM 인스턴스 내에서 맞춤설정 스크립트를 실행하여 커스텀 패키지를 설치하거나 구성을 업데이트합니다. 맞춤설정 스크립트가 완료된 후에는 VM 인스턴스를 종료하고 VM 인스턴스의 디스크에서 Dataproc 커스텀 이미지를 만듭니다. 커스텀 이미지가 생성되면 임시 VM이 삭제됩니다. 커스텀 이미지가 저장되며 Dataproc 클러스터를 만드는 데 사용할 수 있습니다.

generate_custom_image.py 프로그램은 gcloud CLI를 사용하여 Compute Engine에서 다단계 워크플로를 실행합니다.

코드 실행

GitHub(Dataproc 커스텀 이미지)에서 파일을 포크하거나 클론합니다. 그런 다음 generate_custom_image.py 프로그램을 실행하여 Dataproc이 커스텀 이미지를 생성하고 저장하도록 합니다.

python3 generate_custom_image.py \
    --image-name=CUSTOM_IMAGE_NAME \
    [--family=CUSTOM_IMAGE_FAMILY_NAME] \
    --dataproc-version=IMAGE_VERSION \
    --customization-script=LOCAL_PATH \
    --zone=ZONE \
    --gcs-bucket=gs://BUCKET_NAME \
    [--no-smoke-test]

필수 플래그

  • --image-name: 커스텀 이미지의 출력 이름입니다. 참고: 이미지 이름은 [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) 정규식과 일치해야 합니다. 예를 들어 밑줄이나 공백은 없어야 하며 64자 미만이어야 합니다.
  • --dataproc-version: 커스텀 이미지에서 사용할 Dataproc 이미지 버전입니다. 'x.y.z-os' 또는 'x.y.z-rc-os' 형식으로 버전을 지정합니다(예: '2.0.69-debian10').
  • --customization-script: 맞춤 패키지를 설치하거나 다른 맞춤설정을 수행하기 위해 도구가 실행할 스크립트의 로컬 경로입니다. 이 스크립트는 커스텀 이미지를 만드는 데 사용되는 임시 VM에서만 실행됩니다. 커스텀 이미지로 클러스터를 만들 때 수행할 다른 초기화 작업에는 다른 초기화 스크립트를 지정할 수 있습니다.
  • --zone: generate_custom_image.py 커스텀 이미지를 만드는 데 사용할 임시 VM을 만드는 Compute Engine 영역입니다.
  • --gcs-bucket: gs://BUCKET_NAME 형식의 URI로, 프로젝트에 Cloud Storage 버킷 만들기에서 생성한 Cloud Storage 버킷을 가리킵니다. generate_custom_image.py은 이 버킷에 로그 파일을 작성합니다.

선택적 플래그

  • --family: 이미지의 이미지 계열입니다. 이미지 계열은 유사한 이미지를 함께 그룹화하는 데 사용되며, 클러스터를 생성할 때 해당 계열의 최신 이미지에 대한 포인터로 사용할 수 있습니다. 예를 들면 'custom-1-5-debian10'입니다.
  • --no-smoke-test: 새로 빌드한 커스텀 이미지의 스모크 테스트를 사용 중지하는 선택적 플래그입니다. 스모크 테스트는 새로 빌드된 이미지로 Dataproc 테스트 클러스터를 만들고 작은 작업을 실행한 다음 테스트가 끝날 때 클러스터를 삭제합니다. 스모크 테스트는 기본적으로 실행되어 새로 빌드된 커스텀 이미지가 기능적인 Dataproc 클러스터를 만들 수 있는지 확인합니다. --no-smoke-test 플래그를 사용하여 이 단계를 사용 중지하면 커스텀 이미지 빌드 프로세스가 빨라지지만 사용하지 않는 것이 좋습니다.
  • --subnet: 커스텀 Dataproc 이미지를 빌드하는 VM을 만들기 위해 사용할 서브네트워크입니다. 프로젝트가 공유 VPC의 일부인 경우 전체 서브네트워크 URL을 projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET 형식으로 지정해야 합니다.

추가 선택적 플래그 목록은 GitHub의 선택적 인수를 참조하세요.

generate_custom_image.py가 성공하면 커스텀 이미지의 imageURI가 터미널 창 출력에 나열됩니다(전체 imageUri는 아래에 굵게 표시됨).

...
managedCluster:
    clusterName: verify-image-20180614213641-8308a4cd
    config:
      gceClusterConfig:
        zoneUri: ZONE
      masterConfig:
        imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
INFO:__main__:

#####################################################################
  WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
           WILL EXPIRE ON 2018-07-14 21:35:44.133000.
#####################################################################

고급 사용자를 위한 커스텀 이미지 버전 라벨

Dataproc의 표준 커스텀 이미지 도구를 사용할 때 이 도구는 생성된 커스텀 이미지에 필요한 goog-dataproc-version 라벨을 자동으로 설정합니다. 이 라벨은 이미지에서 소프트웨어를 관리하기 위해 Dataproc에 사용되는 특성 기능 및 프로토콜을 반영합니다.

자체 프로세스에 따라 커스텀 Dataproc 이미지를 만드는 고급 사용자는 다음과 같이 자신의 커스텀 이미지에 수동으로 라벨을 추가해야 합니다.

  1. 커스텀 이미지 만들기를 위해 사용되는 기본 Dataproc 이미지에서 goog-dataproc-version 라벨을 추출합니다.

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. 커스텀 이미지에 라벨을 설정합니다.

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

커스텀 이미지 사용

Dataproc 클러스터를 만들 때 커스텀 이미지를 지정합니다. 커스텀 이미지는 Cloud Compute 이미지에 저장되어 생성일로부터 365일 동안 Dataproc 클러스터를 만드는 데 사용할 수 있습니다. 365일 만료일이 지난 후 커스텀 이미지를 사용하려면 만료된 커스텀 이미지로 클러스터를 만드는 방법을 참조하세요.

커스텀 이미지 URI

커스텀 이미지의 imageUri를 클러스터 만들기 작업에 전달합니다. 이 URI는 다음 세 가지 방법 중 하나로 지정할 수 있습니다.

  1. 전체 URI:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. 부분 URI: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. 닉네임: CUSTOM_IMAGE_NAME

커스텀 이미지는 계열 URI에서 지정할 수 있으며 항상 이미지 계열에서 가장 최근의 이미지를 선택합니다.

  1. 전체 URI:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. 부분 URI: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

커스텀 이미지 URI를 찾는 방법

gcloud 명령

다음 gcloud 명령어를 실행하여 커스텀 이미지의 이름을 나열합니다.

gcloud compute images list

커스텀 이미지의 URI(selfLink)를 나열하려면 커스텀 이미지의 이름을 다음 gcloud 명령어에 전달합니다.

gcloud compute images describe custom-image-name
...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

콘솔

  1. Google Cloud 콘솔에서 Compute Engine→이미지 페이지를 열고 이미지 이름을 클릭합니다. 필터 이미지 텍스트 상자에 쿼리를 삽입하여 표시되는 이미지의 수를 제한할 수 있습니다.
  2. 이미지 세부정보 페이지가 열립니다. 동등한 REST를 클릭합니다.
  3. REST 응답은 이미지 URI인 selfLink를 포함하여 이미지에 대한 추가 정보를 나열합니다.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

커스텀 이미지로 클러스터 만들기

gcloud 명령줄 도구, Dataproc API, Google Cloud 콘솔에서 커스텀 이미지를 사용하는 마스터 및 워커 노드로 클러스터를 만들 수 있습니다.

gcloud 명령

--image 플래그와 함께 dataproc clusters create 명령어를 사용하여 커스텀 이미지로 Dataproc 클러스터를 만들 수 있습니다. 예:
gcloud dataproc clusters create CLUSTER-NAME \
    --image=CUSTOM_IMAGE_URI \
    --region=REGION \
    ... other flags ...

REST API

cluster.create API 요청에 포함된 masterConfig, workerConfig, secondaryWorkerConfig(해당되는 경우) 객체의 InstanceGroupConfig.imageUri 필드에 커스텀 이미지 URI를 지정하여 커스텀 이미지로 클러스터를 만들 수 있습니다.

예: 커스텀 이미지로 표준 Dataproc 클러스터(마스터 1개, 워커 노드 2개)를 만드는 REST 요청입니다.

POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "masterConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    },
    "workerConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    }
  }
}
  

콘솔

  1. Google Cloud 콘솔에서 Dataproc 클러스터 만들기 페이지를 엽니다. 클러스터 설정 패널이 선택되었습니다.
  2. 버전 섹션에서 변경을 클릭합니다. 커스텀 이미지 탭을 선택하고, Dataproc 클러스터에 사용할 커스텀 이미지를 선택한 후 선택을 클릭합니다.

클러스터 생성 양식을 제출하면 선택한 커스텀 이미지를 사용하여 클러스터의 VM이 프로비저닝됩니다.

커스텀 이미지로 Dataproc 클러스터 속성 재정의

커스텀 이미지를 사용하면 클러스터를 만드는 중에 설정된 모든 클러스터 속성을 덮어쓸 수 있습니다. 사용자가 커스텀 이미지로 클러스터를 만들지만 커스텀 이미지로 설정한 것과 다른 클러스터 속성을 설정하면 커스텀 이미지 클러스터 속성 설정이 우선 적용됩니다.

커스텀 이미지로 클러스터 속성을 설정하려면 다음 안내를 따르세요.

  1. 커스텀 이미지 맞춤설정 스크립트에서 /etc/google-dataprocdataproc.custom.properties 파일을 만든 다음 파일에 클러스터 속성 값을 설정합니다.
    • dataproc.custom.properties 파일 콘텐츠를 샘플링합니다.
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

맞춤설정 스크립트 파일 생성 스니펫을 샘플링하여 클러스터 속성 두 개를 재정의합니다.

     cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
     dataproc.conscrypt.provider.enable=true
     dataproc.logging.stackdriver.enable=false
     EOF

만료된 커스텀 이미지를 사용하여 클러스터를 만드는 방법

기본적으로 커스텀 이미지는 이미지 생성일로부터 365일 후에 만료됩니다. 다음 단계를 완료하여 만료된 커스텀 이미지를 사용하는 클러스터를 만들 수 있습니다.

  1. 만료된 커스텀 이미지 또는 10일 이내에 만료될 커스텀 이미지로 Dataproc 클러스터를 생성합니다.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    

  2. gcloud CLI가 클러스터 dataproc:dataproc.custom.image.expiration.token 속성 이름 및 토큰 값을 포함하는 오류 메시지를 실행합니다.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    'token value' 문자열을 클립보드에 복사합니다.

  3. gcloud CLI를 사용하여 Dataproc 클러스터를 다시 만들고 위에서 복사한 '토큰 값'을 클러스터 속성으로 추가합니다.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \
        --region=REGION \
        ... other flags ...
    

커스텀 이미지로 클러스터 만들기가 성공합니다.