如何疑難排解在 EMR 叢集上安裝 Python 程式庫的問題?

2 分的閱讀內容
0

我想疑難排解在 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 套件可能無法在新佈建的核心或任務節點上使用。

若要確定套件存在於新佈建的節點中,請使用引導操作來安裝程式庫,而非手動安裝程式庫。

在某些情況下,儘管有引導指令碼來安裝套件,但所需的套件可能仍不可用。在這些情況下,請檢查引導指令碼日誌以判斷出了什麼問題。若要檢查引導指令碼日誌,請執行下列動作:

如果新執行個體正在執行:

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 等)。


AWS 官方
AWS 官方已更新 1 年前