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 で、VM インスタンスの /usr/bin/python2.7
にあります。Python パッケージは、pip install 初期化アクションを介してインストールできます(次の例ではパッケージのバージョンを指定しています。これは省略できますが、指定することをおすすめします)。
例
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 初期化アクションを使用して Conda パッケージおよび PIP パッケージとともに Miniconda をインストールできます。
例
次のコマンドは、1.2 イメージ バージョンの Dataproc クラスタを作成し、Conda パッケージと PIP パッケージとともに最新バージョンの Miniconda3 をインストールします。
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 で、VM インスタンスの /usr/bin/python2.7
にインストールされています。Python パッケージは pip install 初期化アクションを使用してインストールできます。
例
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 インタープリタが必要な場合は、pip install 初期化アクションを使用して Anaconda のオプション コンポーネントでクラスタを作成し、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
です。
Python 3 を 1.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 です。それぞれ VM インスタンスの /opt/conda/miniconda3/bin/python3.6
と /opt/conda/miniconda3/bin/python3.7
にあります。Python 2.7 は /usr/bin/python2.7
でも利用できます。
Conda パッケージと PIP パッケージは、conda 初期化アクションと pip install 初期化アクションを使用してインストールできます。
例
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
Miniconda3 の代わりに Anaconda3 をインストールするには、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 インタープリタのバージョンは変更できません。
Python 2.7 を 1.4 以降のクラスタでデフォルトのインタープリタとして使用するには、クラスタの作成時に 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.python
と spark.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
Miniconda または Anaconda がインストールされているクラスタノードに SSH 接続する場合、sudo python --version
を実行すると、表示される Python のバージョンが python --version
で表示されるバージョンと異なる場合があります。このバージョンの違いは、Python 環境の初期化の際に、sudo
がデフォルト システムの Python /usr/bin/python
を使用し、/etc/profile.d/effective-python.sh
を実行していないために発生する可能性があります。sudo
を使用する際の挙動に相違が出ないように、あらかじめ /etc/profile.d/effective-python.sh
に設定された Python パスを確認してから、env
コマンドを実行して PATH
に同じ Python パスを設定します。1.4 クラスタの例を次に示します。
sudo env PATH=/opt/conda/default/bin:${PATH} python --version