Python-Umgebung des Clusters konfigurieren

PySpark-Jobs auf Dataproc werden von einem Python-Interpreter auf dem Cluster ausgeführt. Der Jobcode muss zur Laufzeit mit der Version und Abhängigkeiten des Python-Interpreters kompatibel sein.

Interpreter-Version und -Module prüfen

Das folgende Beispielprogramm check_python_env.py prüft den Linux-Nutzer, der den Job ausführt, den Python-Interpreter und die verfügbaren Module.

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))

Programm starten

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

Beispielausgabe:

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-Image-Python-Umgebungen

Dataproc-Image-Versionen 1.0, 1.1 und 1.2

In Clustern der Image-Versionen 1.0, 1.1 und 1.2 ist Python 2.7 der Standard-Python-Interpreter, der sich auf der VM-Instanz unter /usr/bin/python2.7 befindet. Sie können Python-Pakete über die Initialisierungsaktion pip install installieren. Die Angabe von Paketversionen, wie im nächsten Beispiel gezeigt, ist optional, wird aber empfohlen.

Beispiel

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.2 \
    --region=${REGION} \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Wenn Sie einen anderen Python-Interpreter benötigen, können Sie die Initialisierungsaktion conda verwenden, um Miniconda mit Conda- und PIP-Paketen zu installieren.

Beispiel

Mit dem nächsten Befehl erstellen Sie einen Dataproc-Cluster mit der Image-Version 1.2 und installieren die neueste Version von Miniconda3 mit Conda- und PIP-Paketen:

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.2 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=3' \
    --metadata='MINICONDA_VERSION=latest' \
    --metadata='CONDA_PACKAGES=scipy=1.0.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

Dataproc-Image-Version 1.3

In Clustern mit der Image-Version 1.3 ist der Standard-Python-Interpreter Python 2.7, der auf der VM-Instanz unter /usr/bin/python2.7 installiert ist. Sie können Python-Pakete mit der Initialisierungsaktion pip install installieren.

Beispiel

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.3 \
    --region=${REGION} \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Wenn Sie einen anderen Python-Interpreter benötigen, können Sie einen Cluster mit der optionalen Anaconda-Komponente erstellen und die Initialisierungsaktion pip install verwenden, um Conda- und PIP-Pakete zu installieren.

Beispiel

Mit dem nächsten Befehl erstellen Sie einen Cluster mit Image-Version 1.3 und installieren die Anaconda2-, Conda- und PIP-Pakete:

REGION=region
gcloud beta dataproc clusters create my-cluster \
    --image-version=1.3 \
    --region=${REGION} \
    --optional-components=ANACONDA \
    --metadata='CONDA_PACKAGES=scipy=1.1.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/conda-install.sh,gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Bei der Installation der optionalen Anaconda-Komponente lautet der standardmäßige Python-Interpreter für PySpark-Jobs /opt/conda/anaconda/bin/python2.7.

Wenn Sie Python 3 als Standard-Interpreter in einem 1.3-Cluster verwenden möchten, verwenden Sie beim Erstellen des Clusters nicht die optionale Anaconda-Komponente. Verwenden Sie stattdessen die Initialisierungsaktion conda, um Miniconda3 und die Conda- und PIP-Pakete auf dem Cluster zu installieren.

Beispiel

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.3 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=3' \
    --metadata='MINICONDA_VERSION=latest' \
    --metadata='CONDA_PACKAGES=scipy=1.0.0 tensorflow=1.12.0' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

Dataproc-Image-Version 1.4 und höher

Miniconda3 ist auf Dataproc-Clustern ab Version 1.4 installiert. Der standardmäßige Python-Interpreter ist Python 3.6 für Dataproc 1.4 und Python 3.7 für Dataproc 1.5, die sich auf der VM-Instanz unter /opt/conda/miniconda3/bin/python3.6 bzw. /opt/conda/miniconda3/bin/python3.7 befinden. Python 2.7 ist auch unter /usr/bin/python2.7 verfügbar.

Sie können Conda- und PIP-Pakete mit der Initialisierungsaktion conda und der Initialisierungsaktion pip install installieren.

Beispiel

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.4 \
    --region=${REGION} \
    --metadata='CONDA_PACKAGES=scipy=1.1.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/conda-install.sh,gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Wählen Sie die optionale Anaconda-Komponente aus und installieren Sie Conda- und PIP-Pakete mit der Initialisierungsaktion conda und der Initialisierungsaktion pip install, um Anaconda3 statt Miniconda3 zu installieren.

Beispiel

REGION=region
gcloud beta dataproc clusters create my-cluster \
    --image-version=1.4 \
    --region=${REGION} \
    --optional-components=ANACONDA \
    --metadata='CONDA_PACKAGES=scipy=1.1.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/conda-install.sh,gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Wenn Sie die optionale Komponente Anaconda3 installieren, wird Miniconda3 aus dem Cluster entfernt und /opt/conda/anaconda3/bin/python3.6 zum Standard-Python-Interpreter für PySpark-Jobs. Sie können die Python-Interpreter-Version der optionalen Komponente nicht ändern.

Wenn Sie Python 2.7 als Standard-Interpreter in einem 1.4-Cluster verwenden möchten, verwenden Sie beim Erstellen des Clusters nicht die optionale Anaconda-Komponente. Verwenden Sie stattdessen die Initialisierungsaktion conda, um Miniconda2 und die Pakete Conda und PIP auf dem Cluster zu installieren.

Beispiel

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.4 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=2' \
    --metadata='MINICONDA_VERSION=latest' \
    --metadata='CONDA_PACKAGES=scipy=1.0.0 tensorflow=1.12.0' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

Python-Interpreter für einen Job auswählen

Wenn in Ihrem Cluster mehrere Python-Interpreter installiert sind, führt das System /etc/profile.d/effective-python.sh aus. Dabei wird die Umgebungsvariable PYSPARK_PYTHON exportiert, um den Standard-Python-Interpreter für Ihre PySpark-Jobs auszuwählen. Wenn Sie für einen PySpark-Job einen nicht standardmäßigen Python-Interpreter benötigen, legen Sie beim Senden des Jobs an den Cluster die Attribute spark.pyspark.python und spark.pyspark.driver.python auf die erforderliche Python-Versionsnummer fest (zum Beispiel "python2.7" oder "python3.6").

Beispiel

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"

Python mit Sudo

Wenn Sie eine SSH-Verbindung zu einem Clusterknoten herstellen, auf dem Miniconda oder Anaconda installiert ist, und sudo python --version ausführen, kann sich die angezeigte Python-Version von python --version unterscheiden. Dieser Versionsunterschied kann auftreten, weil sudo das Standardsystem Python /usr/bin/python verwendet und /etc/profile.d/effective-python.sh nicht ausführt, um die Python-Umgebung zu initialisieren. Wenn Sie sudo verwenden möchten, suchen Sie nach dem Python-Pfad, der in /etc/profile.d/effective-python.sh festgelegt ist. Führen Sie dann den Befehl env aus, um PATH auf diesen Python-Pfad festzulegen. Hier ist ein Beispiel für einen Cluster mit 1.4:

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