安装并使用内核和库
每个 EMR 笔记本均附带了一组预安装的库和内核。如果 Amazon EMR 集群有权访问内核和库所在的存储库,则您可以在该集群中安装其它库和内核。例如,对于私有子网中的集群,您可能需要配置网络地址转换 (NAT),并为集群提供路径来访问公有 PyPI 存储库以安装库。有关为不同网络配置配置外部访问的更多信息,请参阅《Amazon VPC 用户指南》中的场景和示例。
在集群主节点上安装内核和 Python 库
对于 Amazon EMR 发行版 5.30.0 及更高版本(不包括 6.0.0),您可以在集群的主节点上安装其它 Python 库和内核。安装后,这些内核和库可供运行已附加到集群的 EMR 笔记本的任何用户使用。通过此方式安装的 Python 库仅适用于主节点上运行的进程。这些库不会安装到核心节点或任务节点上,也不适用于这些节点上运行的执行程序。
对于 EMR 版本 5.30.1、5.31.0 和 6.1.0,您必须采取额外的步骤才能在集群的主节点上安装内核和库。
要启动此功能,请执行以下操作:
确保附加到 EMR Notebooks 服务角色的权限策略允许执行以下操作:
elasticmapreduce:ListSteps
有关更多信息,请参阅 EMR Notebooks 的服务角色。
使用 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"]
您可以通过使用 pip
或 conda
在主节点上的 /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) 。
以下示例演示在连接到集群的主节点时如何使用终端命令安装 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
sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
例 – 卸载库
以下命令卸载 Arrow 库,将其作为笔记本范围的库从当前会话中删除。
sc.uninstall_package("arrow")