安装并使用内核和库 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

安装并使用内核和库

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

在集群主节点 (master node) 上安装内核和 Python 库

对于 Amazon EMR 发行版 5.30.0 及更高版本(不包括 6.0.0),您可以在集群的主节点 (master node) 上安装其他 Python 库和内核。安装后,这些内核和库可供运行已附加到集群的 EMR Notebooks 的任何用户使用。通过此方式安装的 Python 库仅适用于主节点上运行的进程。这些库不会安装到核心节点或任务节点上,也不适用于这些节点上运行的执行程序。

注意

对于 EMR 版本 5.30.1、5.31.0 和 6.1.0,您必须采取额外的步骤才能在集群的主节点 (master node) 上安装内核和库。

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

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

    elasticmapreduce:ListSteps

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

  2. 使用 Amazon CLI 在集群上运行一个设置 EMR Notebooks 的步骤,如以下示例所示。您必须使用步骤名称 EMRNotebooksSetup。将 us-east-1 替换为您的集群所在的区域。有关更多信息,请参阅使用 Amazon 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 在主节点 (master node) 上的 /emr/notebook-env/bin 目录中安装内核和库。

当您连接到 Python3 内核时,您可以在笔记本单元中作为终端命令运行 /emr/notebook-env/bin/pip。当您使用 PySpark 内核时,您可以使用 %%sh Sparkmagic 来调用 pip

%%sh /emr/notebook-env/bin/pip install -u <library-name>

需要 sudo 访问权限才能使用 conda。您必须使用 SSH 连接到主节点,然后从终端运行 conda。有关更多信息,请参阅使用 SSH 连接到主节点 (master node)

以下示例演示在连接到集群的主节点 (master node) 时如何使用终端命令安装 Kotlin 内核:

sudo /emr/notebook-env/bin/conda install kotlin-jupyter-kernel -c jetbrains
注意

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

使用笔记本范围的库

借助使用 Amazon EMR 发行版本 5.26.0 或更高版本创建的集群,可使用笔记本范围的库。笔记本范围的库只能与 PySpark 内核结合使用。任何用户均可从笔记本单元中安装其他笔记本范围的库。这些库仅在单个笔记本会话期间对笔记本用户可用。如果其他用户需要相同的库,或者同一用户在不同的会话中需要相同的库,则必须重新安装该库。

注意事项和限制

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

  • 您只能卸载使用 install_pypi_package API 安装的库。您无法卸载集群上预安装的任何库。

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

使用笔记本范围的库

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

以下示例演示了一些简单命令,这些命令使用 PySpark 内核和 API 从笔记本单元中列出、安装和卸载库。有关其他示例,请参阅 Amazon 大数据博客上的 Install Python libraries on a running cluster with EMR Notebooks 一文。

例 – 列出当前库

以下命令列出了可用于当前 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")