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"
}
}
]
}
]
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
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"
}
}
]
}
]
相關資訊
設定 Spark
Apache Spark
PySpark 文件