

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

# Amazon EMR Notebooks 概述
<a name="emr-managed-notebooks"></a>

**注意**  
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)。

您可以使用亚马逊 EMR 笔记本和[运行 Apache](https://aws.amazon.com/emr/features/spark/) Spark 的亚马逊 EMR 集群在亚马逊 EMR 控制台 JupyterLab中创建和[打开](https://jupyter.org) Jupyter 笔记本和界面。EMR Notebook 是一款“无服务器”Notebook，可用于运行查询和代码。与传统 Notebook 不同，EMR Notebook 的内容（Notebook 单元格中的方程、查询、模型、代码和叙述性文本）在客户端中运行。命令是使用 EMR 集群上的内核执行的。Notebook 内容也将独立于集群数据保存到 Amazon S3 中以实现持久性和灵活重用。

您可以启动集群，附加 EMR Notebook 以进行分析，然后终止集群。您还可以关闭已附加到一个正在运行的集群的 Notebook 并切换到另一个 Notebook。多个用户可以同时将 Notebooks 附加到同一个集群，并在 Amazon S3 中相互共享 Notebook 文件。利用这些功能，您可以按需运行集群以节省成本，并减少为不同的集群和数据集重新配置 Notebooks 所花费的时间。

您还可以使用 Amazon EMR API 以编程方式执行 EMR Notebook，而无需与 Amazon EMR 控制台交互（“无头执行”）。您需要在具有参数标签的 EMR Notebook 中包含一个单元格。该单元格允许脚本将新输入值传递给 Notebook。参数化 Notebooks 可以通过不同的输入值集重复使用。无需复制同一 Notebook 以使用新输入值进行编辑和执行。针对参数化 Notebook 的每次运行，Amazon EMR 都在 S3 上创建并保存输出 Notebook。有关 EMR Notebook API 代码示例，请参阅[EMR Notebooks 的示例编程命令](emr-managed-notebooks-headless.md)。

**重要**  
EMR Notebooks 的功能支持使用 Amazon EMR 5.18.0 及更高版本的集群。建议您将 EMR Notebooks 与使用最新版 Amazon EMR（或最低 5.30.0、5.32.0 或 6.2.0 版本）的集群配合使用。在这些版本中，Jupyter 内核在附加的集群而不是 Jupyter 实例上运行。这有助于提高性能并增强您自定义内核和库的能力。有关更多信息，请参阅 [集群发行版的功能差异](emr-managed-notebooks-considerations.md#considerations-cluster-version)。

对于 Amazon S3 存储和 Amazon EMR 集群收取适用的费用。

# Amazon EMR Notebooks 在控制台中作为 Amazon EMR Studio Workspaces 提供
<a name="emr-managed-notebooks-migration"></a>

## 从 EMR Notebooks 过渡到 Workspaces
<a name="emr-notebooks-workspaces-transition"></a>

在 [Amazon EMR 新控制台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html)中，我们已将 EMR Notebooks 与 Amazon EMR Studio Workspaces 合并为一种体验。使用 EMR Studio 后，您可以创建和配置不同的 Workspaces 来组织和运行 Notebooks。如果旧控制台中有 Amazon EMR Notebooks，则会在控制台中作为 EMR Studio Workspaces 提供。

Amazon EMR 为您创建了这些新的 EMR Studio Workspaces。我们创建的 Studios 数量与您在 EMR Notebooks 中使用 VPCs 的 distudio 数量相对应。例如，如果您连接到 EMR Notebooks 两个不同 VPCs的 EMR 集群，那么我们就创建了两个新的 EMR Studios。您的 Notebooks 将在新的 Studios 中分发。

**重要**  
我们关闭了在 Amazon EMR 旧控制台中创建新 Notebooks 的选项。改用 Amazon EMR 新控制台中的 **Create Workspace**（创建 Workspace）。

有关 Amazon EMR Studio Workspaces 的更多信息，请参阅 [了解 EMR Studio Workspaces](emr-studio-configure-workspace.md)。有关 EMR Studio 的概念性概述，请参阅 [Amazon EMR Studio 工作原理](how-emr-studio-works.md) 页面上的 [Workspaces](how-emr-studio-works.md#emr-studio-workspaces)。

## 您需要做什么？
<a name="emr-notebooks-workspaces-prepare"></a>

虽然您仍然可以在旧控制台中使用现有的 Notebooks，但还是建议您在控制台中改用 Amazon EMR Studio Workspaces。您必须配置其他角色权限才能开启[在 EMR Notebooks 中不可用的 EMR Studio 中的功能](#emr-notebooks-workspaces-enhancements)。

**注意**  
至少，要将现有 EMR Notebooks 视为 EMR Studio Workspaces 并创建新的 Workspaces，用户必须对其角色具有 `elasticmapreduce:ListStudios` 和 `elasticmapreduce:CreateStudioPresignedUrl` 权限。要访问所有 EMR Studio 功能，请参阅 [为 EMR Notebooks 用户启用 EMR Studio 功能](#emr-notebooks-workspaces-enable) 以获得 EMR Notebooks 用户所需的增加权限的完整列表。

## EMR Studio 中超越 EMR Notebooks 的增强功能
<a name="emr-notebooks-workspaces-enhancements"></a>

借助 Amazon EMR Studio，您可以设置和使用 EMR Notebooks 不具备的以下功能：
+ [从 Jupyterlab 中浏览并附加到 EMR 集群](emr-studio-create-use-clusters.md)
+ [从 Jupyterlab 中浏览并附加到 EMR Notebooks 虚拟集群](emr-studio-create-use-clusters.md)
+ [从 Jupyterlab 中连接到 Git 存储库](emr-studio-git-repo.md)
+ [与团队的其他成员合作编写和运行 Notebook 代码](emr-studio-workspace-collaboration.md)
+ [用 SQL Explorer 浏览数据](emr-studio-sql-explorer.md)
+ [使用 Service Catalog 预置 EMR 集群](emr-studio-cluster-templates.md)

有关 Amazon EMR Studio 功能的完整列表，请参阅 [EMR Studio 主要功能](emr-studio.md#emr-studio-key-features)。

## 为 EMR Notebooks 用户启用 EMR Studio 功能
<a name="emr-notebooks-workspaces-enable"></a>

作为此合并的一部分，我们将创建的新 EMR Studios，使用现有的 `EMR_Notebooks_DefaultRole` IAM 角色作为 EMR Studio 服务角色。

从 EMR Notebooks 过渡到 EMR Studio 并希望使用 EMR Studio 其他功能的用户需要几个新的角色权限。为计划使用 EMR Studio 的 EMR Notebooks 用户的角色添加以下权限。

**注意**  
至少，要将现有 EMR Notebooks 视为 EMR Studio Workspaces 并创建新的 Workspaces，用户必须对其角色具有 `elasticmapreduce:ListStudios` 和 `elasticmapreduce:CreateStudioPresignedUrl` 权限。要使用所有 EMR Studio 功能，请添加下面列出的所有权限。管理员用户还需要创建和管理 EMR Studio 的权限。有关更多信息，请参阅 [创建和管理 EMR Studio 所需的管理员权限](emr-studio-admin-permissions.md)。

```
"elasticmapreduce:DescribeStudio", 
"elasticmapreduce:ListStudios",
"elasticmapreduce:CreateStudioPresignedUrl",
"elasticmapreduce:UpdateEditor", 
"elasticmapreduce:PutWorkspaceAccess", 
"elasticmapreduce:DeleteWorkspaceAccess", 
"elasticmapreduce:ListWorkspaceAccessIdentities",
"emr-containers:ListVirtualClusters", 
"emr-containers:DescribeVirtualCluster", 
"emr-containers:ListManagedEndpoints", 
"emr-containers:DescribeManagedEndpoint", 
"emr-containers:CreateAccessTokenForManagedEndpoint",
"emr-containers:ListJobRuns", 
"emr-containers:DescribeJobRun",
"servicecatalog:SearchProducts", 
"servicecatalog:DescribeProduct", 
"servicecatalog:DescribeProductView", 
"servicecatalog:DescribeProvisioningParameters", 
"servicecatalog:ProvisionProduct", 
"servicecatalog:UpdateProvisionedProduct", 
"servicecatalog:ListProvisioningArtifacts", 
"servicecatalog:DescribeRecord", 
"servicecatalog:ListLaunchPaths", 
"cloudformation:DescribeStackResources"
```

使用 EMR Studio 中的协作功能还需要以下权限，但 EMR Notebooks 不需要这些权限。

```
"sso-directory:SearchUsers",
"iam:GetUser", 
"iam:GetRole", 
"iam:ListUsers", 
"iam:ListRoles", 
"sso:GetManagedApplicationInstance"
```

# EMR Notebooks 的要求、发行版本差异和安全性
<a name="emr-managed-notebooks-considerations"></a>

**注意**  
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)。

使用 EMR Notebook 创建集群和开发解决方案时，请考虑以下要求、发行版本差异、安全信息和其他注意事项。

## 集群要求
<a name="considerations-limitations"></a>
+ **启用 Amazon EMR 阻止公有访问**：通过对集群进行入站访问，集群用户能够执行 Notebook 内核。确保只有授权用户才能访问集群。我们强烈建议您将阻止公有访问保持启用状态，并将入站 SSH 流量仅限于可靠来源。有关更多信息，请参阅[使用 Amazon EMR 阻止公有访问](emr-block-public-access.md)和[使用 Amazon EMR 集群的安全组控制网络流量](emr-security-groups.md)。
+ **使用兼容的集群**：附加到 Notebook 的集群必须满足以下要求：
  + 仅支持使用 Amazon EMR 创建的集群。您可以在 Amazon EMR 中单独创建集群，然后附加 EMR Notebook，也可以在创建 EMR Notebook 时创建可兼容的集群。
  + 仅支持使用 Amazon EMR 发行版 5.18.0 及更高版本创建的集群。请参阅[集群发行版的功能差异](#considerations-cluster-version)。
  + 不支持使用具有 AMD EPYC 处理器的 Amazon EC2 实例创建的集群（例如 m5a.\$1 和 r5a.\$1 实例类型）。
  + EMR Notebooks 仅适用于在 `VisibleToAllUsers` 设置为 `true` 的情况下创建的集群。默认情况下 `VisibleToAllUsers` 为 `true`。
  + 必须在 EC2-VPC 内启动集群。支持公有和私有子网。不支持 EC2-Classic 平台。
  + 启动的集群必须安装有 Hadoop、Spark 和 Livy。可以安装其它应用程序，但 EMR Notebooks 目前仅支持 Spark 集群。
**重要**  
对于 Amazon EMR 发行版本 5.32.0 及更高版本或 6.2.0 及更高版本，您的集群还必须运行 Jupyter Enterprise Gateway 应用程序才能使用 EMR Notebooks。
  + 不支持使用 Kerberos 身份验证的集群。
  + 与集成的集群仅 AWS Lake Formation 支持安装笔记本电脑范围的库。不支持在集群上安装内核和库。
  + 不支持具有多个主节点的集群。
  + 不支持使用基于 AWS Graviton2 的 Amazon EC2 实例的集群。

## 集群发行版的功能差异
<a name="considerations-cluster-version"></a>

我们强烈建议您将 EMR Notebooks 与使用 Amazon EMR 发行版本 5.30.0、5.32.0 或更高版本或 6.2.0 或更高版本创建的集群一起使用。借助这些版本，EMR Notebooks 在附加的 Amazon EMR 集群上运行内核。内核和库可直接安装到集群主节点上。将 EMR Notebooks 与这些集群版本结合使用具有以下好处：
+ **提高了性能**：Notebook 内核在具有所选 EC2 实例类型的集群上运行。早期版本在无法调整大小、访问或自定义的专用实例上运行内核。
+ **能够添加和自定义内核**：您可以使用 `conda` 和 `pip` 连接到集群来安装内核包。此外，支持在 Notebook 单元中使用终端命令来安装 `pip`。在早期版本中，只有预装的内核可用（Python、 PySpark、Spark 和 SparkR）。有关更多信息，请参阅 [在集群主节点上安装内核和 Python 库](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel)。
+ **能够安装 Python 库** - 您可以使用 `conda` 和 `pip` [在集群主节点上安装 Python 库](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel)。我们建议使用 `conda`。在早期版本中，仅[支持笔记本电脑范围的库](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-custom-libraries-limitations)。 PySpark 


**集群版本支持的 EMR Notebooks 功能**  

| 集群发布版本 | 笔记本级库适用于 PySpark | 集群上的内核安装 | 主节点上的 Python 库安装 | 
| --- | --- | --- | --- | 
|  版本 5.18.0 之前的版本  |  不支持 EMR Notebooks  | 
|  5.18.0–5.25.0  |  否  |  否  |  否  | 
|  5.26.0–5.29.0  |  [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-custom-libraries-limitations)  |  否  |  否  | 
|  5.30.0  |  [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-custom-libraries-limitations)  |  [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel)  |  [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel)  | 
|  6.0.0  |  否  |  否  |  否  | 
| 5.32.0 及更高版本，以及 6.2.0 及更高版本 | [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-custom-libraries-limitations) | [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel) | [是](emr-managed-notebooks-installing-libraries-and-kernels.md#emr-managed-notebooks-cluster-kernel) | 

## 并发附加的 EMR Notebooks 的限制
<a name="emr-managed-notebooks-cluster-limits"></a>

创建支持 Notebooks 的集群时，请考虑集群主节点的 EC2 实例类型。此 EC2 实例的内存限制决定了可以同时准备好在集群上运行代码和查询的 Notebooks 的数量。


| 主节点 EC2 实例类型 | EMR Notebooks 数量 | 
| --- | --- | 
|  \$1.medium  |  2  | 
|  \$1.large  |  4  | 
|  \$1.xlarge  |  8  | 
|  \$1.2xlarge  |  16  | 
|  \$1.4xlarge  |  24  | 
|  \$1.8xlarge  |  24  | 
|  \$1.16xlarge  |  24  | 

## Jupyter Notebook 和 Python 版本
<a name="considerations-versions"></a>

EMR Notebooks 运行 [Jupyter Notebook 版本 6.0.2](https://jupyter-notebook.readthedocs.io/en/stable/changelog.html#release-6-0-2) 和 Python 3.6.5，而不管附加的集群的 Amazon EMR 发行版本如何。

## 安全注意事项
<a name="considerations-notebooks-security"></a>

**使用加密的 S3 位置**  
如果在 Amazon S3 中指定一个加密位置来存储 Notebook 文件，则必须将 [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md) 设置为密钥用户。默认服务角色为 `EMR_Notebooks_DefaultRole`。如果您使用 AWS KMS 密钥进行加密，请参阅 AWS Key Management Service 开发人员指南[中的在 AWS KMS 中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)和[添加密钥用户的支持文章](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/)。

**在托管域中使用 Cookie**  
为了增强可能与 Amazon EMR 结合使用的非控制台应用程序的安全性，应用程序托管域已在公共后缀列表（PSL）中注册。这些托管域的示例包括以下各项：`emrstudio-prod.us-east-1.amazonaws.com`、`emrnotebooks-prod.us-east-1.amazonaws.com`、`emrappui-prod.us-east-1.amazonaws.com`。为进一步增强安全性，如果您需要在默认域名中设置敏感 Cookie，我们建议您使用带 `__Host-` 前缀的 Cookie。这将有助于保护您的域，防范跨站点请求伪造（CSRF）攻击。有关更多信息，请参阅 *Mozilla 开发者网络*中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

# 在 EMR Studio 中创建 Notebook
<a name="emr-managed-notebooks-create"></a>

**注意**  
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)。

您可以使用旧 Amazon EMR 控制台创建 EMR Notebook。不支持使用 AWS CLI 或 Amazon EMR API 创建笔记本。

**创建 EMR Notebooks**

1. 打开 Amazon EMR 控制台（[https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/)）。

1. 依次选择 **Notebooks**、**Create notebook (创建 Notebook)**。

1. 在 **Notebook name (Notebook 名称)** 中输入一个名称，在 **Notebook description (Notebook 描述)**（可选）中输入相关描述。

1. 如果您有一个要向其附加 Notebook 的活动集群，请将默认值 **Choose an existing cluster (选择现有集群)** 保持选中状态，单击 **Choose (选择)**，从列表中选择集群，然后单击 **Choose cluster (选择集群)**。有关 EMR Notebooks 的集群要求的信息，请参阅[EMR Notebooks 的要求、发行版本差异和安全性](emr-managed-notebooks-considerations.md)。

   **—或者—**

   选择 **Create a cluster (创建集群)**，输入 **Cluster name (集群名称)**，然后根据以下准则选择选项。使用按需型实例在账户的默认 VPC 中创建集群。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-managed-notebooks-create.html)

1. 对于 **Security groups (安全组)**，选择 **Use default security groups (使用默认安全组)**。或者，选择 **Choose security groups (选择安全组)**，然后选择集群的 VPC 中可用的自定义安全组。您应为主实例选择一个安全组，为 Notebook 客户端实例选择另一个安全组。有关更多信息，请参阅 [为 EMR Notebooks 指定 EC2 安全组](emr-managed-notebooks-security-groups.md)。

1. 对于 **AWS Service Role (亚马逊云科技服务角色)**，保留默认设置或从列表中选择一个自定义角色。Notebook 的客户端实例将使用此角色。有关更多信息，请参阅[EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)。

1. 对于 **Notebook location (Notebook 位置)**，选择 Notebook 文件在 Amazon S3 中的保存位置，或指定自己的位置。如果存储桶和文件夹不存在，Amazon EMR 会进行创建。

   Amazon EMR 会创建一个文件夹名称为**Notebook ID** 的文件夹，并将此 Notebook 保存到名为 `NotebookName.ipynb` 的文件中。例如，如果为名为 `MyFirstEMRManagedNotebook` 的 Notebook 指定 Amazon S3 位置 `s3://amzn-s3-demo-bucket/MyNotebooks`，则该 Notebook 文件将保存到 `s3://amzn-s3-demo-bucket/MyNotebooks/NotebookID/MyFirstEMRManagedNotebook.ipynb` 下。

   如果在 Amazon S3 中指定一个加密位置，则必须将 [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md) 设置为密钥用户。默认服务角色为 `EMR_Notebooks_DefaultRole`。如果您使用 AWS KMS 密钥进行加密，请参阅 AWS Key Management Service 开发人员指南[中的在 AWS KMS 中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)和[添加密钥用户的支持文章](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/)。

1. （可选）如果您已将基于 Git 的存储库添加到要与此 Notebook 关联的 Amazon EMR，请选择 **Git repository (Git 存储库)**，单击 **Choose repository (选择存储库)**，然后从列表中选择一个存储库。有关更多信息，请参阅[将基于 Git 的存储库与 EMR Notebooks 关联](emr-git-repo.md)。

1. （可选）选择 **Tags (标签)**，然后为该 Notebook 添加其它键-值标签。
**重要**  
其中 **Key (键)** 字符串设置为 `creatorUserID`，值设置为您的 IAM 用户 ID 的默认标签用于访问目的。我们建议您不要更改或删除此标签，因为它可用于控制访问权限。有关更多信息，请参阅[将集群和 Notebook 标签与访问控制 IAM policy 结合使用](security_iam_service-with-iam.md#emr-tag-based-access)。

1. 选择 **Create Notebook (创建 Notebook)**。

# 使用 EMR Notebooks
<a name="emr-managed-notebooks-working-with"></a>

**注意**  
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)。

创建 EMR Notebook 后，在很短的时间内便可启动该 Notebook。**Notebooks** 列表中的 **Status (状态)** 显示为 **Starting (正在启动)**。Notebook 的状态为 **Ready (就绪)** 时，便可将其打开。如果您随 Notebook 一同创建了集群，则 Notebook 变为 **Ready (就绪)** 状态可能需要较长的时间。

**提示**  
刷新浏览器或选择 Notebooks 列表上方的刷新图标来刷新 Notebook 状态。

## 了解 Notebook 状态
<a name="emr-managed-notebooks-status"></a>

EMR Notebook 可以在 **Notebooks** 列表中具有以下 **Status (状态)**。


| Status | 含义 | 
| --- | --- | 
|  Ready (就绪)  |  您可以使用 Notebook 编辑器打开 Notebook。Notebook 的状态为 **Ready (就绪)** 时，您可以将其停止或删除。要更改集群，您必须先停止 Notebook。如果处于 **Ready (就绪)** 状态的 Notebook 长时间空闲，它将自动停止。  | 
|  Starting (正在启动)  |  正在创建 Notebook 并将其附加到集群。Notebook 处于“Starting (正在启动)”状态时，您无法打开 Notebook 编辑器，也无法停止、删除它或更改集群。  | 
|  Pending (待处理)  |  已创建 Notebook，正在等待与待完成的集群集成。集群可能仍在预配置资源，也可能在响应其它请求。您可以在*本地模式*中使用 Notebook 打开 Notebook 编辑器。依赖于集群过程的任何代码均不会执行和失败。  | 
|  Stopping (正在停止)  |  正在关闭 Notebook 或正在终止该 Notebook 附加到的集群。Notebook 处于“Stopping (正在停止)”状态时，您无法打开 Notebook 编辑器，也无法停止、删除它或更改集群。  | 
|  Stopped (已停止)  |  Notebook 已关闭。只要集群仍在运行，您就可以在同一个集群上启动 Notebook。您可以更改集群，也可以删除该集群。  | 
|  Deleting (正在删除)  |  正在从可用集群列表中删除该集群。Notebook 文件`NotebookName.ipynb `会保留在 Amazon S3 中，并继续产生适用的存储费用。  | 

## 使用 Notebook 编辑器
<a name="emr-managed-notebooks-editor"></a>

使用 EMR 笔记本的一个好处是，你可以在 Jupyter 中启动笔记本或者 JupyterLab 直接从主机启动。

有了 EMR Notebooks，你从 Amazon EMR 控制台访问的笔记本编辑器就是熟悉的开源 Jupyter Notebook 编辑器或。 JupyterLab由于 Notebook 编辑器是在 Amazon EMR 控制台内启动的，与使用 Amazon EMR 集群上托管的 Notebook 相比，配置访问权限更高效。您无需将用户客户端配置为通过 SSH、安全组规则以及代理配置进行 Web 访问。如果用户具有足够的权限，他们只需在 Amazon EMR 控制台内打开 Notebook 编辑器即可。

一次只能有一个用户从 Amazon EMR 中打开 EMR Notebook。如果其它用户尝试打开已打开的 EMR Notebook，则会发生错误。

**重要**  
Amazon EMR 为每个 Notebook 编辑器会话创建一个唯一的预签名 URL，该 URL 仅在短时间内有效。我们建议您不要共享 Notebook 编辑器 URL。这样做会产生安全风险，因为 URL 的收件人会采用您的权限来编辑 Notebook 并在 URL 的生命周期内运行 Notebook 代码。如果其他人需要访问 Notebook，请通过权限策略向其用户提供权限，并确保 EMR Notebooks 的服务角色有权访问 Amazon S3 位置。有关更多信息，请参阅[EMR Notebooks 安全性和访问控制](emr-managed-notebooks-security.md)和[EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)。

**为 EMR Notebook 打开 Notebook 编辑器**

1. 从**笔记本**列表中选择**状态**为**就绪**或**待处理**的笔记本。

1. 选择 “**打开方式” JupyterLab 或 “在** **Jupyter 中打开**”。

    JupyterLab 或 Jupyter Notebook 编辑器会打开一个新的浏览器选项卡。

1. 从 **Kernel (内核)** 菜单中，选择 **Change kernel (选择内核)**，然后选择与您的编程语言相对应的内核。

   现在，您已准备就绪，可以从 Notebook 编辑器编写和运行代码了。

### 保存 Notebook 内容
<a name="emr-managed-notebooks-saving"></a>

在 Notebook 编辑器中执行操作时，Notebook 单元内容和输出在 Amazon S3 中会自动定期保存到 Notebook 文件中。自上次编辑单元以来未进行任何更改的 Notebook 在编辑器的 Notebook 名称旁会显示 **(autosaved) ([自动保存])**。如果更改尚未保存，系统将显示 **unsaved changes (未保存的更改)**。

您可以手动保存 Notebook。从**文件**菜单中，选择**保存和检查点**或按 CTRL\$1S。这会在 Amazon S3 的笔记本文件夹中的 **checkpoints** 文件夹下创建一个名为 `NotebookName.ipynb` 的文件。例如 `s3://amzn-s3-demo-bucket/MyNotebookFolder/NotebookID/checkpoints/NotebookName.ipynb`。该位置只保存最新的检查点文件。

## 更改集群
<a name="emr-managed-notebooks-changing-clusters"></a>

您可以更改已附加 EMR Notebook 的集群，无需更改 Notebook 本身的内容。您可以只针对状态为 **Stopped (已停止)** 的 Notebooks 更改集群。

**更改 EMR Notebook 的集群**

1. 如果要更改的 Notebook 正在运行中，请从 **Notebooks** 列表中选择该 Notebook，然后选择 **Stop (停止)**。

1. 如果 Notebook 状态为 **Stopped (已停止)**，请从 **Notebooks** 列表中选择该 Notebook，然后选择 **View details (查看详细信息)**。

1. 选择 **Change cluster (更改集群)**。

1. 如果您有一个正在运行 Hadoop、Spark 和 Livy 且要向其附加 Notebook 的活动集群，保留其默认设置，然后从列表中选择一个集群。列表中只列出符合要求的集群。

   —或者—

   选择 **Create a cluster (创建集群)**，然后选择集群选项。有关更多信息，请参阅[集群要求](emr-managed-notebooks-considerations.md#considerations-limitations)。

1. 为 **Security groups (安全组)** 选择一个选项，然后选择 **Change cluster and start notebook (更改集群并启动 Notebook)**。

## 删除 Notebooks 和 Notebook 文件
<a name="emr-managed-notebooks-deleting"></a>

使用 Amazon EMR 控制台删除 EMR Notebook 时，您将从可用 Notebooks 列表中删除该 Notebook。但是，Notebook 文件会保留在 Amazon S3 中，并继续产生存储费用。

**删除 Notebook 并删除关联文件**

1. 打开 Amazon EMR 控制台（[https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/)）。

1. 选择 **Notebooks**，从列表中选择您的 Notebook，然后选择 **View details (查看详细信息)**。

1. 选择 **Notebook location (Notebook 位置)** 旁边的文件夹图标并复制采用格式 `s3://MyNotebookLocationPath/NotebookID/` 的 **URL**。

1. 选择 **Delete (删除)**。

   系统将从列表中删除该 Notebook，您无法再查看 Notebook 详细信息。

1. 有关说明，请参阅《Amazon Simple Storage Service 用户指南》中的[如何从 S3 存储桶中删除文件夹？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-folders.html)。从步骤 3 导航到存储桶和文件夹。

   —或者—

   如果您已 AWS CLI 安装，请打开命令提示符并在本段末尾键入命令。将 Amazon S3 位置替换为您在上面复制的位置。确保使用有权删除 Amazon S3 营业地点的用户的访问密钥进行配置。 AWS CLI 有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置 AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cli-chap-getting-started.html)。

   ```
   aws s3 rm s3://MyNotebookLocationPath/NotebookID
   ```

## 共享 Notebook 文件
<a name="emr-managed-notebooks-file-sharing"></a>

每个 EMR Notebook 都作为名为 `NotebookName.ipynb` 的文件保存到 Amazon S3。只要 Notebook 文件与 EMR Notebooks 所基于的同一 Jupyter Notebook 版本兼容，您就可以将该 Notebook 作为 EMR Notebooks 进行打开。

从其他用户打开笔记本文件的最简单方法是将其他用户的\$1.ipynb 文件保存到本地文件系统，然后使用 Jupyter 和编辑器中的上传功能。 JupyterLab 

您可以通过此过程使用其它人共享的 EMR Notebooks、Jupyter 社区中共享的 Notebooks，或还原从控制台删除的 Notebook（如果您仍具有该 Notebook 文件）。

**将不同的 Notebook 文件用作 EMR Notebook 的基础**

1. 继续操作之前，针对要使用的所有 Notebooks 关闭 Notebook 编辑器，然后停止 Notebook（如果是 EMR Notebook）。

1. 创建一个 EMR Notebook 并为其输入一个名称。您为该 Notebook 输入的名称将是您需要替换的文件的名称。新文件名称必须与此文件名称完全匹配。

1. 记下您为该 Notebook 选择的 Amazon S3 位置。您替换的文件位于路径和文件名采用以下格式的文件夹中：`s3://MyNotebookLocation/NotebookID/MyNotebookName.ipynb`。

1. 停止运行 Notebook。

1. 使用完全相同的名称将 Amazon S3 位置中的旧 Notebook 文件替换为新的 Notebook 文件。

   Amazon S3 的以下 AWS CLI 命令将保存到名为 EMR 笔记本`SharedNotebook.ipynb`的本地计算机上的文件替换为 Amazon S3 中`amzn-s3-demo-bucket/MyNotebooksFolder`指定的名称**MyNotebook**`e-12A3BCDEFJHIJKLMNO45PQRST`、ID 和创建方式。有关使用 Amazon S3 控制台复制和替换文件的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[上传、下载和管理对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-download-objects.html)。

   ```
   aws s3 cp SharedNotebook.ipynb s3://amzn-s3-demo-bucket/MyNotebooksFolder/-12A3BCDEFJHIJKLMNO45PQRST/MyNotebook.ipynb
   ```

# EMR Notebooks 的示例编程命令
<a name="emr-managed-notebooks-headless"></a>

## 概述
<a name="emr-managed-notebooks-headless-overview"></a>

您可以通过脚本或命令行执行 APIs 来执行 EMR 笔记本。当您在 AWS 控制台之外启动、停止、列出和描述 EMR 笔记本执行时，您可以通过编程方式控制 EMR 笔记本。您可以将不同的参数值传递给带参数化 Notebook 单元格的 Notebook。这样就不必为每组新参数值创建 Notebook 副本。有关更多信息，请参阅 [Amazon EMR API actions](https://docs.aws.amazon.com/emr/latest/APIReference/API_Operations.html)。

您可以通过Amazon CloudWatch 事件安排或批量执行EMR笔记本和. AWS Lambda有关更多信息，请参阅[AWS Lambda 与 Amazon CloudWatch 活动配合使用](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents.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-headless-permissions"></a>

要在 EMR Notebooks 中使用编程执行，您必须使用以下策略配置用户权限：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowExecutionActions",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:StartNotebookExecution",
        "elasticmapreduce:DescribeNotebookExecution",
        "elasticmapreduce:ListNotebookExecutions"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AllowPassingServiceRole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/EMR_Notebooks_DefaultRole"
      ]
    }
  ]
}
```

------

在 EMR Notebooks 集群上以编程方式执行 EMR Notebooks 时，您必须添加以下额外权限：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowRetrievingManagedEndpointCredentials",
      "Effect": "Allow",
      "Action": [
        "emr-containers:GetManagedEndpointSessionCredentials"
      ],
      "Resource": [
        "arn:aws:emr-containers:*:123456789012:/virtualclusters/virtual-cluster-id/endpoints/managed-endpoint-id"
      ],
      "Condition": {
        "StringEquals": {
          "emr-containers:ExecutionRoleArn": [
            "arn:aws:iam::123456789012:role/emr-on-eks-execution-role"
          ]
        }
      }
    },
    {
      "Sid": "AllowDescribingManagedEndpoint",
      "Effect": "Allow",
      "Action": [
        "emr-containers:DescribeManagedEndpoint"
      ],
      "Resource": [
        "arn:aws:emr-containers:*:123456789012:/virtualclusters/virtual-cluster-id/endpoints/managed-endpoint-id"
      ]
    }
  ]
}
```

------

## 编程执行的限制
<a name="emr-managed-notebooks-headless-limit"></a>
+ 每个 AWS 区域 账户最多支持 100 个并发执行。
+ 如果运行超过 30 天，则会终止执行。
+ Amazon EMR Serverless 交互式应用程序不支持以编程方式执行 Notebooks 电脑实例。

## 编程 EMR Notebook 执行示例
<a name="emr-managed-notebooks-headless-examples"></a>

以下各节提供了使用 AWS CLI、Boto3 SDK (Python) 和 Ruby 以编程方式执行 EMR 笔记本的几个示例：
+ [EMR Studio 中的 Notebook CLI 命令示例](emr-managed-notebooks-headless-cli.md)
+ [EMR Notebook 的 Python 示例](emr-managed-notebooks-headless-python.md)
+ [EMR Notebook 的 Ruby 示例](emr-managed-notebooks-headless-ruby.md)

您还可以使用编排工具 [例如 Apache Airflow 或 Amazon Managed Workflows for Apache Airflow（MWAA）]，将参数化 Notebooks 作为计划工作流的一部分运行。有关更多信息，请参阅AWS 大数据博客中的 [Orchestrating analytics jobs on EMR Notebooks using MWAA](https://aws.amazon.com/blogs/big-data/orchestrating-analytics-jobs-on-amazon-emr-notebooks-using-amazon-mwaa/)。**

# EMR Studio 中的 Notebook CLI 命令示例
<a name="emr-managed-notebooks-headless-cli"></a>

本主题显示了 EMR Notebook 的 CLI 命令示例。该示例使用 EMR Notebooks 控制台中的演示 Notebook。要查找 Notebook，请使用相对于主目录的文件路径。在此示例中，您可以运行两个 Notebook 文件：`demo_pyspark.ipynb` 和 `my_folder/python3.ipynb`。

**注意**  
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)。

文件 `demo_pyspark.ipynb` 的相对路径是 `demo_pyspark.ipynb`，如下所示。

![\[Jupyter notebook interface showing a file explorer and code editor with PySpark content.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/notebook_exe_folder_structure_1.png)


`python3.ipynb` 的相对路径是 `my_folder/python3.ipynb`，如下所示。

![\[File explorer showing python3.ipynb in my_folder, and Jupyter notebook interface with code.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/notebook_exe_folder_structure_2.png)


有关 Amazon EMR API `NotebookExecution` 操作的更多信息，请参阅 [Amazon EMR API actions](https://docs.aws.amazon.com/emr/latest/APIReference/API_Operations.html)。

## 运行 Notebook
<a name="emr-managed-notebooks-api-actions"></a>

您可以使用 AWS CLI 来运行带有`start-notebook-execution`操作的笔记本，如以下示例所示。

**Example ：使用（运行在 Amazon EC2 上的）Amazon EMR 集群在 EMR Studio Workspace 中执行 EMR Notebook。**  

```
aws emr --region us-east-1 \
start-notebook-execution \
--editor-id e-ABCDEFG123456 \
--notebook-params '{"input_param":"my-value", "good_superhero":["superman", "batman"]}' \
--relative-path test.ipynb \
--notebook-execution-name my-execution \
--execution-engine '{"Id" : "j-1234ABCD123"}' \
--service-role EMR_Notebooks_DefaultRole 
 
{
    "NotebookExecutionId": "ex-ABCDEFGHIJ1234ABCD"
}
```

**Example ：使用 EMR Notebooks 集群在 EMR Studio Workspace 中执行 EMR Notebook。**  

```
aws emr start-notebook-execution \
    --region us-east-1 \
    --service-role EMR_Notebooks_DefaultRole \
    --environment-variables '{"KERNEL_EXTRA_SPARK_OPTS": "--conf spark.executor.instances=1", "KERNEL_LAUNCH_TIMEOUT": "350"}' \
    --output-notebook-format HTML \
    --execution-engine Id=arn:aws:emr-containers:us-west-2:account-id:/virtualclusters/ABCDEFG/endpoints/ABCDEF,Type=EMR_ON_EKS,ExecutionRoleArn=arn:aws:iam::account-id:role/execution-role \
    --editor-id e-ABCDEFG \
    --relative-path EMRonEKS-spark_python.ipynb
```

**Example ：执行 EMR Notebook 来指定其 Amazon S3 位置**  

```
aws emr start-notebook-execution \
    --region us-east-1 \
    --notebook-execution-name my-execution-on-emr-on-eks-cluster \
    --service-role EMR_Notebooks_DefaultRole \
    --environment-variables '{"KERNEL_EXTRA_SPARK_OPTS": "--conf spark.executor.instances=1", "KERNEL_LAUNCH_TIMEOUT": "350"}' \
    --output-notebook-format HTML \
    --execution-engine Id=arn:aws:emr-containers:us-west-2:account-id:/virtualclusters/ABCDEF/endpoints/ABCDEF,Type=EMR_ON_EKS,ExecutionRoleArn=arn:aws:iam::account-id:role/execution-role \
    --notebook-s3-location '{"Bucket": "amzn-s3-demo-bucket","Key": "s3-prefix-to-notebook-location/EMRonEKS-spark_python.ipynb"}' \
    --output-notebook-s3-location '{"Bucket": "amzn-s3-demo-bucket","Key": "s3-prefix-for-storing-output-notebook"}'
```

## Notebook 输出
<a name="emr-managed-notebooks-headless-cli-output"></a>

 下面是示例 Notebook 的输出内容。单元格 3 显示新注入的参数值。

![\[Jupyter notebook cells showing Python code and output for parameter injection and manipulation.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/HelloWorld_notebook.png)


## 描述 Notebook
<a name="emr-managed-notebooks-headless-cli-describe"></a>

您可以使用 `describe-notebook-execution` 操作以访问关于特定 Notebook 执行的信息。

```
aws emr --region us-east-1 \
describe-notebook-execution --notebook-execution-id ex-IZWZZVR9DKQ9WQ7VZWXJZR29UGHTE
 
{
    "NotebookExecution": {
        "NotebookExecutionId": "ex-IZWZZVR9DKQ9WQ7VZWXJZR29UGHTE",
        "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
        "ExecutionEngine": {
            "Id": "j-2QMOV6JAX1TS2",
            "Type": "EMR",
            "MasterInstanceSecurityGroupId": "sg-05ce12e58cd4f715e"
        },
        "NotebookExecutionName": "my-execution",
        "NotebookParams": "{\"input_param\":\"my-value\", \"good_superhero\":[\"superman\", \"batman\"]}",
        "Status": "FINISHED",
        "StartTime": 1593490857.009,
        "Arn": "arn:aws:elasticmapreduce:us-east-1:123456789012:notebook-execution/ex-IZWZZVR9DKQ9WQ7VZWXJZR29UGHTE",
        "LastStateChangeReason": "Execution is finished for cluster j-2QMOV6JAX1TS2.",
        "NotebookInstanceSecurityGroupId": "sg-0683b0a39966d4a6a",
        "Tags": []
    }
}
```

## 停止运行 Notebook
<a name="emr-managed-notebooks-headless-cli-stop"></a>

如果您想要停止 Notebook 正在运行的执行，您可以借助 `stop-notebook-execution` 命令。

```
# stop a running execution
aws emr --region us-east-1 \
stop-notebook-execution --notebook-execution-id ex-IZWZX78UVPAATC8LHJR129B1RBN4T
 
 
# describe it
aws emr --region us-east-1 \
describe-notebook-execution --notebook-execution-id ex-IZWZX78UVPAATC8LHJR129B1RBN4T
 
{
    "NotebookExecution": {
        "NotebookExecutionId": "ex-IZWZX78UVPAATC8LHJR129B1RBN4T",
        "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
        "ExecutionEngine": {
            "Id": "j-2QMOV6JAX1TS2",
            "Type": "EMR"
        },
        "NotebookExecutionName": "my-execution",
        "NotebookParams": "{\"input_param\":\"my-value\", \"good_superhero\":[\"superman\", \"batman\"]}",
        "Status": "STOPPED",
        "StartTime": 1593490876.241,
        "Arn": "arn:aws:elasticmapreduce:us-east-1:123456789012:editor-execution/ex-IZWZX78UVPAATC8LHJR129B1RBN4T",
        "LastStateChangeReason": "Execution is stopped for cluster j-2QMOV6JAX1TS2. Internal error",
        "Tags": []
    }
}
```

## 按开启时间列出 Notebook 的执行情况
<a name="emr-managed-notebooks-headless-cli-list"></a>

您可以将 `--from` 参数输入至 `list-notebook-executions`，按开启时间列出 Notebook 的执行情况。

```
# filter by start time 
aws emr --region us-east-1 \ 
list-notebook-executions --from 1593400000.000
 
{
    "NotebookExecutions": [
        {
            "NotebookExecutionId": "ex-IZWZX78UVPAATC8LHJR129B1RBN4T",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "STOPPED",
            "StartTime": 1593490876.241
        },
        {
            "NotebookExecutionId": "ex-IZWZZVR9DKQ9WQ7VZWXJZR29UGHTE",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "RUNNING",
            "StartTime": 1593490857.009
        },
        {
            "NotebookExecutionId": "ex-IZWZYRS0M14L5V95WZ9OQ399SKMNW",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "STOPPED",
            "StartTime": 1593490292.995
        },
        {
            "NotebookExecutionId": "ex-IZX009ZK83IVY5E33VH8MDMELVK8K",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "FINISHED",
            "StartTime": 1593489834.765
        },
        {
            "NotebookExecutionId": "ex-IZWZXOZF88JWDF9J09GJ91R57VI0N",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "FAILED",
            "StartTime": 1593488934.688
        }
    ]
}
```

## 按开启时间和状态列出 Notebook 的执行情况
<a name="emr-managed-notebooks-headless-cli-list"></a>

`list-notebook-executions` 命令也可以采用 `--status` 参数来筛选结果。

```
# filter by start time and status 
aws emr --region us-east-1 \                 
list-notebook-executions --from 1593400000.000 --status FINISHED
{
    "NotebookExecutions": [
        {
            "NotebookExecutionId": "ex-IZWZZVR9DKQ9WQ7VZWXJZR29UGHTE",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "FINISHED",
            "StartTime": 1593490857.009
        },
        {
            "NotebookExecutionId": "ex-IZX009ZK83IVY5E33VH8MDMELVK8K",
            "EditorId": "e-BKTM2DIHXBEDRU44ANWRKIU8N",
            "NotebookExecutionName": "my-execution",
            "Status": "FINISHED",
            "StartTime": 1593489834.765
        }
    ]
}
```

# EMR Notebook 的 Python 示例
<a name="emr-managed-notebooks-headless-python"></a>

本主题包含一个示例命令文件。代码示例是一个名为 `demo.py` 的 SDK for Python（Boto3）文件。它显示了笔记本的执行情况 APIs。

**注意**  
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)。

有关 Amazon EMR API `NotebookExecution` 操作的更多信息，请参阅 [Amazon EMR API actions](https://docs.aws.amazon.com/emr/latest/APIReference/API_Operations.html)。

```
import boto3,time

emr = boto3.client(
    'emr',
    region_name='us-west-1'
)     
     
start_resp = emr.start_notebook_execution(
    EditorId='e-40AC8ZO6EGGCPJ4DLO48KGGGI',
    RelativePath='boto3_demo.ipynb',
    ExecutionEngine={'Id':'j-1HYZS6JQKV11Q'},
    ServiceRole='EMR_Notebooks_DefaultRole'
)

execution_id = start_resp["NotebookExecutionId"]
print(execution_id)
print("\n")
     
describe_response = emr.describe_notebook_execution(NotebookExecutionId=execution_id)
     
print(describe_response)
print("\n")
     
list_response = emr.list_notebook_executions()
print("Existing notebook executions:\n")
for execution in list_response['NotebookExecutions']:
    print(execution)
    print("\n")  
     
print("Sleeping for 5 sec...")
time.sleep(5)
     
print("Stop execution " + execution_id)
emr.stop_notebook_execution(NotebookExecutionId=execution_id)
describe_response = emr.describe_notebook_execution(NotebookExecutionId=execution_id)
print(describe_response)
print("\n")
```

下面是运行 `demo.py` 的输出。

```
ex-IZX56YJDW1D29Q1PHR32WABU2SAPK
     
{'NotebookExecution': {'NotebookExecutionId': 'ex-IZX56YJDW1D29Q1PHR32WABU2SAPK', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'ExecutionEngine': {'Id': 'j-1HYZS6JQKV11Q', 'Type': 'EMR'}, 'NotebookExecutionName': '', 'Status': 'STARTING', 'StartTime': datetime.datetime(2020, 8, 19, 0, 49, 19, 418000, tzinfo=tzlocal()), 'Arn': 'arn:aws:elasticmapreduce:us-west-1:123456789012:notebook-execution/ex-IZX56YJDW1D29Q1PHR32WABU2SAPK', 'LastStateChangeReason': 'Execution is starting for cluster j-1HYZS6JQKV11Q.', 'Tags': []}, 'ResponseMetadata': {'RequestId': '70f12c5f-1dda-45b7-adf6-964987d373b7', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '70f12c5f-1dda-45b7-adf6-964987d373b7', 'content-type': 'application/x-amz-json-1.1', 'content-length': '448', 'date': 'Wed, 19 Aug 2020 00:49:22 GMT'}, 'RetryAttempts': 0}}
     
Existing notebook executions:
     
{'NotebookExecutionId': 'ex-IZX56YJDW1D29Q1PHR32WABU2SAPK', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'STARTING', 'StartTime': datetime.datetime(2020, 8, 19, 0, 49, 19, 418000, tzinfo=tzlocal())}
     
     
{'NotebookExecutionId': 'ex-IZX5ABS5PR1E5AHMFYEMX3JJIORRB', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'RUNNING', 'StartTime': datetime.datetime(2020, 8, 19, 0, 48, 36, 373000, tzinfo=tzlocal())}
     
     
{'NotebookExecutionId': 'ex-IZX5GLVXIU1HNI8BWVW057F6MF4VE', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'FINISHED', 'StartTime': datetime.datetime(2020, 8, 19, 0, 45, 14, 646000, tzinfo=tzlocal()), 'EndTime': datetime.datetime(2020, 8, 19, 0, 46, 26, 543000, tzinfo=tzlocal())}
     
     
{'NotebookExecutionId': 'ex-IZX5CV8YDUO8JAIWMXN2VH32RUIT1', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'FINISHED', 'StartTime': datetime.datetime(2020, 8, 19, 0, 43, 5, 807000, tzinfo=tzlocal()), 'EndTime': datetime.datetime(2020, 8, 19, 0, 44, 31, 632000, tzinfo=tzlocal())}
     
     
{'NotebookExecutionId': 'ex-IZX5AS0PPW55CEDEURZ9NSOWSUJZ6', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'FINISHED', 'StartTime': datetime.datetime(2020, 8, 19, 0, 42, 29, 265000, tzinfo=tzlocal()), 'EndTime': datetime.datetime(2020, 8, 19, 0, 43, 48, 320000, tzinfo=tzlocal())}
     
     
{'NotebookExecutionId': 'ex-IZX57YF5Q53BKWLR4I5QZ14HJ7DRS', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'NotebookExecutionName': '', 'Status': 'FINISHED', 'StartTime': datetime.datetime(2020, 8, 19, 0, 38, 37, 81000, tzinfo=tzlocal()), 'EndTime': datetime.datetime(2020, 8, 19, 0, 40, 39, 646000, tzinfo=tzlocal())}
     
Sleeping for 5 sec...
Stop execution ex-IZX56YJDW1D29Q1PHR32WABU2SAPK
{'NotebookExecution': {'NotebookExecutionId': 'ex-IZX56YJDW1D29Q1PHR32WABU2SAPK', 'EditorId': 'e-40AC8ZO6EGGCPJ4DLO48KGGGI', 'ExecutionEngine': {'Id': 'j-1HYZS6JQKV11Q', 'Type': 'EMR'}, 'NotebookExecutionName': '', 'Status': 'STOPPING', 'StartTime': datetime.datetime(2020, 8, 19, 0, 49, 19, 418000, tzinfo=tzlocal()), 'Arn': 'arn:aws:elasticmapreduce:us-west-1:123456789012:notebook-execution/ex-IZX56YJDW1D29Q1PHR32WABU2SAPK', 'LastStateChangeReason': 'Execution is being stopped for cluster j-1HYZS6JQKV11Q.', 'Tags': []}, 'ResponseMetadata': {'RequestId': '2a77ef73-c1c6-467c-a1d1-7204ab2f6a53', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '2a77ef73-c1c6-467c-a1d1-7204ab2f6a53', 'content-type': 'application/x-amz-json-1.1', 'content-length': '453', 'date': 'Wed, 19 Aug 2020 00:49:30 GMT'}, 'RetryAttempts': 0}}
```

# EMR Notebook 的 Ruby 示例
<a name="emr-managed-notebooks-headless-ruby"></a>

本主题包含一个演示 Notebook 功能的 Ruby 示例。

**注意**  
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)。

以下 Ruby 代码示例演示了如何使用 Notebook 执行 API。

```
# prepare an Amazon EMR client

emr = Aws::EMR::Client.new(
  region: 'us-east-1',
  access_key_id: 'AKIA...JKPKA',
  secret_access_key: 'rLMeu...vU0OLrAC1',
)
```

## 启动 Notebook 执行并获取执行 ID
<a name="emr-managed-notebooks-headless-ruby-startretrieve"></a>

在此示例中，Amazon S3 编辑器和 EMR Notebook 是 `s3://amzn-s3-demo-bucket/notebooks/e-EA8VGAA429FEQTC8HC9ZHWISK/test.ipynb`。

有关 Amazon EMR API `NotebookExecution` 操作的更多信息，请参阅 [Amazon EMR API actions](https://docs.aws.amazon.com/emr/latest/APIReference/API_Operations.html)。

```
start_response = emr.start_notebook_execution({
    editor_id: "e-EA8VGAA429FEQTC8HC9ZHWISK",
    relative_path: "test.ipynb",
    
    execution_engine: {id: "j-3U82I95AMALGE"},
    
    service_role: "EMR_Notebooks_DefaultRole",
})


notebook_execution_id = start_resp.notebook_execution_id
```

## 描述 Notebook 执行并打印详细信息
<a name="emr-managed-notebooks-headless-ruby-describeprint"></a>

```
describe_resp = emr.describe_notebook_execution({
    notebook_execution_id: notebook_execution_id
})
puts describe_resp.notebook_execution
```

上述命令的输出如下。

```
{
:notebook_execution_id=>"ex-IZX3VTVZWVWPP27KUB90BZ7V9IEDG", 
:editor_id=>"e-EA8VGAA429FEQTC8HC9ZHWISK",
:execution_engine=>{:id=>"j-3U82I95AMALGE", :type=>"EMR", :master_instance_security_group_id=>nil}, 
:notebook_execution_name=>"", 
:notebook_params=>nil, 
:status=>"STARTING", 
:start_time=>2020-07-23 15:07:07 -0700, 
:end_time=>nil, 
:arn=>"arn:aws:elasticmapreduce:us-east-1:123456789012:notebook-execution/ex-IZX3VTVZWVWPP27KUB90BZ7V9IEDG", 
:output_notebook_uri=>nil, 
:last_state_change_reason=>"Execution is starting for cluster j-3U82I95AMALGE.", :notebook_instance_security_group_id=>nil, 
:tags=>[]
}
```

## Notebook 筛选条件
<a name="emr-managed-notebooks-headless-ruby-filters"></a>

```
"EditorId": "e-XXXX",           [Optional]
"From" : "1593400000.000",    [Optional]
"To" :
```

### 停止 Notebook 执行
<a name="emr-managed-notebooks-headless-ruby-stop"></a>

```
stop_resp = emr.stop_notebook_execution({
    notebook_execution_id: notebook_execution_id
})
```

# 启用用户模拟以监控 Spark 用户和任务活动
<a name="emr-managed-notebooks-spark-monitor"></a>

借助 EMR Notebooks，您可以在 Spark 集群上配置用户模拟。此功能可帮助您跟踪从 Notebook 编辑器内启动的作业活动。此外，EMR Notebooks 有一个内置的 Jupyter Notebook 小组件，可用于在 Notebook 编辑器的查询输出旁边显示 Spark 任务详细信息。默认情况下，此小部件处于可用状态，无需特殊配置。但是，要查看历史记录服务器，您的客户端必须配置为查看主节点上托管的 Amazon EMR Web 界面。

**注意**  
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)。

## 设置 Spark 用户模拟
<a name="emr-managed-notebooks-user-impersonation"></a>

默认情况下，用户使用 Notebook 编辑器提交的 Spark 作业似乎源自一个模糊的 `livy` 用户身份。您可以为集群配置用户模拟，以便这些任务与运行代码的用户身份相关联。系统会为在 Notebook 中运行代码的每个用户身份在主节点上创建 HDFS 用户目录。例如，如果用户 `NbUser1` 从 Notebook 编辑器运行代码，您可以连接主节点并可以看到 `hadoop fs -ls /user` 显示目录 `/user/user_NbUser1`。

您可以在 `core-site` 和 `livy-conf` 配置分类中设置属性以启用该功能。如果您让 Amazon EMR 同时创建集群和 Notebook，那么默认情况下，此功能将不可用。有关使用配置分类自定义应用程序的更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

使用以下配置分类和值为 EMR Notebooks 启用用户模拟：

```
[
    {
        "Classification": "core-site",
        "Properties": {
          "hadoop.proxyuser.livy.groups": "*",
          "hadoop.proxyuser.livy.hosts": "*"
        }
    },
    {
        "Classification": "livy-conf",
        "Properties": {
          "livy.impersonation.enabled": "true"
        }
    }
]
```

## 使用 Spark 任务监控小组件
<a name="emr-managed-notebooks-monitoring-widget"></a>

如果运行代码的 Notebook 编辑器在 EMR 集群上执行 Spark 任务，那么输出中会包含一个用于监控 Spark 任务的 Jupyter Notebook 小组件。此小组件会提供任务详细信息、指向 Spark 历史记录服务器页面和 Hadoop 任务历史记录页面的有用链接，以及指向 Amazon S3 中有关任何失败任务的任务日志的便捷链接。

要查看集群主节点上的历史记录服务器页面，您必须根据需要设置 SSH 客户端和代理。有关更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。要查看 Amazon S3 中的日志，必须启用集群日志记录，这是新集群的默认设置。有关更多信息，请参阅[查看归档到 Amazon S3 的日志文件](emr-manage-view-web-log-files.md#emr-manage-view-web-log-files-s3)。

以下是一个 Spark 任务监控示例。

![\[alt_text\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/spark_monitoring_job_progress.png)


# EMR Notebooks 安全性和访问控制
<a name="emr-managed-notebooks-security"></a>

有许多功能可帮助您定制 EMR Notebooks 的安全状况。这有助于确保只有获得授权的用户才有权访问和使用 EMR Notebook，并使用 Notebook 编辑器在集群上执行代码。这些功能与适用于 Amazon EMR 和 Amazon EMR 集群的安全功能一起使用。有关更多信息，请参阅 [Amazon EMR 中的安全性](emr-security.md)。
+ 您可以使用 AWS Identity and Access Management 政策声明和笔记本标签来限制访问权限。有关更多信息，请参阅[Amazon EMR 如何与 IAM 配合使用](security_iam_service-with-iam.md)和[适用于 EMR Notebooks 的基于身份的策略语句示例](emr-fine-grained-cluster-access.md#emr-managed-notebooks-tags-examples)。
+ Amazon EC2 安全组充当虚拟防火墙，可控制集群主实例与 Notebook 编辑器之间的网络流量。您可以使用默认设置，也可以自定义这些安全组。有关更多信息，请参阅 [为 EMR Notebooks 指定 EC2 安全组](emr-managed-notebooks-security-groups.md)。
+ 您可以指定一个 AWS 服务角色来确定 EMR 笔记本在与其他 AWS 服务交互时拥有的权限。有关更多信息，请参阅 [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)。

**注意**  
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)。

# 在 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")
```

# 将基于 Git 的存储库与 EMR Notebooks 关联
<a name="emr-git-repo"></a>

可以将基于 Git 的存储库与 Amazon EMR Notebooks 关联，以将 Notebooks 保存在版本控制的环境中。一个 Notebook 最多可与三个存储库关联。支持以下基于 Git 的服务：
+ [AWS CodeCommit](https://aws.amazon.com/codecommit)
+ [GitHub](https://www.github.com)
+ [Bitbucket](https://bitbucket.org/)
+ [GitLab](https://about.gitlab.com/)

**注意**  
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)。

将基于 Git 的存储库与您的 Notebook 相关联后，将会获得以下优势。
+ **版本控制**：您可以在版本控制系统中记录代码更改，以便查看更改历史记录并有选择地撤消一些更改。
+ **协作**：在不同 Notebook 中工作的同事可以通过基于 Git 的远程存储库共享代码。Notebooks 可以从远程存储库克隆或合并代码，然后将更改推送回这些远程存储库。
+ **代码重用** — 许多演示数据分析或机器学习技术的 Jupyter 笔记本都可以在公共托管的存储库中找到，例如。 GitHub可以将您的 Notebooks 与存储库关联，以便重用包含在该存储库中的 Jupyter Notebooks。

要将基于 Git 的存储库与 EMR Notebooks 结合使用，请在 Amazon EMR 控制台中添加存储库作为资源，关联需要身份验证的存储库的凭证，然后将这些存储库与 Notebooks 链接起来。您可在 Amazon EMR 控制台中查看存储在账户中的存储库列表以及各个存储库的详细信息。在创建基于 Git 的现有存储库时，可以将这些存储库与 Notebook 关联。

**Topics**
+ [

# 将 EMR Notebook 与存储库集成的先决条件和注意事项
](emr-managed-notebooks-git-considerations.md)
+ [

# 将基于 Git 的存储库添加到 Amazon EMR
](emr-git-repo-add.md)
+ [

# 从 EMR Studio Workspace 更新或删除基于 Git 的存储库
](emr-git-repo-delete.md)
+ [

# 在 EMR Studio 中链接或取消链接基于 Git 的存储库
](emr-git-repo-link.md)
+ [

# 在 EMR Studio 中创建具有关联 Git 存储库的新 Notebook
](emr-git-repo-create-notebook.md)
+ [

# 在 EMR Studio Notebook 中使用 Git 存储库
](emr-git-repo-open.md)

# 将 EMR Notebook 与存储库集成的先决条件和注意事项
<a name="emr-managed-notebooks-git-considerations"></a>

在计划将基于 Git 的存储库与 EMR Notebooks 集成时，请考虑以下有关提交、权限和托管的最佳实践。

**注意**  
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)。

## AWS CodeCommit
<a name="code-commit-considerations"></a>

如果您使用 CodeCommit 存储库，则必须使用 Git 凭据和 HTTPS CodeCommit。不支持 SSH 密钥和带有 AWS CLI 凭据助手的 HTTPS。 CodeCommit 不支持个人访问令牌 (PATs)。有关更多信息，请参阅 [IAM 用户指南中的 IAM 与 CodeCommit Git 证书、SSH 密钥和 AWS 访问密钥一起使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html)，以及*用户指南*中的[使用 Git 凭证的 HTTPS *AWS CodeCommit 用户*设置](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)。

## 访问和权限注意事项
<a name="access-considerations"></a>

在将存储库与 Notebook 关联之前，请确保集群、EMR Notebooks 的 IAM 角色和安全组具有正确的设置和权限。您还可以按照[为 EMR Notebooks 配置私有托管的 Git 存储库](#emr-managed-notebooks-private-git-repo)中的说明配置在专用网络中托管的基于 Git 的存储库。
+ **集群互联网访问**：启动的网络接口只有一个私有 IP 地址。这意味着 Notebook 连接到的集群必须位于具有网络地址转换 (NAT) 网关的私有子网中，或者必须能够通过虚拟私有网关访问 Internet。有关更多信息，请参阅 [Amazon VPC 选项](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-clusters-in-a-vpc.html)。

  Notebook 的安全组必须包含出站规则，以便允许 Notebook 将流量从集群路由到 Internet。建议您创建自己的安全组。有关更多信息，请参阅[为 EMR Notebooks 指定 EC2 安全组](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-security-groups.html)。
**重要**  
如果网络接口启动到公有子网中，它将无法通过互联网网关（IGW）与互联网通信。
+ **的权限 AWS Secrets Manager** — 如果您使用 Secrets Manager 存储用于访问仓库的机密，则[EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)必须附加允许`secretsmanager:GetSecretValue`执行该操作的权限策略。

## 为 EMR Notebooks 配置私有托管的 Git 存储库
<a name="emr-managed-notebooks-private-git-repo"></a>

使用以下说明为 EMR Notebooks 配置私有托管的存储库。您必须提供一个配置文件，其中包含有关您的 DNS 和 Git 服务器的信息。Amazon EMR 使用此信息配置将流量路由到您的私有托管存储库的 EMR Notebooks。

**先决条件**

在为 EMR Notebooks 配置私有托管的 Git 存储库之前，您必须具备以下条件：
+ 保存 EMR 笔记本文件 Amazon S3 Control 的位置。

**为 EMR Notebooks 配置一个或多个私有托管的 Git 存储库**

1. 使用提供的模板创建配置文件。为要在配置中指定的每个 Git 服务器包括以下值：
   + **`DnsServerIpV4`**-您的 DNS 服务器 IPv4 的地址。如果您同时提供 `DnsServerIpV4` 和 `GitServerIpV4List` 的值，则 `DnsServerIpV4` 的值优先，并将用于解析您的 `GitServerDnsName`。
**注意**  
要使用私有托管的 Git 存储库，您的 DNS 服务器必须允许来自 EMR Notebooks 的入站访问。我们强烈建议您保护您的 DNS 服务器，防止其它未经授权的访问。
   + **`GitServerDnsName`**：您的 Git 服务器的 DNS 名称。例如 `"git.example.com"`。
   + **`GitServerIpV4List`**-属于您的 Git 服务器 IPv4的地址列表。

   ```
   [
       {
           "Type": "PrivatelyHostedGitConfig",
           "Value": [
               {
                   "DnsServerIpV4": "<10.24.34.xxx>",
                   "GitServerDnsName": "<enterprise.git.com>",
                   "GitServerIpV4List": [
                       "<xxx.xxx.xxx.xxx>",
                       "<xxx.xxx.xxx.xxx>"
                   ]
               },
               {
                   "DnsServerIpV4": "<10.24.34.xxx>",
                   "GitServerDnsName": "<git.example.com>",
                   "GitServerIpV4List": [
                       "<xxx.xxx.xxx.xxx>",
                       "<xxx.xxx.xxx.xxx>"
                   ]
               }
           ]
       }
   ]
   ```

1. 将配置文件另存为 `configuration.json`。

1. 将配置文件上载到名为 `life-cycle-configuration` 的文件夹中的指定 Amazon S3 存储位置。例如，如果您的默认 S3 位置是 `s3://amzn-s3-demo-bucket/notebooks`，则您的配置文件应位于 `s3://amzn-s3-demo-bucket/notebooks/life-cycle-configuration/configuration.json`。
**重要**  
我们强烈建议您将 `life-cycle-configuration` 文件夹的访问权限限制为仅您的 EMR Notebooks 管理员以及 EMR Notebooks 的服务角色。您还应该确保 `configuration.json` 免受未经授权的访问。有关说明，请参阅[使用用户策略控制对存储桶的访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/walkthrough1.html)或 [Amazon S3 的安全最佳实践](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)。

   有关上载说明，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建文件夹](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html#create-folder)和[上载对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

# 将基于 Git 的存储库添加到 Amazon EMR
<a name="emr-git-repo-add"></a>

有关如何将基于 Git 的存储库添加到旧控制台中的 EMR Notebook 或控制台中的 EMR Studio Workspace，请参阅以下各节的内容。

**注意**  
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)。

------
#### [ Console ]

EMR Notebooks 便是新控制台中的 EMR Studio Workspaces，因此您可以按照 [将基于 Git 的存储库链接到 EMR Studio Workspace](emr-studio-git-repo.md) 中的说明将最多三个 Git 存储库关联到 Workspace。

此外，您也可以使用 JupyterLab Git 扩展程序。从 Jupyterlab Notebook 的左侧边栏中选择 **Git** 图标来访问扩展程序。有关扩展的信息，请参阅 [jupyterl](https://github.com/jupyterlab/jupyterlab-git) GitHub ab-git 存储库。

要将 Git 存储库关联到 Workspace，Studio 管理员必须配置 Studio 以允许 Git 存储库链接。有关更多信息，请参阅 [为基于 Git 的存储库建立访问和权限](emr-studio-enable-git.md)。

------

# 从 EMR Studio Workspace 更新或删除基于 Git 的存储库
<a name="emr-git-repo-delete"></a>

要了解如何从旧控制台中的 EMR Notebook 或控制台中的 EMR Studio Workspace 删除基于 Git 的存储库，请参阅以下各节的内容。

**注意**  
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)。

------
#### [ Console ]

EMR Notebooks 便是新控制台中的 EMR Studio Workspaces，因此您可以参考 [将基于 Git 的存储库链接到 EMR Studio Workspace](emr-studio-git-repo.md) 来获取有关在 Workspace 中使用 Git 存储库的更多信息。但是目前，您无法从 Workspace 中删除 Git 存储库。

------

# 在 EMR Studio 中链接或取消链接基于 Git 的存储库
<a name="emr-git-repo-link"></a>

按照以下步骤将基于 Git 的存储库链接到或取消链接到旧控制台中的 EMR Notebook，或控制台中的 EMR Studio Workspaces。

**注意**  
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)。

------
#### [ Console ]

EMR Notebooks 便是新控制台中的 EMR Studio Workspaces，因此您可以参考 [将基于 Git 的存储库链接到 EMR Studio Workspace](emr-studio-git-repo.md) 来获取有关在 Workspace 中使用 Git 存储库的更多信息。但是目前，您无法从 Workspace 中删除 Git 存储库。

------

## 了解存储库状态
<a name="emr-managed-notebooks-repository-status"></a>

Git 存储库在存储库列表中可能具有以下任何状态。有关将 EMR Notebooks 与 Git 存储库关联的更多信息，请参阅[在 EMR Studio 中链接或取消链接基于 Git 的存储库](#emr-git-repo-link)。


| Status | 含义 | 
| --- | --- | 
|  链接  |  Git 存储库正在链接到 Notebook。当存储库处于 **Linking (正在链接)** 状态时，您无法停止 Notebook。  | 
|  已链接  |  Git 存储库将链接到 Notebook。如果存储库具有 **Linked (已链接)** 状态时，则它已连接到远程存储库。  | 
|  链接失败  |  Git 存储库未能链接到 Notebook。您可以重新尝试链接它。  | 
|  正在取消链接  |  正在从 Notebook 取消 Git 存储库的链接。当存储库处于 **Unlinking (正在取消链接)** 状态时，您无法停止 Notebook。从 Notebook 取消 Git 存储库的链接只会断开它与远程存储库的连接，而不会从 Notebook 中删除任何代码。  | 
|  取消链接失败  |  未能从 Notebook 取消 Git 存储库的链接。您可以重新尝试取消该存储库的链接。  | 

# 在 EMR Studio 中创建具有关联 Git 存储库的新 Notebook
<a name="emr-git-repo-create-notebook"></a>

**注意**  
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)。

**在 Amazon EMR 旧控制台中创建一个 Notebook 并将之关联到 Git 存储库**

1. 按照 [在 EMR Studio 中创建 Notebook](emr-managed-notebooks-create.md) 中的说明进行操作。

1. 对于 **Security group (安全组)**，选择 **Use your own security group (使用您自己的安全组)**。
**注意**  
Notebook 的安全组必须包含出站规则，以允许 Notebook 通过集群将流量路由到 Internet。建议您创建自己的安全组。有关更多信息，请参阅[为 EMR Notebooks 指定 EC2 安全组](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-security-groups.html)。

1. 对于 **Git repositories (Git 存储库)**，选择要与 Notebook 关联的存储库****。

   1. 选择作为资源存储在您账户中的存储库，然后选择 **Save (保存)**。

   1. 要在账户中添加新存储库作为资源，请选择 **add a new repository (添加新存储库)**。在新窗口中完成 **Add repository (添加存储库)** 工作流。

# 在 EMR Studio Notebook 中使用 Git 存储库
<a name="emr-git-repo-open"></a>

**注意**  
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)。

**打开笔记本时，可以选择 “在** Jupyter **中打开” JupyterLab 或 “在 Jupyter** 中打开”。

如果您选择在 Jupyter 中打开 Notebook，则会显示 Notebook 中的可扩展文件和文件夹的列表。您可以在 Notebook 单元格中手动运行 Git 命令，如下所示。

```
!git pull origin primary
```

要打开任何额外的存储库，请导航到其它文件夹。

如果您选择使用 JupyterLab 界面打开笔记本，则可以使用预安装的 JupyterLab Git 扩展。有关扩展程序的更多信息，请参阅 [jupyterlab-git](https://github.com/jupyterlab/jupyterlab-git)。