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

安装并使用内核和库

注意

EMR Notebooks 在新控制台中作为 Amazon EMR Studio Workspaces 提供。您仍然可以在旧控制台中使用现有笔记本,但无法在其中创建新笔记本。新控制台中的创建 Workspace 按钮将取代此功能。要访问或创建 Workspaces,EMR Notebooks 用户需要额外的 IAM 角色权限。有关更多信息,请参阅 Amazon EMR Notebooks are Amazon EMR Studio Workspaces in new console(Amazon EMR Notebooks 在新控制台中为 Amazon EMR Studio Workspaces)和 What's new in the console?(控制台中有哪些新功能?)

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

EMR Serverless 应用程序预装了以下适用于 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. 确保附加到 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 在主节点上的 /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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/prefix/my_pyspark_venv.tar.gz#environment", "spark.submit.deployMode":"cluster" } }

您还可以使用 conda 来安装 Python 库。您不需要 sudo 访问权限即可使用 conda。您必须使用 SSH 连接到主节点,然后从终端运行 conda。有关更多信息,请参阅使用 SSH 连接到主节点

例 – 安装内核

以下示例演示在连接到集群的主节点时如何使用终端命令安装 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")