Dataproc Python 환경 구성

Dataproc의 PySpark 작업은 클러스터에서 Python 인터프리터에 의해 실행됩니다. 작업 코드는 런타임 시 Python 인터프리터의 버전 및 종속 항목과 호환되어야 합니다.

인터프리터 버전 및 모듈 확인

다음 check_python_env.py 샘플 프로그램은 작업을 실행하는 Linux 사용자, Python 인터프리터, 사용 가능한 모듈을 확인합니다.

import getpass
import sys
import imp

print('This job is running as "{}".'.format(getpass.getuser()))
print(sys.executable, sys.version_info)
for package in sys.argv[1:]:
  print(imp.find_module(package))

프로그램 실행

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    -- pandas scipy

샘플 출력

This job is running as "root".
('/usr/bin/python', sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0))
(None, '/usr/local/lib/python2.7/dist-packages/pandas', ('', '', 5))
(None, '/usr/local/lib/python2.7/dist-packages/scipy', ('', '', 5))

Dataproc 이미지 Python 환경

다음 섹션에서는 다양한 Dataproc 이미지 버전 클러스터의 Python 환경에 대해 설명합니다.

Dataproc 이미지 버전 1.5

Miniconda3는 Dataproc 1.5 클러스터에 설치됩니다. 기본 인터프리터는 각각 /opt/conda/miniconda3/bin/python3.7의 VM 인스턴스에 있는 Python 3.7입니다. Python 2.7은 /usr/bin/python2.7에서 사용할 수도 있습니다.

base 환경에 condapip 패키지를 설치하거나, conda 관련 클러스터 속성을 사용하여 클러스터에 자체 conda 환경을 설정할 수 있습니다.

1.5 클러스터에서 Python 2.7을 기본 인터프리터로 사용하려면 클러스터를 만들 때 Anaconda 선택적 구성요소를 사용하지 마세요. 대신 Conda 초기화 작업을 사용하여 Miniconda2를 설치하고 Conda 관련 클러스터 속성을 사용하여 base 환경에 condapip 패키지를 설치하거나 클러스터에 자체 conda 환경을 설정합니다.

예시

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.5 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=2' \
    --metadata='MINICONDA_VERSION=latest' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh \
    --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'

Dataproc 이미지 버전 2.x

conda는 Dataproc 2.x 클러스터에 설치됩니다. 기본 Python3 인터프리터는 /opt/conda/default/bin 아래의 VM 인스턴스에 있습니다. 다음 페이지에서는 Dataproc 이미지 버전에 포함된 Python 버전을 보여줍니다.

OS의 기본값이 아닌 Python 인터프리터는 /usr/bin/ 아래에 제공됩니다.

base 환경에 condapip 패키지를 설치하거나, conda 관련 클러스터 속성을 사용하여 클러스터에 자체 conda 환경을 설정할 수 있습니다.

예시

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=2.0 \
    --region=${REGION} \
    --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'

참고: Anaconda는 Dataproc 2.0 클러스터에서 사용할 수 없습니다.

패키지 다운로드 문제 방지

Dataproc 클러스터 노드는 맞춤 condapip 패키지를 설치할 때 외부 공개 Python 저장소에서 패키지를 다운로드합니다 (conda 관련 클러스터 속성 참고). 공개 Python 저장소를 사용할 수 없어 클러스터 생성에 실패하지 않도록 하려면 Dataproc 맞춤 이미지를 만들거나 종속 항목을 Cloud Storage 버킷에 업로드하는 것이 좋습니다 (내부 IP 전용 클러스터로 종속 항목 다운로드 참고).

작업의 Python 인터프리터 선택

여러 Python 인터프리터가 클러스터에 설치되어 있으면 시스템이 /etc/profile.d/effective-python.sh를 실행합니다. 이는 PYSPARK_PYTHON 환경 변수를 내보내서 PySpark 작업에 대한 기본 Python 인터프리터를 선택합니다. PySpark 작업에 기본값이 아닌 Python 인터프리터가 필요한 경우 클러스터에 작업을 제출할 때 spark.pyspark.pythonspark.pyspark.driver.python 속성을 필요한 Python 버전 번호(예: 'python2.7' 또는 'python3.6')로 설정합니다.

예시

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    --properties="spark.pyspark.python=python2.7,spark.pyspark.driver.python=python2.7"

sudo를 사용한 Python

SSH를 사용하여 Miniconda 또는 Anaconda가 설치된 클러스터 노드에 연결하는 경우, sudo python --version을 실행하면 표시된 Python 버전이 python --version에 표시된 버전과 다를 수 있습니다. sudo는 기본 시스템 Python /usr/bin/python을 사용하고, /etc/profile.d/effective-python.sh를 실행하여 Python 환경을 초기화하지 않으므로 이 버전 차이가 발생할 수 있습니다. sudo 사용 시 일관성 있는 환경을 제공하려면 /etc/profile.d/effective-python.sh에 설정된 Python 경로를 찾은 다음 env 명령어를 실행하여 PATH를 이 Python 경로에 설정합니다. 다음은 1.5 클러스터의 예시입니다.

sudo env PATH=/opt/conda/default/bin:${PATH} python --version

conda 관련 클러스터 속성을 사용하여 클러스터를 만드는 동안 conda 환경을 맞춤설정할 수 있습니다.

Dataproc 클러스터를 만들 때 conda 환경을 맞춤설정할 수 있는 상호 배타적인 두 가지 방법이 있습니다.

  1. dataproc:conda.env.config.uri 클러스터 속성을 사용하여 클러스터에 새 conda 환경을 만들고 활성화합니다. 또는

  2. dataproc:conda.packagesdataproc:pip.packages 클러스터 속성을 사용하여 각각 condapip 패키지를 클러스터의 conda base 환경에 추가합니다.

  • dataproc:conda.env.config.uri: Cloud Storage에 있는 conda 환경 YAML 구성 파일의 절대 경로입니다. 이 파일은 클러스터에 새 conda 환경을 만들고 활성화하는 데 사용됩니다.

    예시:

    1. conda environment.yaml 구성 파일을 가져오거나 만듭니다. 다음 명령어를 사용하여 수동으로 파일을 생성하거나, 기존 파일을 사용하거나, environment.yaml 파일에 기존 conda 환경 내보내기할 수 있습니다.

      conda env export --name=env-name > environment.yaml
      

    2. 구성 파일을 Cloud Storage 버킷에 복사합니다.

      gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
      

    3. 클러스터를 만들고 Cloud Storage의 환경 구성 파일을 가리킵니다.

      REGION=region
      gcloud dataproc clusters create cluster-name \
          --region=${REGION} \
          --properties='dataproc:conda.env.config.uri=gs://bucket-name/environment.yaml' \
          ... other flags ...
      

  • dataproc:conda.packages: 기본 환경에 설치될 특정 버전의 conda 패키지 목록으로 pkg1==v1,pkg2==v2... 형식입니다. conda가 기본 환경의 기존 패키지와 충돌하는 문제를 해결하지 못하면 충돌하는 패키지는 설치되지 않습니다.

    참고:

    • dataproc:conda.packagesdataproc:pip.packages 클러스터 속성은 dataproc:conda.env.config.uri 클러스터 속성과 함께 사용할 수 없습니다.

    • 여러 패키지를 쉼표로 구분하여 지정할 때는 대체 구분 기호 문자를 지정해야 합니다(클러스터 속성 형식 참조). 다음 예시에서는 쉼표로 구분된 여러 패키지 이름을 dataproc:conda.packages 속성에 전달하는 구분 기호 문자로 '#'를 지정합니다.

    예시:

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --properties='^#^dataproc:conda.packages=pytorch==1.7.1,coverage==5.5' \
    ... other flags ...

  • dataproc:pip.packages: 기본 환경에 설치될 특정 버전의 pip 패키지 목록으로 pkg1==v1,pkg2==v2... 형식입니다. pip는 필요한 경우에만 기존 종속 항목을 업그레이드합니다. 충돌로 인해 환경이 일관되지 않을 수 있습니다.

    참고:

    • dataproc:pip.packagesdataproc:conda.packages 클러스터 속성은 dataproc:conda.env.config.uri 클러스터 속성과 함께 사용할 수 없습니다.

    • 여러 패키지를 쉼표로 구분하여 지정할 때는 대체 구분 기호 문자를 지정해야 합니다(클러스터 속성 형식 참조). 다음 예시에서는 쉼표로 구분된 여러 패키지 이름을 dataproc:pip.packages 속성에 전달하는 구분 기호 문자로 '#'를 지정합니다.

    예시:

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...
  • 클러스터를 만들 때 dataproc:conda.packagesdataproc:pip.packages를 모두 사용할 수 있습니다.

    예시:

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --image-version=1.5 \
    --metadata='MINICONDA_VARIANT=2' \
    --metadata='MINICONDA_VERSION=latest' \
    --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...