

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

# 在 EMR Studio 中安装和使用内核和库
<a name="emr-managed-notebooks-installing-libraries-and-kernels"></a>

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

**注意**  
EMR Notebooks 在控制台中作为 Amazon EMR Studio Workspaces 提供。通过控制台中的**创建 Workspace** 按钮，可以创建新的 Notebooks。要访问或创建 Workspaces，EMR Notebooks 用户需要额外的 IAM 角色权限。有关更多信息，请参阅 [Amazon EMR Notebooks 是控制台中的 Amazon EMR Studio Workspaces](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-migration.html) 和 [Amazon EMR 控制台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html)。<a name="emr-managed-notebooks-serverless"></a>

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 库
<a name="emr-managed-notebooks-cluster-kernel"></a>

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

**注意**  
对于 Amazon EMR 版本 5.30.1、5.31.0 和 6.1.0，您必须采取额外的步骤才能在集群的主节点上安装内核和库。  
要启动此功能，请执行以下操作：  
确保附加到 EMR Notebooks 服务角色的权限策略允许执行以下操作：  
`elasticmapreduce:ListSteps`  
有关更多信息，请参阅 [EMR Notebooks 的服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-service-role.html)。
使用在 AWS CLI 设置 EMR Notebooks 的集群上运行一个步骤，如以下示例所示。您必须使用步骤名称 `EMRNotebooksSetup`。*us-east-1*替换为集群所在的区域。有关更多信息，请参阅[使用 AWS CLI向集群中添加步骤](https://docs.aws.amazon.com/emr/latest/ManagementGuide/add-step-cli.html)。  

   ```
   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` 目录中安装内核和库。

**Example ：安装 Python 库**  
在 Python3 内核中运行 `%pip` magic，以作为在 Notebook 单元中安装 Python 库的命令。  

```
%pip install pmdarima
```
您可能需要重启内核才能使用更新后的软件包。您也可以使用 [https://ipython.readthedocs.io/en/stable/interactive/magics.html#cellmagic-sh](https://ipython.readthedocs.io/en/stable/interactive/magics.html#cellmagic-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
```
此外，您还可以使用 Notebook 范围的库。借助 Notebook 范围的库，库安装将仅限于会话范围，并在所有 Spark 执行器上进行。有关更多信息，请参阅 [使用 Notebook 范围的库](#emr-managed-notebooks-custom-libraries-limitations)。  
如果要在一个内 PySpark 核中打包多个 Python 库，也可以创建一个隔离的 Python 虚拟环境。有关使用示例，请参阅 [使用 Virtualenv](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-virtualenv)。  
要在会话中创建 Python 虚拟环境，请 Notebook 中第一个单元中使用 `%%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`。有关更多信息，请参阅 [使用 SSH 连接到 Amazon EMR 集群主节点](emr-connect-master-node-ssh.md)。

**Example ：安装内核**  
以下示例演示在连接到集群的主节点时如何使用终端命令安装 Kotlin 内核：  

```
sudo /emr/notebook-env/bin/conda install kotlin-jupyter-kernel -c jetbrains
```
这些说明不安装内核依赖项。如果您的内核具有第三方依赖项，您可能需要执行额外的设置步骤，然后才能在 Notebook 上使用内核。

## Notebook 范围的库注意事项和限制
<a name="emr-managed-notebooks-custom-libraries-limitations"></a>

使用 Notebook 范围的库时，请注意以下几点：
+ 使用 Amazon EMR 发行版 5.26.0 及更高版本创建的集群现已提供 Notebook 电脑实例范围的库。
+ Notebook 范围的库只能与内核一起使用。 PySpark
+ 任何用户均可从 Notebook 单元中安装其它 Notebook 范围的库。这些库仅在单个 Notebook 会话期间对 Notebook 用户可用。如果其它用户需要相同的库，或者同一用户在不同的会话中需要相同的库，则必须重新安装该库。
+ 您只能卸载使用 `install_pypi_package` API 安装的库，而不能卸载集群上预装的任何库。
+ 如果不同版本的相同库分别安装在了集群上和用作 Notebook 范围的库，则 Notebook 范围的库版本将覆盖集群库版本。

## 使用 Notebook 范围的库
<a name="emr-managed-notebooks-work-with-libraries"></a>

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

以下示例演示了使用内 PySpark 核和从笔记本单元中列出、安装和卸载库的简单命令 APIs。有关其他示例，请参阅大数据博客[上的 “使用 EMR Notebooks 在正在运行的集群上安装 Python 库 AWS ” 一](https://aws.amazon.com/blogs/big-data/install-python-libraries-on-a-running-cluster-with-emr-notebooks/)文。

**Example ：列出当前库**  
以下命令列出了可用于当前 Spark Notebook 会话的 Python 包。这将列出集群上安装的库以及 Notebook 范围的库。  

```
sc.list_packages()
```

**Example ：安装 Celery 库**  
以下命令安装 [Celery](https://pypi.org/project/celery/) 库作为 Notebook 范围的库。  

```
sc.install_pypi_package("celery")
```
安装库后，以下命令将确认该库在 Spark 驱动程序和执行程序上是否可用。  

```
import celery
sc.range(1,10000,1,100).map(lambda x: celery.__version__).collect()
```

**Example ：安装 Arrow 库，指定版本和存储库**  
以下命令安装 [Arrow](https://pypi.org/project/arrow/) 库作为 Notebook 范围的库，并指定库版本和存储库 URL。  

```
sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
```

**Example ：卸载库**  
以下命令卸载 Arrow 库，将其作为 Notebook 范围的库从当前会话中删除。  

```
sc.uninstall_package("arrow")
```