在 EMR Studio 中安裝和使用核心和程式庫 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 EMR Studio 中安裝和使用核心和程式庫

每個EMR筆記本都隨附一組預先安裝的程式庫和核心。如果EMR叢集可以存取核心和程式庫所在的儲存庫,您可以在叢集中安裝其他程式庫和核心。例如,對於私有子網路中的叢集,您可能需要設定網路地址轉譯 (NAT),並提供路徑讓叢集存取公有 PyPI 儲存庫以安裝程式庫。如需針對不同網路組態設定外部存取權的詳細資訊,請參閱 Amazon VPC使用者指南 中的案例和範例

注意

EMR 筆記本可在 主控台中作為 EMR Studio Workspaces 使用。主控台中的建立工作區按鈕可讓您建立新的筆記本。若要存取或建立工作區,EMRNotebooks 使用者需要額外IAM的角色許可。如需詳細資訊,請參閱主控台中的 Amazon EMR Notebooks 是 Amazon EMR Studio WorkspacesAmazon 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版,您必須採取其他步驟,才能在叢集的主要節點上安裝核心和程式庫。

若要啟用此功能,請執行下列操作:

  1. 請確定連接至 EMR Notebooks 服務角色的許可政策允許下列動作:

    elasticmapreduce:ListSteps

    如需詳細資訊,請參閱EMR筆記本 的服務角色

  2. 使用 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"]

可以使用 pipconda 在主節點的 /emr/notebook-env/bin 目錄中安裝核心和程式庫。

範例 - 安裝 Python 程式庫

從 Python3 核心中,在筆記本儲存格內以命令的形式執行 %pip magic 來安裝 Python 程式庫。

%pip install pmdarima

可能需要重新啟動核心才能使用已更新的套件。也可以使用 %%sh Spark magic 來調用 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 程式庫安裝為筆記本範圍程式庫,其中包含程式庫版本 和儲存庫 的規格URL。

sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
範例 – 解除安裝程式庫

下列指令會解除安裝 Arrow 程式庫,並將其做為筆記本範圍的程式庫從目前工作階段中移除。

sc.uninstall_package("arrow")