我想要排查在我的 Amazon EMR 集群上安装 Python 库时遇到的问题
简短描述
我尝试在我的 EMR 集群上安装 Python 库,但是,我看到了以下问题之一:
- 我无法在我的 EMR 集群上安装 Python 库。
- Python 软件包在 Amazon EMR 上不可用。
- 安装的 Python 软件包在新预置的核心节点或任务节点上不可用。
您可以通过使用引导启动操作或者自动登录到每个节点来在 EMR 集群上安装 Python 库。使用引导启动操作安装 Python 库,以确保这些库会在集群预置和集群大小调整期间自动安装到所有节点上。
解决方法
我无法在我的 EMR 集群上安装 Python 库,或者 Python 软件包在 Amazon EMR 上不可用
登录到发生软件包缺失错误的节点。然后,使用以下命令验证 Python 库是否已安装:
$ sudo pip3 freeze | grep pandas
pandas==1.3.5
$ sudo pip3 freeze | grep numpy
numpy==1.21.6
或者,验证 Python 库是否是通过 Python Shell 安装:
$ python
Python 3.7.15 (default, Oct 31 2022, 22:44:31)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> import numpy as np
如果前面的命令返回 ModuleNotFoundError: No module named 'python_library' 之类的错误,则该库未安装。
您可以使用 pip 命令在 EMR 集群上安装 Python 库,如以下示例中所示:
sudo pip3 install pandas scipy sklearn
sudo pip3 install file://requirements.txt
在前面的示例中,requirements.txt 是您想要安装的 Python 软件包和库的列表。
有关更多信息,请参阅以下内容:
要安装其他自定义库,请使用 pip install 命令。
默认情况下,Amazon EMR 中已安装 Python。但是,并非所有 Python 库都已安装。有关更多信息,请参阅安装和使用内核和库。
要查看集群上安装的 Python 库列表,请使用 sudo pip3 freeze 命令。以下是 sudo pip3 freeze 命令的示例和输出示例:
$ sudo pip3 freeze
aws-cfn-bootstrap==2.0
beautifulsoup4==4.9.3
boto==2.49.0
click==8.1.3
docutils==0.14
jmespath==1.0.1
joblib==1.2.0 l
ockfile==0.11.0
lxml==4.9.1
mysqlclient==1.4.2
nltk==3.7
nose==1.3.4
numpy==1.20.0
py-dateutil==2.2
pystache==0.5.4
python-daemon==2.2.3
python37-sagemaker-pyspark==1.4.2
pytz==2022.6
PyYAML==5.4.1
regex==2021.11.10
simplejson==3.2.0
six==1.13.0
tqdm==4.64.1
windmill==1.6
Python 软件包在集群扩展期间在新预置的核心阶段和任务节点上不可用
各节点上手动安装的 Python 软件包可能在集群扩张期间在新预置的核心节点或任务节点上不可用。
要确保软件包存在于新预置的节点上,请使用 bootstrap action 而不是手动安装库。
在某些情况下,尽管通过引导启动安装了所需软件包,但该软件包仍不可用。在这些情况下,请检查引导启动脚本日志,以确定问题所在。要检查引导启动脚本日志,请执行以下操作:
如果新实例正在运行:
1. 使用 SSH 连接到主节点。
2. 检查以下位置的引导启动日志中是否存在错误:
- /var/log/bootstrap-actions/N/stderr
- /var/log/bootstrap-actions/N/stdout
在前面的路径中,N 代表引导启动脚本编号(例如,1、2、3 等)。
如果新实例预置失败:
将会在您为 Amazon EMR 日志记录配置的 Amazon Simple Storage Service(Amazon S3)存储桶中捕获引导启动日志。路径是:
- s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/N/stdout
- s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/N/stderr
在前面的路径中,N 代表引导启动脚本编号(例如,1、2、3 等)。