本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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,您必须采取其他步骤才能在集群的主节点上安装内核和库。
要启动此功能,请执行以下操作:
-
确保附加到 Notebook 服务角色的权限EMR策略允许执行以下操作:
elasticmapreduce:ListSteps
有关更多信息,请参阅EMR笔记本的服务角色。
-
使用在 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"]
您可以通过使用 pip
或 conda
在主节点上的 /emr/notebook-env/bin
目录中安装内核和库。
例 – 安装 Python 库
在 Python3 内核中运行 %pip
magic,以作为在笔记本单元中安装 Python 库的命令。
%pip install pmdarima
您可能需要重启内核才能使用更新后的软件包。您也可以使用 %%sh
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_package
API。而不能卸载集群上预装的任何库。 -
如果不同版本的相同库分别安装在了集群上和用作笔记本范围的库,则笔记本范围的库版本将覆盖集群库版本。
使用笔记本范围的库
要安装库,您的 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
sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
例 – 卸载库
以下命令卸载 Arrow 库,将其作为笔记本范围的库从当前会话中删除。
sc.uninstall_package("arrow")