如何将 Amazon EMR 配置为使用 Python 3.4 或 3.6 运行 PySpark 作业?

2 分钟阅读
0

我的 Amazon EMR 集群实例上安装了 Python 3.4 或 3.6,但 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 及更高版本,系统默认使用 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 年前