Python 3.4 または 3.6 を使用して PySpark ジョブを実行するように Amazon EMR を設定する方法を教えてください。
最終更新日: 2022 年 9 月 19 日
Python 3.4 または 3.6 が Amazon EMR クラスターインスタンスにインストールされているのですが、Spark は Python 2.7 を実行しています。Spark を Python 3.4 または 3.6 にアップグレードしたいと考えています。
簡単な説明
ほとんどの 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 です。5.20.0-5.29.0 では、システムのデフォルトは Python 2.7 です。Amazon EMR バージョン 5.30.0 以降では、システムのデフォルトは Python 3 です。
PySpark が使用する Python バージョンをアップグレードするには、spark-env 分類用の PYSPARK_PYTHON 環境変数を Python 3.4 または 3.6 がインストールされているディレクトリに指定します。
解決方法
実行中のクラスターの場合
Amazon EMR リリースバージョン 5.21.0 以降:
次のような設定オブジェクトを使用して、再設定リクエストを送信します。
[
{
"Classification": "spark-env",
"Configurations": [
{
"Classification": "export",
"Properties": {
"PYSPARK_PYTHON": "/usr/bin/python3"
}
}
]
}
]
sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
3. pyspark コマンドを実行して、PySpark が正しいバージョンの Python を使用していることを確認します。
[hadoop@ip-X-X-X-X conf]$ pyspark
出力は、PySpark が現在クラスターインスタンスにインストールされているものと同じバージョンの Python を使用していることを示しています。例:
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'.
Spark は次の PySpark ジョブに新しい設定を使います。
新しいクラスターの場合
Amazon EMR リリースバージョン 4.6.0 以降を使用してクラスターを起動するときに、次のような設定オブジェクトを追加します。
[
{
"Classification": "spark-env",
"Configurations": [
{
"Classification": "export",
"Properties": {
"PYSPARK_PYTHON": "/usr/bin/python3"
}
}
]
}
]