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
환경에 conda
및 pip
패키지를 설치하거나, conda 관련 클러스터 속성을 사용하여 클러스터에 자체 conda
환경을 설정할 수 있습니다.
1.5 클러스터에서 Python 2.7을 기본 인터프리터로 사용하려면 클러스터를 만들 때 Anaconda 선택적 구성요소를 사용하지 마세요. 대신 Conda 초기화 작업을 사용하여 Miniconda2를 설치하고 Conda 관련 클러스터 속성을 사용하여 base
환경에 conda
및 pip
패키지를 설치하거나 클러스터에 자체 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
환경에 conda
및 pip
패키지를 설치하거나, 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 클러스터에서 사용할 수 없습니다.
작업의 Python 인터프리터 선택
여러 Python 인터프리터가 클러스터에 설치되어 있으면 시스템이 /etc/profile.d/effective-python.sh
를 실행합니다. 이는 PYSPARK_PYTHON
환경 변수를 내보내서 PySpark 작업에 대한 기본 Python 인터프리터를 선택합니다. PySpark 작업에 기본값이 아닌 Python 인터프리터가 필요한 경우 클러스터에 작업을 제출할 때 spark.pyspark.python
및 spark.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 관련 클러스터 속성을 사용하여 클러스터를 만드는 동안 conda
환경을 맞춤설정할 수 있습니다.
Dataproc 클러스터를 만들 때 conda 환경을 맞춤설정할 수 있는 상호 배타적인 두 가지 방법이 있습니다.
dataproc:conda.env.config.uri
클러스터 속성을 사용하여 클러스터에 새 conda 환경을 만들고 활성화합니다. 또는dataproc:conda.packages
및dataproc:pip.packages
클러스터 속성을 사용하여 클러스터의conda
base
환경에conda
및pip
패키지를 각각 추가합니다.
conda 관련 클러스터 속성
dataproc:conda.env.config.uri
: Cloud Storage에 있는 conda 환경 YAML 구성 파일의 절대 경로입니다. 이 파일은 클러스터에 새conda
환경을 만들고 활성화하는 데 사용됩니다.예:
conda
environment.yaml
구성 파일을 가져오거나 만듭니다. 아래와 같이 수동으로 파일을 생성하거나, 기존 파일을 사용하거나,environment.yaml
파일에 기존 conda 환경 내보내기할 수 있습니다.conda env export --name=env-name > environment.yaml
구성 파일을 Cloud Storage 버킷에 복사합니다.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
클러스터를 만들고 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.packages
및dataproc: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.packages
및dataproc: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.packages
및dataproc: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 ...