在 Studio 中EMR安装和使用内核和库 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Studio 中EMR安装和使用内核和库

每EMR台笔记本电脑都附带一组预装的库和内核。如果EMR集群有权访问内核和库所在的存储库,则可以在集群中安装其他库和内核。例如,对于私有子网中的集群,您可能需要配置网络地址转换 (NAT),并为集群提供访问公共 PyPI 存储库的路径以安装库。有关为不同网络配置配置外部访问的更多信息,请参阅 Amazon VPC 用户指南中的场景和示例

注意

EMR笔记本电脑可在控制台中作为 EMR Studio 工作区使用。控制台中的 “创建工作区” 按钮允许您创建新的笔记本。要访问或创建工作区,EMRNotebook 用户需要额外的IAM角色权限。有关更多信息,请参阅 Amazon EMR Notebook 是控制台和亚马逊控制台中的 Ama z EMR on EMR Studio 工作空间。

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 EMR 发行版 5.30.0 及更高版本(不包括 6.0.0)中,您可以在集群的主节点上安装其他 Python 库和内核。安装完成后,任何运行连接到集群的EMR笔记本的用户都可以使用这些内核和库。通过此方式安装的 Python 库仅适用于主节点上运行的进程。这些库不会安装到核心节点或任务节点上,也不适用于这些节点上运行的执行程序。

注意

对于 Amazon EMR 版本 5.30.1、5.31.0 和 6.1.0,您必须采取其他步骤才能在集群的主节点上安装内核和库。

要启动此功能,请执行以下操作:

  1. 确保附加到 Notebook 服务角色的权限EMR策略允许执行以下操作:

    elasticmapreduce:ListSteps

    有关更多信息,请参阅EMR笔记本的服务角色

  2. 使用在 AWS CLI 集群上运行设置 EMR Notebook 的步骤,如以下示例所示。您必须使用步骤名称 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
注意

这些说明不安装内核依赖项。如果您的内核具有第三方依赖项,您可能需要执行额外的设置步骤,然后才能在笔记本上使用内核。

笔记本范围的库注意事项和限制

使用笔记本范围的库时,请注意以下几点:

  • Notebook 范围的库适用于您使用 Amazon 5.26.0 及更高EMR版本创建的集群。

  • Notebook 范围的库只能与内核一起使用。 PySpark

  • 任何用户均可从笔记本单元中安装其它笔记本范围的库。这些库仅在单个笔记本会话期间对笔记本用户可用。如果其它用户需要相同的库,或者同一用户在不同的会话中需要相同的库,则必须重新安装该库。

  • 您只能卸载随安装的库install_pypi_packageAPI。而不能卸载集群上预装的任何库。

  • 如果不同版本的相同库分别安装在了集群上和用作笔记本范围的库,则笔记本范围的库版本将覆盖集群库版本。

使用笔记本范围的库

要安装库,您的 Amazon EMR 集群必须有权访问库所在的 PyPI 存储库。

以下示例演示了使用内 PySpark 核和从笔记本单元中列出、安装和卸载库的简单命令APIs。有关其他示例,请参阅 AWS 大数据博客上的 “使用 EMR Notebook 在正在运行的集群上安装 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 库,指定版本和存储库

以下命令将 A rrow 库安装为笔记本范围的库,并指定库版本和存储库。URL

sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
例 – 卸载库

以下命令卸载 Arrow 库,将其作为笔记本范围的库从当前会话中删除。

sc.uninstall_package("arrow")