New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Amazon EMR で Python のバージョンをアップグレードし、アップグレードされた Python バージョンを使用するように PySpark ジョブを設定する方法を教えてください。
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
次の手順を実行します。
- SSH を使用してプライマリノードに接続します。
- デフォルトの Python 環境を変更するには、次のコマンドを実行します。
PySpark が正しい Python バージョンを使用していることを確認するには、次のコマンドを実行します。sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
注: example-ip-address は、お使いの IP アドレスに置き換えてください。[hadoop@example-ip-address conf]$ pyspark
出力例: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
関連情報

関連するコンテンツ
- 質問済み 25日前lg...
- 質問済み 7年前lg...
- AWS公式更新しました 3年前
- AWS公式更新しました 2年前