配置集群的 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))

运行此程序

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 映像版本 1.0、1.1 和 1.2

在 1.0、1.1 和 1.2 映像版本集群中,默认的 Python 解释器是 Python 2.7,它位于虚拟机实例上的 /usr/bin/python2.7 中。您可以通过 pip install 初始化操作来安装 Python 软件包(如下一个示例所示,指定软件包版本是可选操作,但建议您指定)。

示例

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

如果您需要其他 Python 解释器,则可以使用 Conda 初始化操作来安装 Miniconda 以及 Conda 和 PIP 软件包。

示例

下一个命令会创建一个 1.2 映像版本 Dataproc 集群,并安装最新版 Miniconda3 以及 Conda 和 PIP 软件包:

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 映像版本 1.3

在 1.3 映像版本集群中,默认的 Python 解释器是 Python 2.7,它安装在虚拟机实例上的 /usr/bin/python2.7 中。您可以使用 pip install 初始化操作来安装 Python 软件包。

示例

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

如果您需要其他 Python 解释器,则可以使用 Anaconda 可选组件创建集群,并使用 pip install 初始化操作来安装 Conda 和 PIP 软件包。

示例

下一个命令将创建一个 1.3 映像版本集群,并安装 Anaconda2 以及 Conda 和 PIP 软件包:

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

安装 Anaconda 可选组件时,PySpark 作业的默认 Python 解释器为 /opt/conda/anaconda/bin/python2.7

要在 1.3 集群上将 Python 3 用作默认解释器,请不要在创建集群时使用 Anaconda 可选组件。请改为使用 Conda 初始化操作在集群上安装 Miniconda3 以及 Conda 和 PIP 软件包。

示例

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 映像版本 1.4+

Miniconda3 安装在 Dataproc 1.4+ 集群上。默认 Python 解释器是 Dataproc 1.4 版 Python 3.6 和 Dataproc 1.5 版 Python 3.7,分别位于虚拟机实例 /opt/conda/miniconda3/bin/python3.6/opt/conda/miniconda3/bin/python3.7/usr/bin/python2.7 还提供 Python 2.7。

您可以通过 Conda 初始化操作pip install 初始化操作来安装 Conda 和 PIP 软件包。

示例

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

如需安装 Anaconda3 而不是 Miniconda3,请选择 Anaconda 可选组件,并使用 Conda 初始化操作pip install 初始化操作来安装 Conda 和 PIP 软件包。

示例

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

安装 Anaconda3 可选组件后,系统会将 Miniconda3 从集群中删除,/opt/conda/anaconda3/bin/python3.6 成为 PySpark 作业的默认 Python 解释器。您无法更改可选组件的 Python 解释器版本。

要在 1.4 集群上将 Python 2.7 用作默认解释器,请不要在创建集群时使用 Anaconda 可选组件。请改为使用 Conda 初始化操作在集群上安装 Miniconda2 以及 Conda 和 PIP 软件包。

示例

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 解释器

如果您的集群上安装了多个 Python 解释器,则系统会运行 /etc/profile.d/effective-python.sh,导出 PYSPARK_PYTHON 环境变量以为 PySpark 作业选择默认 Python 解释器。如果您需要为 PySpark 作业选择非默认的 Python 解释器,请在将作业提交到集群时,将 spark.pyspark.pythonspark.pyspark.driver.python 属性设置为所需的 Python 版本号(例如“python2.7” 或“python3.6”)。

示例

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.4 集群示例:

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