如何設定 Amazon EMR 以使用 Python 3.4 或 3.6 執行 PySpark 作業?

2 分的閱讀內容
0

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 文件

AWS 官方
AWS 官方已更新 2 年前