Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何在 Amazon EMR 上升级我的 Python 版本并配置 PySpark 作业以使用升级后的 Python 版本?
我想在 Amazon EMR 上升级我的 Python 版本,并配置 PySpark 作业以使用升级后的 Python 版本。
简短描述
集群实例和系统应用程序使用不同的 Python 版本,具体取决于以下 Amazon EMR 发行版本:
- Amazon EMR 发行版本 4.6.0-5.19.0: 集群实例上安装了 Python 3.4。系统默认使用 Python 2.7。
- Amazon EMR 发行版本 5.20.0 及更高版本: 集群实例上安装了 Python 3.6。对于 Amazon EMR 版本 5.20.0-5.29.0,系统默认使用 Python 2.7。对于 5.30.0 及更高版本,系统默认使用 Python 3。
- Amazon EMR 发行版本 6.0.0 及更高版本: 集群实例上安装了 Python 3.7。系统默认使用 Python 3。
- Amazon EMR 发行版本 7.0.0 及更高版本: 集群实例上安装了 Python 3.9。系统默认使用 Python 3。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要升级 Python 版本,请将 spark-env 分类的 PYSPARK_PYTHON 环境变量指向新 Python 版本的安装目录:
which example-python-version
**注意:**请将 example-python-version 替换为新的 Python 版本。
升级在 Amazon EC2 上运行的 Amazon EMR 的 Python 版本
**注意:**在 Amazon EMR 集群实例上安装新的 Python 和 OpenSSL 版本之前,请务必测试以下脚本。
要将在 Amazon Elastic Compute Cloud (Amazon EC2) 上运行的 Amazon EMR 版本6.15 的 Python 版本升级到 3.9,请使用以下脚本。您还可以使用该脚本在 Amazon EMR 版本 7.0 上升级到 Python 3.10 或更高版本:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations sudo make altinstall
**注意:**请将 example-python3-version 替换为您的 Python 3 版本。
在 Amazon EMR 6.15 或更早版本上升级到 Python 3.10 或更高版本需要使用 OpenSSL。使用以下脚本:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel cd /home/hadoop/ wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz tar -xzf example-openssl11-version.tar.gz cd example-openssl11-version/ ./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic make sudo make install cd /home/hadoop/ wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations --with-openssl=/usr sudo make altinstall
**注意:**请将 example-python3-version 替换为您的 Python 3 版本,将 example-openssl11-version 替换为您的 OpenSSL 11版本。有关详细信息,请参阅 GitHub 网站上的 openssl。
要将升级后的版本用作 Python 3 的默认安装版本,请使用 /usr/local/bin/python3.x 作为 Python 的新位置。上述 Python 脚本将安装在 /usr/local/bin/python3.x,默认的 Python 安装位置为 /usr/bin/python3。
在正在运行的集群上升级 Python 版本
**注意:**对于 Amazon EMR 5.36.0 及更早版本,您可以将 Python 版本升级到 3.8。
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
完成以下步骤:
- 使用 SSH 连接到主节点。
- 要更改默认 Python 环境,请运行以下命令:
要确认 PySpark 是否使用了正确的 Python 版本,请运行以下命令:sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
**注意:**请将 example-ip-address 替换为您的 IP 地址。[hadoop@example-ip-address conf]$ pyspark
输出示例: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'.
**注意:**新配置将在下一个 PySpark 作业中生效。
在新集群上升级 Python 版本
要在 Amazon EMR 上启动集群时升级 Python 版本,请向您使用的脚本中添加一个引导操作。
要将在 Amazon EC2 上运行的 Amazon EMR 版本 6.15 上的 Python 版本升级到 3.9,请使用以下脚本。您还可以使用该脚本在 Amazon EMR 版本 7.0 上升级到 Python 3.10 或更高版本:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations sudo make altinstall
**注意:**请将 example-python3-version 替换为您的 Python 3 版本。
在 Amazon EMR 6.15 及更早版本上升级到 Python 3.10 或更高版本需要使用 OpenSSL。使用以下脚本:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel cd /home/hadoop/ wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz tar -xzf example-openssl11-version.tar.gz cd example-openssl11-version/ ./config —prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic make sudo make install cd /home/hadoop/ wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations --with-openssl=/usr sudo make altinstall
**注意:**请将 example-python3-version 替换为您的 Python 3 版本,将 example-openssl11-version 替换为您的 OpenSSL 11版本。有关详细信息,请参阅 GitHub 网站上的 openssl。
然后,添加一个类似于以下内容的配置对象:
[ { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Properties": { "PYSPARK_PYTHON": "<example-python-version-path>" } } ] } ]
在 Amazon EKS 上的 Amazon EMR 上升级 Python 版本
**注意:**基于 Amazon Linux 2023 的映像名称中包含 al2023。此外,Amazon EMR 6.13.0 及更高版本在基于Amazon Linux 2023 的映像中默认使用 Python 3.9.16。对于基于 Amazon Linux 2 的映像,默认版本为 Python 3.7。
要升级 Amazon Elastic Kubernetes Service (Amazon EKS) 上的 Amazon EMR 的 Python 版本,需要使用 Docker 映像。为您的 AWS 区域选择基本 URI:
FROM example-base-URI-account-id.dkr.ecr.example-region.amazonaws.com/spark/emr-6.15.0 USER root RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \ tar xzf example-python3-version.tgz && cd example-python3-version && \ ./configure --enable-optimizations && \ make altinstall USER hadoop:hadoop
**注意:**请将 example-base-URI-account-id 替换为 Apache Spark 映像的基本账户 ID,将 example-region 替换为您的区域,将 example-python3-version 替换为 Python 版本。
要在提交 Spark 工作负载时传递映像,请使用应用程序配置覆盖、Spark 驱动程序和主 容器组 (pod) 映像:
{ "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "example-account-id.dkr.ecr.example-region.amazonaws.com/example-repository" } }
**注意:**请将 example-account-id 替换为存储所创建映像的账户 ID,将 example-repository 替换为存储自定义映像的存储库名称,将 example-region 替换为您的区域。
在 Amazon EMR Serverless 上升级 Python 版本
要在 Amazon EMR Serverless 应用程序上升级 Python 版本,请使用 Docker 映像安装新的 Python 版本:
FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # install python 3 RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \ tar xzf example-python3-version.tgz && cd example-python3-version && \ ./configure --enable-optimizations && \ make altinstall # EMRS will run the image as hadoop USER hadoop:hadoop
**注意:**请将 example-python-version 替换为您的 Python 3 版本。
当您向 Amazon EMR Serverless 应用程序提交 Spark 作业时,请传递以下路径以使用新的 Python 版本:
--conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.9 --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9 --conf spark.executorEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9
相关信息

相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 个月前
- AWS 官方已更新 2 年前