本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 EMR Studio 中安裝和使用核心和程式庫
每個EMR筆記本都隨附一組預先安裝的程式庫和核心。如果EMR叢集可以存取核心和程式庫所在的儲存庫,您可以在叢集中安裝其他程式庫和核心。例如,對於私有子網路中的叢集,您可能需要設定網路地址轉譯 (NAT),並提供路徑讓叢集存取公有 PyPI 儲存庫以安裝程式庫。如需針對不同網路組態設定外部存取權的詳細資訊,請參閱 Amazon VPC使用者指南 中的案例和範例。
注意
EMR 筆記本可在 主控台中作為 EMR Studio Workspaces 使用。主控台中的建立工作區按鈕可讓您建立新的筆記本。若要存取或建立工作區,EMRNotebooks 使用者需要額外IAM的角色許可。如需詳細資訊,請參閱主控台中的 Amazon EMR Notebooks 是 Amazon EMR Studio Workspaces 和 Amazon EMR主控台 。
EMR 無伺服器應用程式隨附下列預先安裝的 Python 和 程式庫 PySpark:
-
Python 程式庫 – ggplot, matplotlib, numpy, pandas, plotly, bokeh, scikit-learn, scipy, scipy
-
PySpark 程式庫 – ggplot, matplotlib, numpy, pandas, plotly, bokeh, scikit-learn, scipy, scipy
在叢集主節點上安裝核心和 Python 程式庫
使用 Amazon EMR5.30.0 及更新版本,除了 6.0.0 以外,您可以在叢集的主要節點上安裝其他 Python 程式庫和核心。安裝後,這些核心和程式庫可供執行連接至叢集之EMR筆記本的任何使用者使用。以這種方式安裝的 Python 程式庫僅適用於在主節點上執行的程序。這些程式庫不會安裝在核心或任務節點上,也無法用於在這些節點上執行的執行程式。
注意
對於 Amazon 5.30.1、5.31.0 和 6.1.0 EMR版,您必須採取其他步驟,才能在叢集的主要節點上安裝核心和程式庫。
若要啟用此功能,請執行下列操作:
-
請確定連接至 EMR Notebooks 服務角色的許可政策允許下列動作:
elasticmapreduce:ListSteps
如需詳細資訊,請參閱EMR筆記本 的服務角色。
-
使用 AWS CLI 在設定EMR筆記本的叢集上執行步驟,如下列範例所示。必須使用步驟名稱
EMRNotebooksSetup
。Replace (取代)us-east-1
叢集所在的區域。如需詳細資訊,請參閱使用 AWS CLI將步驟新增至叢集。aws emr add-steps --cluster-id
MyClusterID
--steps Type=CUSTOM_JAR,Name=EMRNotebooksSetup,ActionOnFailure=CONTINUE,Jar=s3://us-east-1
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://awssupportdatasvcs.com/bootstrap-actions/EMRNotebooksSetup/emr-notebooks-setup.sh"]
可以使用 pip
或 conda
在主節點的 /emr/notebook-env/bin
目錄中安裝核心和程式庫。
範例 - 安裝 Python 程式庫
從 Python3 核心中,在筆記本儲存格內以命令的形式執行 %pip
magic 來安裝 Python 程式庫。
%pip install pmdarima
可能需要重新啟動核心才能使用已更新的套件。也可以使用 %%sh
pip
。
%%sh /emr/notebook-env/bin/pip install -U matplotlib /emr/notebook-env/bin/pip install -U pmdarima
使用 PySpark 核心時,您可以使用pip
命令在叢集上安裝程式庫,或從筆記本內使用 PySpark 筆記本範圍程式庫。
若要從終端機在叢集上執行pip
命令,請先使用 連線至主要節點SSH,如下列命令所示。
sudo pip3 install -U matplotlib sudo pip3 install -U pmdarima
或者,可以使用筆記本範圍程式庫。使用筆記本範圍程式庫時,您的程式庫安裝僅限於工作階段的範圍,並發生在所有 Spark 執行程式上。如需詳細資訊,請參閱使用筆記本範圍程式庫。
如果您想要在 PySpark 核心中封裝多個 Python 程式庫,您也可以建立隔離的 Python 虛擬環境。如需範例,請參閱使用 Virtualenv
若要在工作階段中建立 Python 虛擬環境,請在筆記本的第一個儲存格中使用 %%configure
magic 命令的 Spark 屬性 spark.yarn.dist.archives
,如下列範例所示。
%%configure -f { "conf": { "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python", "spark.yarn.dist.archives":"s3://
amzn-s3-demo-bucket
/prefix
/my_pyspark_venv.tar.gz#environment", "spark.submit.deployMode":"cluster" } }
您可以同樣地建立 Spark 執行程式環境。
%%configure -f { "conf": { "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python", "spark.executorEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.dist.archives":"s3://
amzn-s3-demo-bucket
/prefix
/my_pyspark_venv.tar.gz#environment", "spark.submit.deployMode":"cluster" } }
也可以使用 conda
來安裝 Python 程式庫。不需要 sudo 存取權即可使用 conda
。您必須使用 連線到主要節點SSH,然後從conda
終端機執行。如需詳細資訊,請參閱使用 連線至 Amazon EMR叢集主節點 SSH。
範例 – 安裝核心
以下示例演示在連接到叢集的主節點時,使用終端命令安裝 Kotlin 核心:
sudo /emr/notebook-env/bin/conda install kotlin-jupyter-kernel -c jetbrains
注意
這些指示不會安裝核心相依項。如果您的核心具有第三方相依項,可能需要採取額外的設定步驟,才能將核心與筆記本搭配使用。
筆記本範圍程式庫的考量與限制
使用筆記本範圍程式庫時,請考慮以下事項:
-
筆記本範圍程式庫適用於您使用 Amazon 5.26.0 版及更高EMR版本建立的叢集。
-
筆記本範圍程式庫僅適用於 PySpark核心。
-
任何使用者都可以從筆記本儲存格中安裝額外的筆記本範圍資料庫。這些資料庫僅供該筆記本使用者在單一筆記本工作階段期間使用。如果其他使用者需要相同的程式庫,或者相同的使用者需要在不同的階段作業中使用相同的程式庫,則必須重新安裝該程式庫。
-
您只能解除安裝與
install_pypi_package
一起安裝的程式庫API。無法解除安裝叢集上預先安裝的任何程式庫。 -
如果叢集上安裝不同版本的相同程式庫,並做為筆記本範圍的程式庫,則筆記本範圍的程式庫版本會覆寫叢集程式庫版本。
使用筆記本範圍程式庫
若要安裝程式庫,Amazon EMR叢集必須能夠存取程式庫所在的 PyPI 儲存庫。
下列範例示範使用 PySpark 核心和 從筆記本儲存格內列出、安裝和解除安裝程式庫的簡單命令APIs。如需其他範例,請參閱 AWS 巨量資料部落格上使用EMR筆記本文章在執行中的叢集上安裝 Python 程式
範例 – 列出目前的程式庫
以下指令列出可用於目前 Spark 筆記本工作階段的 Python 套件。這會列出安裝在叢集上和筆記本範圍的程式庫。
sc.list_packages()
範例 – 安裝 Celery 程式庫
下列指令會將 Celery
sc.install_pypi_package("celery")
安裝程式庫之後,下列指令會確認可在 Spark 驅動程式和執行器上使用該程式庫。
import celery sc.range(1,10000,1,100).map(lambda x: celery.__version__).collect()
範例 – 安裝 Arrow 程式庫,指定版本和儲存庫
下列命令會將 Arrow
sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
範例 – 解除安裝程式庫
下列指令會解除安裝 Arrow 程式庫,並將其做為筆記本範圍的程式庫從目前工作階段中移除。
sc.uninstall_package("arrow")