Amazon EMR で Python のバージョンをアップグレードし、アップグレードされた Python バージョンを使用するように PySpark ジョブを設定する方法を教えてください。

所要時間4分
0

Amazon EMR で Python のバージョンをアップグレードし、アップグレードされた Python バージョンを使用するように PySpark ジョブを設定したいです。

簡単な説明

クラスターインスタンスとシステムアプリケーションは、次の Amazon EMR リリースバージョンに基づいて Python バージョンを使用します。

  • Amazon EMR リリースバージョン 4.6.0-5.19.0: Python 3.4 がクラスターインスタンスにインストールされています。Python 2.7 がシステムのデフォルトです。
  • Amazon EMR リリースバージョン 5.20.0 以降: Python 3.6 がクラスターインスタンスにインストールされています。Amazon EMR バージョン 5.20.0-5.29.0 では、Python 2.7 がシステムのデフォルトです。バージョン 5.30.0 以降では、Python 3 がシステムのデフォルトです。
  • Amazon EMR リリースバージョン 6.0.0 以降: Python 3.7 がクラスターインスタンスにインストールされています。Python 3 がシステムのデフォルトです。
  • Amazon EMR リリースバージョン 7.0.0 以降: Python 3.9 がクラスターインスタンスにインストールされています。Python 3 がシステムのデフォルトです。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Python のバージョンをアップグレードするには、spark-env 分類の PYSPARK_PYTHON 環境変数を、新しい Python バージョンがインストールされているディレクトリに指定します。

which example-python-version

注: example-python-version は、使用する新しい Python のバージョンに置き換えます。

Amazon EC2 上で動作する Amazon EMR 用の Python バージョンをアップグレードする

注: Amazon EMR クラスターインスタンスに新しいバージョンの Python と OpenSSL をインストールする前に、必ず次のスクリプトをテストしてください。

Amazon Elastic Compute Cloud (Amazon EC2) 上で動作する Amazon EMR バージョン 6.15 の Python 3.9 にアップグレードするには、次のスクリプトを使用します。このスクリプトを使用して Amazon EMR バージョン 7.0 の Python を 3.10 以降にアップグレードすることもできます。

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations
sudo make altinstall

注: example-python3-version は、実際の Python 3 のバージョンに置き換えます。

Amazon EMR 6.15 またはそれ以前のバージョンで Python 3.10 以降にアップグレードするには、OpenSSL が必要です。次のスクリプトを使用します。

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
cd /home/hadoop/
wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz
tar -xzf example-openssl11-version.tar.gz
cd example-openssl11-version/
./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic
make
sudo make install
cd /home/hadoop/
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations --with-openssl=/usr
sudo make altinstall

注: お使いのものでそれぞれ、example-python3-version を Python 3 のバージョンに、example-openssl11-version を OpenSSL 11 のバージョンに置き換えます。詳細については、GitHub のウェブサイトで「openssl」を参照してください。

アップグレードされたバージョンをデフォルトの Python 3 インストールとして使用するには、新しい Python の場所に /usr/local/bin/python3.x を使用します。上記の Python スクリプトは /usr/local/bin/python3.x にインストールされ、デフォルトの Python インストールは /usr/bin/python3 です。

実行中のクラスターで Python バージョンをアップグレードする

注: Amazon EMR バージョン 5.36.0 以前の場合は、Python バージョンを 3.8 にアップグレードできます。

Amazon EMR バージョン 5.21.0 以前

次のような設定オブジェクトを使用して再構成リクエストを送信します。

[  {
     "Classification": "spark-env",
     "Configurations": [
       {
         "Classification": "export",
         "Properties": {
            "PYSPARK_PYTHON": "/usr/bin/python3"
          }
       }
    ]
  }
]

Amazon EMR バージョン 4.6.0-5.20.x

次の手順を実行します。

  1. SSH を使用してプライマリノードに接続します。
  2. デフォルトの Python 環境を変更するには、次のコマンドを実行します。
    sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
    PySpark が正しい Python バージョンを使用していることを確認するには、次のコマンドを実行します。
    [hadoop@example-ip-address conf]$ pyspark
    注: example-ip-address は、お使いの IP アドレスに置き換えてください。
    出力例:
    Python 3.4.8 (default, Apr 25 2018, 23:50:36)
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /__ / .__/\_,_/_/ /_/\_\   version 2.3.1
          /_/
    Using Python version 3.4.8 (default, Apr 25 2018 23:50:36)
    SparkSession available as 'spark'.

注: 新しい設定は、次の PySpark ジョブで有効になります。

新しいクラスターで Python バージョンをアップグレードする

Amazon EMR でクラスターを起動するときに Python バージョンをアップグレードするには、使用するスクリプトにブートストラップアクションを追加します。

Amazon EC2 上で動作する Amazon EMR バージョン 6.15 で Python 3.9 にアップグレードするには、次のスクリプトを使用します。このスクリプトを使用して Amazon EMR バージョン 7.0 の Python を 3.10 以降にアップグレードすることもできます。

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations
sudo make altinstall

注: example-python3-version は、実際の Python 3 のバージョンに置き換えます。

Amazon EMR 6.15 以前のバージョンで Python 3.10 以降にアップグレードするには、OpenSSL が必要です。次のスクリプトを使用します。

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
cd /home/hadoop/
wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz
tar -xzf example-openssl11-version.tar.gz
cd example-openssl11-version/
./config —prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic
make
sudo make install
cd /home/hadoop/
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations --with-openssl=/usr
sudo make altinstall

注: お使いのものでそれぞれ、example-python3-version を Python 3 のバージョンに、example-openssl11-version を OpenSSL 11 のバージョンに置き換えます。詳細については、GitHub のウェブサイトで「openssl」を参照してください。

次に、以下に示すような設定オブジェクトを追加します。

[
  {
     "Classification": "spark-env",
     "Configurations": [
       {
         "Classification": "export",
         "Properties": {
            "PYSPARK_PYTHON": "<example-python-version-path>"
          }
       }
    ]
  }
]

Amazon EKS 上の Amazon EMR で Python バージョンをアップグレードする

注: Amazon Linux 2023 ベースのイメージの名前には al2023 が含まれています。また、Amazon EMR 6.13.0 以降では、Amazon Linux 2023 をベースにしたイメージではデフォルトで Python 3.9.16 を使用しています。Amazon Linux 2 をベースにしたイメージでは、Python 3.7 がデフォルトバージョンです。

Amazon Elastic Kubernetes Service (Amazon EKS) 上の Amazon EMR で Python バージョンをアップグレードするには、Docker イメージが必要です。AWS リージョンのベース URI を選択します。

FROM example-base-URI-account-id.dkr.ecr.example-region.amazonaws.com/spark/emr-6.15.0
USER root
RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make
RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \
tar xzf example-python3-version.tgz && cd example-python3-version && \
./configure --enable-optimizations && \
make altinstall
USER hadoop:hadoop

注: example-base-URI-account-id を Apache Spark イメージのベースアカウント ID に、example-region をお使いのリージョンに、example-python3-version を Python のバージョンに置き換えます。

Spark ワークロードを送信するときにイメージを渡すには、アプリケーション設定オーバーライド、Spark ドライバー、プライマリポッドイメージを使用します。

{
                "classification": "spark-defaults",
                "properties": {
                    "spark.kubernetes.container.image": "example-account-id.dkr.ecr.example-region.amazonaws.com/example-repository"
                }
 }

注: example-account-id は作成したイメージを保存しているアカウント ID に、example-repository はカスタムイメージを保存しているリポジトリ名に、example-region はお使いのリージョンに置き換えます。

Amazon EMR Serverless で Python のバージョンをアップグレードする

Amazon EMR Serverless アプリケーションで Python のバージョンをアップグレードするには、Docker イメージを使用して新しい Python バージョンをインストールします。

FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest
USER root
# install python 3
RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make
RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \
tar xzf example-python3-version.tgz && cd example-python3-version && \
./configure --enable-optimizations && \
make altinstall
# EMRS will run the image as hadoop
USER hadoop:hadoop

注: example-python-version は、お使いの Python 3 のバージョンに置き換えます。

Amazon EMR Serverless アプリケーションに Spark ジョブを送信するときには、新しい Python バージョンを使用するために次のパスを渡します。

--conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.9
--conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9
--conf spark.executorEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9

関連情報

Spark を設定する

Apache Spark

ベースイメージ URI の選択に関する詳細

EMR Serverless でカスタムイメージを使用する

AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ