我的 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 文档