Dataproc 커스텀 이미지 만들기

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

참고

  • 이 문서의 안내는 Linux 운영체제에만 해당합니다. 다른 운영체제는 향후 출시되는 Dataproc 버전에서 지원될 예정입니다.
  • 커스텀 이미지 빌드는 Dataproc 기본 이미지에서 시작해야 합니다(현재 Debian 및 Ubuntu 기본 이미지가 지원됨).

시작하기 전에

프로젝트 설정

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

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

    프로젝트 선택기 페이지로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Dataproc API, Compute Engine API, and Cloud Storage API를 사용 설정합니다.

    API 사용 설정

  5. Cloud SDK 설치 및 초기화
  6. Python 2.7+를 설치합니다.
  7. 커스텀 패키지 또는 업데이트 구성을 설치하는 맞춤설정 스크립트를 준비합니다. 예를 들면 다음과 같습니다.
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

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

  1. Cloud Console에서 Cloud Storage 브라우저 페이지로 이동합니다.

    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(기본값)를 사용하여 Compute Engine에서 다단계 워크플로를 실행합니다.

코드 실행

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

python generate_custom_image.py \
    --image-name custom_image_name \
    [--family custom_image_family_name] \
    --dataproc-version Dataproc version (example: "1.5.10-debian10") \
    --customization-script local path to your custom script \
    --zone Compute Engine zone to use for the location of the temporary VM \
    --gcs-bucket URI (gs://bucket-name) of a Cloud Storage bucket in your project \
    [--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' 형식으로 버전을 지정합니다(예: '1.5.10-debian10', '1.5.10-ubuntu18', '1.5.0-RC10-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 플래그를 사용하여 이 단계를 사용 중지하면 커스텀 이미지 빌드 프로세스가 빨라지지만 사용하지 않는 것이 좋습니다.

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

gcloud 명령어가 성공하면 커스텀 이미지의 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 이미지에 저장되어 생성일로부터 60일 동안 Dataproc 클러스터를 만드는 데 사용할 수 있습니다. 60일 만료일이 지난 후 커스텀 이미지를 사용하려면 만료된 커스텀 이미지로 클러스터를 만드는 방법을 참조하세요.

커스텀 이미지 URI

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

  1. 전체 URI:
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/custom-image-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
  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
...

Console

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

커스텀 이미지를 사용하는 클러스터 만들기

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

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/global/clusters/
{
  "clusterName": "custom-name",
  "config": {
    "masterConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    },
    "workerConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    }
  }
}
  

Console

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

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

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

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

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

    gcloud dataproc clusters create cluster-name \
        --image=custom-image-name \
        --region=region \
        ... other flags ...
    

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

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

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

    gcloud dataproc clusters create cluster-name \
        --image=custom-image-name \
        --properties dataproc:dataproc.custom.image.expiration.token=token value \
        --region=region \
        ... other flags ...
    

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