我想对 Amazon EMR 集群上的 Python 库安装问题进行故障排除。
解决方法
Python 包在 Amazon EMR 上不可用
**注意:**默认情况下,Amazon EMR 会安装 Python。但是,Amazon EMR 不会安装所有 Python 库。
如果 Python 包在 Amazon EMR 上不可用,请登录到出现软件包缺失错误的节点。然后,运行类似于以下示例的命令,检查 Python 包是否已安装。
检查是否已安装特定软件包的命令示例:
sudo pip3 freeze | grep pandas;
sudo pip3 freeze | grep numpy
**注意:**将 pandas 和 numpy替换为您要检查的 Python 包。
预期输出:
pandas==1.3.5
numpy==1.21.6
查看集群上安装的所有 Python 库列表的命令示例:
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
numpy==1.21.6
pandas==1.3.5
...
您也可以在 Python Shell 中运行类似于以下示例的命令:
import pandas as pd;
import numpy as np
如果上述命令返回诸如 ModuleNotFoundError: No module named 'python_library' 之类的错误,则表示该库未安装。
要在 Amazon EMR 集群上安装 Python 库,请运行以下命令:
sudo pip3 install pandas scipy sklearn
**注意:**将 pandas scipy sklearn 替换为您要安装的 Python 库。
或者您可以运行以下命令,从 .txt 文件中读取并安装 Python 包:
sudo pip3 install -r requirements.txt
注意:将requirements.txt 替换为包含您要安装的 Python 包和库列表的 .txt 文件。
有关详细信息,请参阅 Python 打包网站上以下 Installing packages(安装软件包)。另请参阅在 EMR Studio 中安装并使用内核和库。
在集群扩展期间,Python 包在新预置的核心或任务节点上不可用
在集群扩展期间,手动安装在单个节点上的 Python 包可能在新预置的核心或任务节点上不可用。
要确保软件包存在于新预置的节点中,请使用引导操作来安装库,而不是手动安装。
如果您要安装的软件包即使通过引导脚本也不可用,请检查引导日志以确定问题所在。
正在运行的实例
要查看正在运行的实例上的引导日志,请先使用 SSH 连接到主节点。然后,在以下位置检查引导日志中是否存在错误:/var/log/bootstrap-actions/bootStrapNumber/stderr 和 /var/log/bootstrap-actions/bootStrapNumber/stdout。
**注意:**在上述路径中,将 bootStrapNumber 替换为引导脚本编号。
新实例
对于新实例,引导日志将在您为 Amazon EMR 日志记录配置的 Amazon Simple Storage Service (Amazon S3) 存储桶中捕获。在 s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/bootStrapNumber/stdout 和 s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/bootStrapNumber/stderr 中检查引导日志中是否存在错误
**注意:**在上述路径中,bootStrapNumber 表示引导脚本编号。