

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

# 使用 Amazon EMR 准备数据
<a name="studio-notebooks-emr-cluster"></a>

**重要**  
Amazon SageMaker Studio 和 Amazon SageMaker Studio Classic 是你可以用来与 SageMaker AI 交互的两个机器学习环境。  
如果您的域是在 2023 年 11 月 30 日之后创建的，Studio 就是您的默认体验。  
如果您的域名是在 2023 年 11 月 30 日之前创建的，那么亚马逊 SageMaker Studio 经典版是您的默认体验。如果您的默认体验是亚马逊 SageMaker Studio Classic，则要使用 Studio，请参阅[从亚马逊 SageMaker Studio 经典版迁移](studio-updated-migrate.md)。  
当您从 Amazon SageMaker Studio Classic 迁移到 Amazon SageMaker Studio 时，功能可用性不会受到影响。Studio Classic 还作为应用程序存在于 Amazon SageMaker Studio 中，可帮助您运行传统的机器学习工作流程。

Amazon SageMaker Studio 和 Studio Classic 内置了与[亚马逊 EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 的集成。[https://aws.amazon.com/emr/features/hive](https://aws.amazon.com/emr/features/hive)只需点击一下，他们就可以访问 Spark UI，监控 Spark 作业的状态和指标，而无需离开笔记本。

管理员可以创建 [CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)来定义 Amazon EMR 集群。然后，他们就可以在 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/userguide/end-user-console.html) 中提供这些集群模板，供 Studio 和 Studio Classic 用户启动。然后，数据科学家可以选择一个预定义模板，直接从他们的 Studio 环境中自行配置 Amazon EMR 集群。管理员可以进一步对模板进行参数化，让用户在预定义值范围内选择集群的各个方面。例如，用户可能希望指定核心节点的数量，或从下拉菜单中选择节点的实例类型。

管理员可以使用来 CloudFormation控制 Amazon EMR 集群的组织、安全和联网设置。然后，数据科学家和数据工程师可以根据自己的工作负载定制这些模板，直接从 Studio 和 Studio Classic 创建按需 Amazon EMR 集群，而无需设置复杂的配置。用户可以在使用后终止 Amazon EMR 集群。
+ **如果您是管理员**：

  确保已启用 Studio 或 Studio Classic 与 Amazon EMR 集群之间的通信。有关说明，请参阅[为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md)部分。启用此通信后，您可以：
  + [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)
  + [配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)
+ **如果您是数据科学家或数据工程师**，您就可以：
  + [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md)
  + [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)
  + [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)
  + [从 Studio 或 Studio Classic 终止 Amazon EMR 集群](terminate-emr-clusters.md)
  + [从 Studio 或 Studio Classic 访问 Spark UI](studio-notebooks-access-spark-ui.md)

**Topics**
+ [快速入门：创建 A SageMaker I 沙盒域以在 Studio 中启动 Amazon EMR 集群](studio-notebooks-emr-cluster-quickstart.md)
+ [管理员指南](studio-emr-admin-guide.md)
+ [用户指南](studio-emr-user-guide.md)
+ [博客和白皮书](studio-notebooks-emr-resources.md)
+ [问题排查](studio-notebooks-emr-troubleshooting.md)

# 快速入门：创建 A SageMaker I 沙盒域以在 Studio 中启动 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart"></a>

本节将引导您完成在 Amazon SageMaker Studio 中快速设置完整测试环境的过程。您将创建一个新的 Studio 域，让用户可以直接从 Studio 启动新的 Amazon EMR 集群。该步骤提供了一个笔记本示例，您可以连接到 Amazon EMR 集群，开始运行 Spark 工作负载。使用此笔记本，您将使用 Amazon EMR Spark 分布式处理 OpenSearch 和矢量数据库构建检索增强生成系统 (RAG)。

**注意**  
要开始使用，请使用具有管理员权限的 AWS Identity and Access Management (IAM) 用户账户登录 AWS 管理控制台。有关如何注册 AWS 账户并创建具有管理权限的用户的信息，请参阅 [完成 Amazon A SageMaker I 先决条件](gs-set-up.md)。

**设置 Studio 测试环境并开始运行 Spark 作业：**
+ [第 1 步：创建用于在 Studio 中启动亚马逊 EMR 集群的 A SageMaker I 域](#studio-notebooks-emr-cluster-quickstart-setup)
+ [步骤 2：从 Studio UI 启动新的 Amazon EMR 集群](#studio-notebooks-emr-cluster-quickstart-launch)
+ [第 3 步：将 JupyterLab 笔记本电脑连接到 Amazon EMR 集群](#studio-notebooks-emr-cluster-quickstart-connect)
+ [第 4 步：清理 CloudFormation 堆栈](#studio-notebooks-emr-cluster-quickstart-clean-stack)

## 第 1 步：创建用于在 Studio 中启动亚马逊 EMR 集群的 A SageMaker I 域
<a name="studio-notebooks-emr-cluster-quickstart-setup"></a>

在以下步骤中，您将应用 CloudFormation 堆栈来自动创建新的 SageMaker AI 域。堆栈还会创建用户配置文件，并配置所需的环境和权限。 SageMaker AI 域配置为允许您直接从 Studio 启动亚马逊 EMR 集群。在本示例中，Amazon EMR 集群是在与 A SageMaker I 相同的 AWS 账户中创建的，无需身份验证。[你可以在 getting\$1start CloudFormation ing\$1started 存储库中找到支持各种身份验证方法的其他堆栈，比如 Kerberos。](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 

**注意**  
SageMaker 默认情况下，AI 允许每个 AWS 账户使用 5 个 Studio 域名。 AWS 区域 在创建堆栈之前，请确保您的账户在您所在区域的域数不超过 4 个。

**按照以下步骤设置 SageMaker AI 域，以便从 Studio 启动亚马逊 EMR 集群。**

1. 从`sagemaker-studio-emr` GitHub存储库下载此[CloudFormation 模板](https://github.com/aws-samples/sagemaker-studio-foundation-models/blob/main/workshop-artifacts/cfn/workshop-cfn.yaml)的原始文件。

1. 进入 CloudFormation 控制台：[https://console.aws.amazon.com/](https://console.aws.amazon.com/cloudformation/)cloudformation

1. 选择**创建堆栈**，并从下拉菜单中选择**使用新资源（标准）**。

1. 在**步骤 1** 中：

   1. 在**准备模板**部分，选择**选择现有模板**。

   1. 在**指定模板**部分，选择**上传模板文件**。

   1. 上传下载的 CloudFormation 模板并选择 “**下一步**”。

1. 在**步骤 2** 中，输入**堆栈名称**，**SageMakerDomainName**然后选择 Ne **xt**。

1. 在**步骤 3** 中，保留所有默认值并选择**下一步**。

1. 在**步骤 4** 中，选中确认资源创建的复选框，然后选择**创建堆栈**。这将在您的账户和区域中创建一个 Studio 域。

## 步骤 2：从 Studio UI 启动新的 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart-launch"></a>

在以下步骤中，您将从 Studio UI 创建一个新的 Amazon EMR 集群。

1. 前往 A SageMaker I 控制台 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)，在左侧菜单中选择**域名**。

1. 点击您的域名**生成器AIDomain**以打开**域名详情**页面。

1. 从用户配置文件 `genai-user` 启动 Studio。

1. 在左侧导航窗格中，转到**数据**然后转到 **Amazon EMR 集群**。

1. 在 Amazon EMR 集群页面上，选择**创建**。**选择堆栈创建的 **SageMaker Studio Domain No Auth EMR** 模板 CloudFormation ，然后选择 “下一步”。**

1. 输入新 Amazon EMR 集群的名称。可选择更新其他参数，如核心节点和主节点的实例类型、空闲超时或核心节点数量。

1. 选择**创建资源**，启动新的 Amazon EMR 集群。

   创建 Amazon EMR 集群后，请查看 **EMR 集群**页面上的状态。当状态更改为 `Running/Waiting` 时，您的 Amazon EMR 集群就可以在 Studio 中使用了。

## 第 3 步：将 JupyterLab 笔记本电脑连接到 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart-connect"></a>

在以下步骤中 JupyterLab ，您将笔记本连接到正在运行的 Amazon EMR 集群。在本示例中，您导入了一个笔记本，允许您使用 Amazon EMR Spark 分布式处理 OpenSearch 和矢量数据库构建检索增强生成 (RAG) 系统。

1. 

**启动 JupyterLab**

   在 Studio 中，启动 JupyterLab 应用程序。

1. 

**创建专用空间**

   如果您尚未为 JupyterLab 应用程序创建空间，请选择**创建 JupyterLab 空间**。输入空间名称，并将空间保留为**专用**。将所有其他设置保留为默认值，然后选择**创建空间**。

   否则，请运行您的 JupyterLab 空间来启动 JupyterLab应用程序。

1. 

**部署 LLM 和嵌入模型进行推理**
   + 从顶部菜单中选择**文件**、**新建**，然后选择** 终端**。
   + 在终端运行以下命令。

     ```
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb
     mkdir AWSGuides
     cd AWSGuides
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/AmazonSageMakerDeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/EC2DeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/S3DeveloperGuide.pdf
     ```

     这会将 `Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` 笔记本检索到本地目录，并将三个 PDF 文件下载到本地 `AWSGuides` 文件夹。
   + 打开 `lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb`，保留 `Python 3 (ipykernel)` 内核，运行每个单元。
**警告**  
在 **Llama 2 权限协议**部分，确保在继续之前接受 Llama2 EULA。  
笔记本在 `ml.g5.2xlarge` 上部署了两个模型 `Llama 2` 和 `all-MiniLM-L6-v2 Models` 进行推理。

     部署模型和创建端点可能需要一些时间。

1. 

**打开主笔记本**

   在中 JupyterLab，打开终端并运行以下命令。

   ```
   cd ..
   wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb
   ```

   您应该会在的左侧面板中看到额外的`Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb`笔记本电脑 JupyterLab。

1. 

**选择一个 `PySpark` 内核**

   打开 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 笔记本，确保正在使用 `SparkMagic PySpark` 内核。您可以在笔记本右上角切换内核。选择当前内核名称，打开内核选择模式，然后选择 `SparkMagic PySpark`。

1. 

**将笔记本连接到集群**

   1. 在笔记本右上方，选择**集群**。此操作将打开一个模式窗口，列出您有权访问的所有正在运行的集群。

   1. 选择集群，然后选择**连接**。打开一个新的凭证类型选择模式窗口。

   1. 选择**无凭证**，然后选择**连接**。  
![\[该模式显示了为笔记本电脑选择的 Amazon EMR 凭证。 JupyterLab\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-credential-selection.png)

   1. 笔记本单元自动填充并运行。笔记本单元会加载 `sagemaker_studio_analytics_extension.magics` 扩展，提供连接 Amazon EMR 集群的功能。然后，它会使用 `%sm_analytics` 神奇命令启动与 Amazon EMR 集群和 Spark 应用程序的连接。
**注意**  
确保与 Amazon EMR 集群的连接字符串的身份验证类型设置为 `None`。下面示例中的 `--auth-type None` 值就说明了这一点。如有必要，您可以修改该字段。  

      ```
      %load_ext sagemaker_studio_analytics_extension.magics
      %sm_analytics emr connect --verify-certificate False --cluster-id your-cluster-id --auth-type None --language python
      ```

   1. 成功建立连接后，连接单元格输出信息将显示 `SparkSession` 详细信息，包括集群 ID、`YARN` 应用程序 ID 以及指向监控您的 Spark 作业的 Spark UI 的链接。

您可以使用 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 笔记本了。此示例笔记本运行分布式 PySpark 工作负载，用于使用 LangChain 和 OpenSearch构建 RAG 系统。

## 第 4 步：清理 CloudFormation 堆栈
<a name="studio-notebooks-emr-cluster-quickstart-clean-stack"></a>

完成后，确保终止两个端点并删除 CloudFormation 栈，以防继续收费。删除堆栈会清除堆栈供应的所有资源。

**在使用完 CloudFormation 堆栈后将其删除**

1. 进入 CloudFormation 控制台：[https://console.aws.amazon.com/](https://console.aws.amazon.com/cloudformation/)cloudformation

1. 选择要删除的堆栈。您可以按名称搜索，或在堆栈列表中查找。

1. 单击**删除**按钮最终删除堆栈，然后再次单击**删除**确认将删除堆栈创建的所有资源。

   等待堆栈删除完成。这可能需要几分钟时间。 CloudFormation 会自动清理堆栈模板中定义的所有资源。

1. 确认堆栈创建的所有资源都已被删除。例如，检查是否有剩余的 Amazon EMR 集群。

**要移除模型的 API 端点**

1. 前往 A SageMaker I 控制台:[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. 在左侧导航窗格中，选择**推理**，然后选择**端点**。

1. 选择端点 `hf-allminil6v2-embedding-ep`，然后在**操作**下拉列表中选择**删除**。对端点 `meta-llama2-7b-chat-tg-ep` 重复上述步骤。

# 管理员指南
<a name="studio-emr-admin-guide"></a>

本节提供了允许 Studio 或 Studio Classic 与 Amazon EMR 集群之间进行通信的前提条件和联网说明。它涵盖了不同的部署场景——当 Studio 和 Amazon EMR 是在 VPCs没有公共互联网访问的私有亚马逊中配置的，以及它们需要通过互联网进行通信时。

它介绍了管理员如何使用 AWS Service Catalog 将 CloudFormation 模板提供给 Studio，从而允许数据科学家直接从 Studio 中发现和自行配置 Amazon EMR 集群。这包括创建服务目录组合、授予必要的权限、引用 Amazon EMR 模板以及设置参数，以便在集群创建过程中进行自定义。

最后，它提供了从 Studio 和 Studio Classic 配置现有运行的 Amazon EMR 集群的可发现性的指导，涵盖单一账户和跨账户访问场景以及必要的 IAM 权限。

**Topics**
+ [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)
+ [配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)
+ [参考策略](studio-set-up-emr-permissions-reference.md)

# 在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板
<a name="studio-notebooks-set-up-emr-templates"></a>

本主题假设管理员熟悉[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) AWS Service Catalog、[中的产品组合和产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)以及 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。

为了简化从 Studio 创建 Amazon EMR 集群的过程，管理员可以将亚马逊 [EMR CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)注册为产品组合中的产品。[AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)要将模板提供给数据科学家，他们必须将产品组合与 Studio 或 Studio Classic 中使用的 SageMaker AI 执行角色相关联。最后，要允许用户从 Studio 或 Studio Classic 发现模板、配置集群并连接到 Amazon EMR 集群，管理员需要设置适当的访问权限。

Amazon EMR CloudFormation 模板允许最终用户自定义集群的各个方面。例如，管理员可以定义已批准的实例类型列表，供用户在创建集群时选择。

以下说明使用 end-to-end[CloudFormation 堆栈](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)来设置 Studio 或 Studio Classic 域名、用户个人资料、Service Catalog 产品组合，以及填充 Amazon EMR 启动模板。以下步骤重点介绍了管理员必须在其 end-to-end堆栈中应用的特定设置，才能让 Studio 或 Studio Classic 访问服务目录产品和配置 Amazon EMR 集群。

**注意**  
 GitHub 存储库 [aws-samples/ sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 包含示例 end-to-end CloudFormation堆栈，用于部署必要的 IAM 角色、网络、 SageMaker 域、用户个人资料、Service Catalog 产品组合，并添加亚马逊 EMR 启动模板。 CloudFormation 这些模板在 Studio 或 Studio Classic 与 Amazon EMR 集群之间提供不同的身份验证选项。在这些示例模板中，父 CloudFormation 堆栈将 SageMaker AI VPC、安全组和子网参数传递给 Amazon EMR 集群模板。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates 存储库包含各种亚马逊 CloudFormation EMR 启动模板](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates)示例，包括用于单账户和跨账户部署的选项。  
有关可用于连接 Amazon EMR 集群的身份验证方法的详细信息，请参阅 [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

要让数据科学家发现 Amazon EMR CloudFormation 模板并配置来自 Studio 或 Studio Classic 的集群，请按照以下步骤操作。

## 第 0 步：检查您的网络并准备 CloudFormation 堆栈
<a name="studio-set-up-emr-prereq"></a>

开始之前：
+ 确保已查看 [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md) 中的联网和安全要求。
+ 您必须有一个支持您选择的身份验证方法的现有 end-to-end CloudFormation 堆栈。您可以在 [aws-sam sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub p CloudFormation les/ 存储库中找到此类模板的示例。以下步骤重点介绍了 end-to-end堆栈中的特定配置，以允许在 Studio 或 Studio Classic 中使用 Amazon EMR 模板。

## 步骤 1：将你的 Service Catalog 产品组合与 SageMaker AI 关联起来
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**在您的 Service Catalog** 产品组合中，将您的产品组合 ID 与访问您的集群的 SageMaker AI 执行角色相关联。

为此，请在堆栈中添加以下部分（此处为 YAML 格式）。这授予 SageMaker AI 执行角色访问包含亚马逊 EMR 模板等产品的指定 Service Catalog 产品组合的权限。它允许 SageMaker AI 扮演的角色发布这些产品。

 *SageMakerStudioEMRProductPortfolio.ID*用它们的实际值替换*SageMakerExecutionRole.Arn*和。

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

有关所需的 IAM 权限集的详细信息，请参阅[权限](#studio-emr-permissions)部分。

## 步骤 2：在服务目录产品中引用 Amazon EMR 模板
<a name="studio-set-up-emr-service-catalog-product"></a>

**在产品组合的服务目录产品**中，引用 Amazon EMR 模板资源并确保其在 Studio 或 Studio Classic 中可见。

为此，请在服务目录产品定义中引用 Amazon EMR 模板资源，然后添加以下设置为 `"true"` 值的标签键 `"sagemaker:studio-visibility:emr"`（请参阅 YAML 格式的示例）。

在 Service Catalog 产品定义中，集群的 CloudFormation 模板是通过 URL 引用的。将附加标记设置为 true 可确保 Amazon EMR 模板在 Studio 或 Studio Classic 中的可见性。

**注意**  
示例中提供的 URL 所引用的 Amazon EMR 模板在启动时不会强制执行任何身份验证要求。该选项用于演示和学习。不建议在生产环境中使用。

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 第 3 步：参数化 Amazon EMR 模板 CloudFormation
<a name="studio-set-up-emr-cfn-template"></a>

**用于在 Service Catalog 产品中定义 Amazon EMR 集群的 CloudFormation 模板**允许管理员指定可配置的参数。管理员可在模板的 `Parameters` 部分为这些参数定义 `Default` 值和 `AllowedValues` 范围。在集群启动过程中，数据科学家可以提供自定义输入或从这些预定义选项中进行选择，以自定义其 Amazon EMR 集群的某些方面。

以下示例说明了管理员在创建 Amazon EMR 模板时可以设置的其他输入参数。

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

管理员在 Studio 中提供 Amazon EMR CloudFormation 模板后，数据科学家可以使用这些模板自行配置 Amazon EMR 集群。模板中定义的 `Parameters` 部分将转化为 Studio 或 Studio Classic 中集群创建表单上的输入字段。对于每个参数，数据科学家既可以在输入框中输入自定义值，也可以从下拉菜单中列出的预定义选项中进行选择，这些选项与模板中指定的 `AllowedValues` 相对应。

下图显示了根据 CloudFormation亚马逊 EMR 模板组装而成的动态表单，用于在 Studio 或 Studio Classic 中创建亚马逊 EMR 集群。

![\[从 CloudFormation 亚马逊 EMR 模板组装而成的动态表单的插图，用于从 Studio 或 Studio Classic 创建亚马逊 EMR 集群。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


访问 [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md) 了解如何使用这些 Amazon EMR 模板从 Studio 或 Studio Classic 启动集群。

## 步骤 4：设置权限以启用从 Studio 列出和启动 Amazon EMR 集群
<a name="studio-emr-permissions"></a>

最后，附加所需的 IAM 权限，以启用从 Studio 或 Studio Classic 列出现有正在运行的 Amazon EMR 集群和自配置新集群。

您必须添加这些权限的角色取决于 Studio 或 Studio Classic 和 Amazon EMR 是部署在同一账户（选择*单账户*）还是不同账户（选择*跨账户*）中。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

### 单一账户
<a name="studio-set-up-emr-permissions-singleaccount"></a>

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中，请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

### 跨账户
<a name="studio-set-up-emr-permissions-crossaccount"></a>

在开始之前，请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在不同的 AWS 账户中，则需要为两个账户配置权限。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

#### 在 Amazon EMR 集群账户上
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

请按照以下步骤在部署 Amazon EMR 的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

   有关如何在您的 Amazon EMR AWS 账户`AssumableRole`中创建新账户的详细说明，请按照以下步骤操作：

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab空间使用的执行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      将 `studio-account` 替换为 Studio Classic 帐户 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

#### Studio 账户
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的账户（也称为*可信账户*）上，更新访问集群的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。将 `emr-account` 替换为 Amazon EMR 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 3**：将您的假设角色（访问角色）与您的域名或用户个人资料相关联。 JupyterLab Studio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来，请执行以下操作：

   1. 导航到 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将您的假设角色（访问角色）添加到您的域中：在域名**详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的假设角色（访问角色）添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**， ARNs 然后添加您的假设角色（访问角色）。

   1. 选择**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole`（[RBAC 运行时角色]()的 `EMRServiceRole`）。此代码段更新了 SageMaker AI 域中特定用户配置文件（使用`client.update_userprofile`）或网域设置（使用`client.update_domain`）的用户配置文件设置。具体而言，它允许 JupyterLab 应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   为您的 Studio Classic 执行角色提供 `AssumableRole` 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

   您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    在 LCC 运行并且文件写入之后，服务器读取文件 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 并存储跨账户 ARN。

------

# 配置 Amazon EMR 集群列表
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理员可以为 SageMaker Studio 执行角色配置权限，以授予用户查看他们有权访问的 Amazon EMR 集群列表的能力，从而允许他们连接到这些集群。您要访问的集群可以部署在与 Studio 相同的 AWS 账户中（选择*单一账户*），也可以部署在不同的账户中（选择*跨账户*）。下页介绍如何授予从 Studio 或 Studio Classic 查看 Amazon EMR 集群的权限。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

要让数据科学家发现并 EMRclusters 从 Studio 或 Studio Classic 连接到亚马逊，请按照以下步骤操作。

## 单一账户
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中，请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

## 跨账户
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

在开始之前，请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

如果 Amazon EMR 集群和 Studio 或 Studio Classic 分别部署在不同的 AWS 账户中，则需要在这两个账户上配置权限。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

**在 Amazon EMR 集群账户上**

请按照以下步骤在部署 Amazon EMR 的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

   有关如何在您的 Amazon EMR AWS 账户`AssumableRole`中创建新账户的详细说明，请按照以下步骤操作：

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab空间使用的执行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      将 `studio-account` 替换为 Studio Classic 帐户 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

**Studio 账户**

在部署 Studio 的账户（也称为*可信账户*）上，更新访问集群的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。将 `emr-account` 替换为 Amazon EMR 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 3**：将您的假设角色（访问角色）与您的域名或用户个人资料相关联。 JupyterLabStudio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来，请执行以下操作：

   1. 导航到 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将您的假设角色（访问角色）添加到您的域中：在域名**详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的假设角色（访问角色）添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**， ARNs然后添加您的假设角色（访问角色）。

   1. 选择**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole`（[RBAC 运行时角色]()的 `EMRServiceRole`）。此代码段更新了 SageMaker AI 域中特定用户配置文件（使用`client.update_userprofile`）或网域设置（使用`client.update_domain`）的用户配置文件设置。具体而言，它允许 JupyterLab应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   为您的 Studio Classic 执行角色提供 `AssumableRole` 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

   您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    在 LCC 运行并且文件写入之后，服务器读取文件 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 并存储跨账户 ARN。

------

请参阅 [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)，了解如何从 Studio 或 Studio Classic 笔记本发现和连接 Amazon EMR 集群。

# 在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色
<a name="studio-notebooks-emr-cluster-rbac"></a>

当您从 Studio 或 Studio Classic 笔记本连接到 Amazon EMR 集群时，您可以直观地浏览 IAM 角色（称为运行时角色）列表，并即时选择一个角色。随后，从笔记本创建的所有 Apache Spark、Apache Hive 或 Presto 作业只能访问运行时角色所附策略允许的数据和资源。此外，当从使用管理的数据湖访问数据时 AWS Lake Formation，您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。

有了这项功能，您和您的队友就可以连接到同一个集群，每个人都可以使用一个运行时系统角色，该角色的权限与您访问数据的个人级别相匹配。您的会话在共享集群上也是相互隔离的。

要使用 Studio Classic 试[用此功能，请参阅使用精细的数据访问控制和 AWS Lake Formation Amazon Studio Classic 中的 Amazon SageMaker EMR](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)。本博文将有助于您建立一个演示环境，在该环境中，您可以尝试使用预配置的运行时系统角色来连接 Amazon EMR 集群。

## 先决条件
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

在开始之前，请确保您满足以下先决条件：
+ 使用 Amazon EMR 6.9 或更高版本。
+ **对于 Studio Classic 用户**：使用 Studio Classic Jupyter 服务器应用程序配置中的 JupyterLab 版本 3 该版本支持使用运行时角色将 Studio Classic 连接到 Amazon EMR 集群。

  **对于 Studio 用户**：使用[SageMaker 分发映像](sagemaker-distribution.md)版本`1.10`或更高版本。
+ 允许在集群的安全配置中使用运行时角色。有关更多信息，请参阅[用于 Amazon EMR 步骤的运行时系统角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)。
+ 使用[支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)中列出的任何内核创建笔记本。
+ 请务必查看 [设置 Studio 以使用运行时系统 IAM 角色](#studio-notebooks-emr-cluster-iam) 中的说明，以配置运行时角色。

## 跨账户连接方案
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

当数据位于 Studio 账户之外时，运行时系统角色身份验证支持各种跨账户连接方案。下图显示了在 Studio 和数据账户之间分配 Amazon EMR 集群、数据甚至 Amazon EMR 运行时执行角色的三种不同方式：

![\[运行时系统 IAM 角色身份验证支持的跨账户方案。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


在选项 1 中，您的 Amazon EMR 集群和 Amazon EMR 运行时执行角色位于与 Studio 帐户不同的数据帐户中。您可以定义一个单独的 Amazon EMR 访问角色（也称为 `Assumable role`）权限策略，授予 Studio 或 Studio Classic 执行角色承担 Amazon EMR 访问角色的权限。然后，Amazon EMR 访问角色会代表您的 Studio 或 Studio Classic 执行角色调用 Amazon EMR API `GetClusterSessionCredentials`，让您访问集群。

在选项 2 中，您的 Amazon EMR 集群和 Amazon EMR 运行时执行角色都在您的 Studio 账户中。您的 Studio 执行角色拥有使用 Amazon EMR API `GetClusterSessionCredentials` 访问集群的权限。要访问 Amazon S3 存储桶，请授予 Amazon EMR 运行时执行角色跨账户 Amazon S3 存储桶访问权限，您可以在 Amazon S3 存储桶策略中授予这些权限。

在选项 3 中，您的 Amazon EMR 集群位于您的 Studio 账户中，而 Amazon EMR 运行时执行角色位于数据账户中。您的 Studio 或 Studio Classic 执行角色拥有使用 Amazon EMR API `GetClusterSessionCredentials` 访问集群的权限。将 Amazon EMR 运行时执行角色添加到执行角色配置 JSON 中。然后，您可以在选择集群时在用户界面上选择角色。有关如何设置执行角色配置 JSON 文件的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

## 设置 Studio 以使用运行时系统 IAM 角色
<a name="studio-notebooks-emr-cluster-iam"></a>

要为 Amazon EMR 集群建立运行时系统角色身份验证，请配置所需的 IAM 策略、网络和可用性增强功能。如果您的 Amazon EMR 集群、Amazon EMR 运行时执行角色或两者都位于您的 Studio 账户之外，您的设置取决于您是否处理任何跨账户安排。以下部分将指导您安装策略、如何配置网络以允许跨账户之间的流量，以及如何设置本地配置文件以自动连接 Amazon EMR。

### 当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证
<a name="studio-notebooks-emr-cluster-iam-same"></a>

如果您的 Amazon EMR 集群位于您的 Studio 账户中，请完成以下步骤，为您的 Studio 执行策略添加必要的权限：

1. 添加连接 Amazon EMR 集群所需的 IAM 策略。有关详细信息，请参阅[配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)。

1. 当您传递策略中指定的一个或多个允许的 Amazon EMR 运行时执行角色时，授予调用 Amazon EMR API `GetClusterSessionCredentials` 的权限。

1. （可选）授予传递遵循任何用户定义命名约定的 IAM 角色的权限。

1. （可选）授予访问使用特定用户定义字符串标记的 Amazon EMR 集群的权限。

1. 预载 IAM 角色，以便在连接 Amazon EMR 集群时选择要使用的角色。有关如何预加载 IAM 角色的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

以下示例策略允许属于建模组和训练组的 Amazon EMR 运行时执行角色调用 `GetClusterSessionCredentials`。此外，策略持有人可以访问使用字符串 `modeling` 或 `training` 标记的 Amazon EMR 集群。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### 当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

如果您的 Amazon EMR 集群不在您的 Studio 账户中，请允许您的 SageMaker AI 执行角色代入跨账户 Amazon EMR 访问角色，这样您就可以连接到集群。完成以下步骤以设置跨账户配置：

1. 创建您的 SageMaker AI 执行角色权限策略，以便执行角色可以担任 Amazon EMR 访问角色。下面是一个示例策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 创建信任策略以指定可信哪个 Studio 账户 IDs 担任 Amazon EMR 访问角色。下面是一个示例策略：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. 创建 Amazon EMR 访问角色权限策略，授予 Amazon EMR 运行时执行角色在集群中执行预期任务所需的权限。配置 Amazon EMR 访问角色，以便使用访问角色权限策略中指定的 Amazon EMR 运行时执行角色调用 API `GetClusterSessionCredentials`。下面是一个示例策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 设置跨账户网络，使流量可以在账户之间来回移动。有关指导说明，请参阅 *[为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md)设置*。本节中的步骤可帮助您完成以下任务：

   1. VPC 对等 Studio 账户和 Amazon EMR 账户以建立连接。

   1. 在两个账户的私有子网路由表中手动添加路由。这允许从 Studio 账户创建 Amazon EMR 集群并将其连接到远程账户的私有子网。

   1. 设置附加到 Studio 域的安全组以允许出站流量，设置 Amazon EMR 主节点的安全组以允许来自 Studio 实例安全组的入站 TCP 流量。

1. 预加载 IAM 运行时角色，以便在连接到 Amazon EMR 集群时选择要使用的角色。有关如何预加载 IAM 角色的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

### 配置 Lake Formation 访问权限
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

当您访问由管理的数据湖中的数据时 AWS Lake Formation，您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。要配置 Lake Formation 访问权限，请参阅[将 Amazon EMR 与 AWS Lake Formation集成](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)。

### 将执行角色预加载到 Studio 或 Studio Classic 中
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

您可以预加载 IAM 运行时角色，以便在连接到 Amazon EMR 集群时选择要使用的角色。Studio JupyterLab 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

------
#### [ Preload runtime roles in JupyterLab using the SageMaker AI console ]

要使用 SageMaker AI 控制台将运行时角色与您的用户个人资料或域关联起来，请执行以下操作：

1. 导航到 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

1. 
   + 要将您的运行时（以及跨账户用例的访问角色）添加到您的域中：在**域名详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
   + 要将您的运行时（以及跨账户用例的访问角色）添加到您的用户个人资料中：在**域名详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户个人资料。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

1. 选择 **“编辑”**， ARNs 然后添加您的访问角色（假设角色）和 EMR Serverless 运行时执行角色。

1. 选择**提交**。

下次连接 Amazon EMR 服务器时，运行时角色应出现在下拉菜单中供您选择。

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `EMRServiceRole`。此代码片段在跨账户用例中更新 A SageMaker I 域内的用户配置文件设置 (`client.update_user_profile`)。具体来说，它为 Amazon EMR 设置了服务角色。它还允许 JupyterLab 应用程序担任特定 IAM 角色（`AssumableRole`或`AccessRole`），以便在亚马逊 EMR 账户中运行 Amazon EMR。

或者，如果您的空间使用域级别设置的执行角色，请使用 `client.update_domain` 更新域设置。

```
import botocore.session
import json
sess = botocore.session.get_session()
client = sess.create_client('sagemaker')

client.update_user_profile(
DomainId="domainID", 
UserProfileName="user-profile-name",
UserSettings={
    'JupyterLabAppSettings': {
        'EmrSettings': {
            'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
            'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                             "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
        }
        
    }
})
resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")

resp['CreationTime'] = str(resp['CreationTime'])
resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
print(json.dumps(resp, indent=2))
```

------
#### [ Preload runtime roles in Studio Classic ]

将 `AccessRole` (`AssumableRole`) 的 ARN 提供给你的 SageMaker AI 执行角色。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

下面的代码段是一个 LCC bash 脚本示例，如果您的 Studio Classic 应用程序和集群在同一个账户中，您就可以使用该脚本：

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

如果 Studio Classic 应用程序和集群位于不同账户中，请指定可以使用集群的 Amazon EMR 访问角色。在以下示例策略中，*123456789012 是*亚马逊 EMR 集群账户 ID，212121212121 **和** 434343434343 是允许的亚马逊 EMR 访问角色的。 ARNs 

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# 参考策略
<a name="studio-set-up-emr-permissions-reference"></a>
+ **列出 Amazon EMR 策略**：此策略允许执行以下操作：
  + `AllowPresignedUrl`允许生成预签名， URLs 以便从 Studio 中访问 Spark 用户界面。
  + `AllowClusterDiscovery` 和 `AllowClusterDetailsDiscovery` 允许列出和描述所提供区域和账户中的 Amazon EMR 集群。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **创建 Amazon EMR 集群策略**：此策略允许执行以下操作：
  + `AllowEMRTemplateDiscovery` 允许在服务目录中搜索 Amazon EMR 模板。Studio 和 Studio Classic 使用此功能显示可用模板。
  + `AllowSagemakerProjectManagement` 可以创建 [什么是 A SageMaker I 项目？](sagemaker-projects-whatis.md)。在 Studio 或 Studio Classic 中 AWS Service Catalog ，访问权限通过管理[什么是 A SageMaker I 项目？](sagemaker-projects-whatis.md)。

  所提供 JSON 中定义的 IAM 策略会授予这些权限。在将声明列表复制到您角色的内联政策之前，请将和替换*region*为您的实际区域和 AWS 账户 ID 值。*accountID*

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **域、用户配置文件和空间更新操作策略**：以下策略授予在指定区域和 AWS 账户内更新 SageMaker AI 域、用户配置文件和空间的权限。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# 用户指南
<a name="studio-emr-user-guide"></a>

本节介绍数据科学家和数据工程师如何从 Studio 或 Studio Classic 启动、发现、连接或终止 Amazon EMR 集群。

在用户列出或启动集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许 Amazon EMR 集群的自配置和列表，请参阅 [管理员指南](studio-emr-admin-guide.md)。

**Topics**
+ [支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](#studio-notebooks-emr-cluster-connect-kernels)
+ [自带映像](#studio-notebooks-emr-byoi)
+ [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md)
+ [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)
+ [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)
+ [从 Studio 或 Studio Classic 终止 Amazon EMR 集群](terminate-emr-clusters.md)
+ [从 Studio 或 Studio Classic 访问 Spark UI](studio-notebooks-access-spark-ui.md)

## 支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核
<a name="studio-notebooks-emr-cluster-connect-kernels"></a>

随附以下图像和内核 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)，该 JupyterLab 扩展程序[使用](https://livy.apache.org/) Apache Livy 通过[SparkMagic](https://github.com/jupyter-incubator/sparkmagic)库连接到远程 Spark（Amazon EMR）集群。
+ **对于 Studio 用户：** SageMaker 分发版是用于数据科学的 Docker 环境，用作 JupyterLab笔记本实例的默认映像。所有版本的 [SageMaker AI 发行](https://github.com/aws/sagemaker-distribution)版都`sagemaker-studio-analytics-extension`已预装。
+ **对于 Studio Classic 用户：**以下映像预装了 `sagemaker-studio-analytics-extension`：
  + DataScience — Python 3 内核
  + DataScience 2.0 — Python 3 内核
  + DataScience 3.0 — Python 3 内核
  + SparkAnalytics 1.0 — SparkMagic 还有内 PySpark 核
  + SparkAnalytics 2.0 — SparkMagic 还有内 PySpark 核
  + SparkMagic — SparkMagic 和内 PySpark 核
  + PyTorch 1.8 — Python 3 内核
  + TensorFlow 2.6 — Python 3 内核
  + TensorFlow 2.11 — Python 3 内核

要使用其他内置映像或您自己的映像连接到 Amazon EMR 集群，请按照[自带映像](#studio-notebooks-emr-byoi)中的说明进行操作。

## 自带映像
<a name="studio-notebooks-emr-byoi"></a>

要在 Studio 或 Studio Classic 中使用自己的映像并允许您的笔记本电脑连接到 Amazon EMR 集群，请在内核中安装以下[sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)扩展程序。它支持通过库将 SageMaker Studio 或 Studio Classic 笔记本电脑连接到 Spark（Amazon EMR）集群。[SparkMagic](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html)

```
pip install sparkmagic
pip install sagemaker-studio-sparkmagic-lib
pip install sagemaker-studio-analytics-extension
```

此外，要在连接 Amazon EMR 时使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html) 身份验证，您必须安装 kinit 客户端。根据您的操作系统，安装 kinit 客户端的命令可能会有所不同。要自带 Ubuntu（基于 Debian）映像，请使用 `apt-get install -y -qq krb5-user` 命令。

有关在 SageMaker Studio 或 Studio Classic 中自[带图片的更多信息，请参阅自带 SageMaker 图片](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)。

# 从 Studio 或 Studio Classic 启动 Amazon EMR 集群
<a name="studio-notebooks-launch-emr-cluster-from-template"></a>

数据科学家和数据工程师可以使用管理员设置的模板从 Studio 或 Studio Class CloudFormation ic 中自行配置 Amazon EMR 集群。在用户启动集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许自配置 Amazon EMR 集群的信息，请参阅 [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)。

从 Studio 或 Studio Classic 配置新的 Amazon EMR 集群：

1. 在 Studio 或 Studio Classic UI 的左侧面板中，选择左侧导航菜单中的**数据**节点。向下导航至 **Amazon EMR 集群**。这将打开一个页面，列出您可以从 Studio 或 Studio Classic 访问的 Amazon EMR 集群。

1. 选择右上角的**创建**按钮。这会打开一个新的模式，列出可供您使用的集群模板。

1. 选择一个集群模板，方法是选择模板名称，然后选择**下一步**。

1. 输入集群的详细信息，如集群名称和管理员设置的任何特定可配置参数，然后选择**创建集群**。集群的创建可能需要几分钟时间。  
![\[从 Studio 或 Studio Classic 创建 Amazon EMR 集群。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)

集群配置完成后，Studio 或 Studio Classic UI 会显示*集群已成功创建*消息。

要连接到集群，请参阅[从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

# 从 Studio 或 Studio Classic 列出 Amazon EMR 集群
<a name="discover-emr-clusters"></a>

数据科学家和数据工程师可以从 Studio 发现并连接到 Amazon EMR 集群。Amazon EMR 集群可能与 Studio 位于同一个 AWS 账户中，也可能位于不同的 AWS 账户中。

在用户列出或连接到集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许发现运行 Amazon EMR 集群的信息，请参阅 [管理员指南](studio-emr-admin-guide.md)。如果管理员[配置了跨账户发现 Amazon EMR 集群](studio-notebooks-configure-discoverability-emr-cluster.md)，则可以查看集群的综合列表。该列表包括 Studio 使用的 AWS 账户中的集群，以及来自您已被授予访问权限的远程账户的集群。

从 Studio 查看可用的 Amazon EMR 集群列表：

1. 在 Studio UI 的左侧导航菜单中，向下滚动到 **EMR Clusters**。这将打开一个页面，列出您可以访问的 Amazon EMR 集群。

   列表显示处于以下阶段的集群：**引导**、**启动**、**运行**、**等待**。您可以使用筛选器图标，根据集群的当前状态缩小显示集群的范围。

1. 选择要连接的特定**运行**集群，然后参考 [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

# 从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群
<a name="connect-emr-clusters"></a>

数据科学家和数据工程师可以直接从 Studio 用户界面发现并连接到 Amazon EMR 集群。开始之前，请确保已按照 [步骤 4：设置权限以启用从 Studio 列出和启动 Amazon EMR 集群](studio-notebooks-set-up-emr-templates.md#studio-emr-permissions) 部分所述配置了必要的权限。这些权限赋予 Studio 创建、启动、查看、访问和终止集群的能力。

您可以直接从 Studio 用户界面将 Amazon EMR 集群连接到新的 JupyterLab 笔记本电脑，也可以选择在正在运行 JupyterLab 的应用程序的笔记本中启动连接。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。您的 JupyterLab 空间必须使用 SageMaker 分发图片版本`1.10`或更高版本。

## 使用 Studio UI 连接到 Amazon EMR 集群
<a name="connect-emr-clusters-ui-options"></a>

要使用 Studio 或 Studio Classic 用户界面连接到您的集群，您可以从中访问的集群列表中启动连接[从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)，也可以从 SageMaker Studio 或 Studio Classic 中的笔记本启动连接。

**要通过 Studio 用户界面将 Amazon EMR 集群连接到新 JupyterLab 笔记本电脑，请执行以下操作：**

1. 在 Studio UI 的左侧面板中，选择左侧导航菜单中的**数据**节点。向下导航至 **Amazon EMR 应用程序和集群**。这将打开一个页面，列出可以从 Studio 的 **Amazon EMR 集群**标签访问的 Amazon EMR 集群。
**注意**  
如果您或您的管理员配置了允许跨账户访问 Amazon EMR 集群的权限，您就可以查看已授予 Studio 访问权限的所有账户的集群综合列表。

1. 选择要连接到新笔记本的 Amazon EMR 集群，然后选择**附加到笔记本**。这将打开一个显示 JupyterLab 空间列表的模态窗口。

1. 
   + 选择要从中启动 JupyterLab应用程序的空间，然后选择 “**打开笔记本**”。这会从你选择的空间启动 JupyterLab 应用程序并打开一个新的笔记本。
**注意**  
Studio Classic 用户需要选择映像和内核。有关支持的映像列表，请参阅[支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)或[自带映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi)。
   + 或者，您也可以选择模式窗口顶部的**创建新空间**按钮，创建一个新的专用空间。输入空间名称，然后选择**创建空间并打开笔记本**。这将创建一个具有默认实例类型和最新 SageMaker 发行映像的私有空间，启动 JupyterLab应用程序并打开新的笔记本。

1. 如果您选择的集群不使用 Kerberos、LDAP 或[运行时角色]()身份验证，Studio 会提示您选择凭证类型。从 **Http 基本身份验证**或**没有凭证**中进行选择，然后输入您的凭证（如果适用）。

   如果您选择的集群支持运行时角色，请选择 Amazon EMR 集群在运行作业时可承担的 IAM 角色名称。
**重要**  
要成功将 JupyterLab 笔记本连接到支持运行时角色的 Amazon EMR 集群，您必须先将运行时角色列表与您的域或用户配置文件相关联，如中所述。[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)未完成此步骤将无法建立连接。

   选择后，连接命令会弹出笔记本的第一个单元格，并启动与 Amazon EMR 集群的连接。

   连接成功后会显示一条消息，确认连接以及 Spark 应用程序的启动。

**或者，您可以从 JupyterLab 或 Studio Classic 笔记本电脑连接到集群。**

1. 选择笔记本顶部的**集群**按钮。这会打开一个模式窗口，列出处于 `Running` 状态、可以访问的 Amazon EMR 集群。您可以在 **Amazon EMR 集群**选项卡中的 `Running` Amazon EMR 集群。
**注意**  
对于 Studio Classic 用户来说，只有在使用来自 [支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 或 [自带映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi) 的内核时，**集群**才会显示。如果您在笔记本顶部未看到**集群**，请确保您的管理员已[配置了集群的可发现性](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-configure-discoverability-emr-cluster.html)并切换到支持的内核。

1. 选择要连接到的集群，然后选择**连接**。

1. 如果您将 Amazon EMR 集群配置为支持[运行时 IAM 角色](studio-notebooks-emr-cluster-rbac.md)，则可以从 **Amazon EMR 执行角色**下拉菜单中选择您的角色。
**重要**  
要成功将 JupyterLab 笔记本连接到支持运行时角色的 Amazon EMR 集群，您必须先将运行时角色列表与您的域或用户配置文件相关联，如中所述。[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)未完成此步骤将无法建立连接。

   否则，如果您选择的集群不使用 Kerberos、LDAP 或运行时角色身份验证，Studio 或 Studio Classic 会提示您选择凭证类型。您可以选择 **HTTP 基本身份验证**或**没有凭证**。

1. Studio 添加并运行代码块到活动单元格以建立连接。该单元包含连接神奇命令，用于根据身份验证类型将笔记本连接到应用程序。

   连接成功后会显示一条消息，确认连接以及 Spark 应用程序的启动。

## 使用连接命令连接到 Amazon EMR 集群
<a name="connect-emr-clusters-manually"></a>

要建立与 Amazon EMR 集群的连接，可以在笔记本单元格中执行连接命令。

建立连接时，可以使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)、[Lightweight Directory Access Protocol (LDAP)](https://docs.aws.amazon.com/) 或[运行时 IAM 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-rbac.html)身份验证。您选择的验证方法取决于集群配置。

您可以参考此示例[在启用 Kerberos 的 Amazon EMR 集群上使用网络负载均衡器访问 Apache Livy](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/) 来设置使用 Kerberos 身份验证的 Amazon EMR 集群。或者，您可以在 [a sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub ws-samples/ 存储库中使用 Kerberos 或 LDAP 身份验证来浏览 CloudFormation 示例模板。

如果您的管理员启用了跨账户访问权限，则无论您的 Studio Classic 应用程序和集群位于 AWS 同一个账户还是不同的账户中，您都可以从 Studio Classic 笔记本电脑连接到您的 Amazon EMR 集群。

对于以下每种身份验证类型，请使用指定命令从 Studio 或 Studio Classic 笔记本连接到集群。
+ **Kerberos**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Kerberos --language python 
  [--assumable-role-arn EMR_access_role_ARN ] 
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **LDAP**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access --language python 
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **NoAuth**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type None --language python
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **运行时系统 IAM 角色**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  有关使用运行时系统 IAM 角色连接到 Amazon EMR 集群的更多信息，请参阅[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access \
  --emr-execution-role-arn arn:aws:iam::studio_account_id:role/emr-execution-role-name
  [--assumable-role-arn EMR_access_role_ARN]
  [--verify-certificate /home/user/certificateKey.pem]
  ```

## 通过 HTTPS 连接到 Amazon EMR 集群。
<a name="connect-emr-clusters-ssl"></a>

如果您已将 Amazon EMR 集群配置为启用过境加密，并将 Apache Livy 服务器配置为 HTTPS，而且希望 Studio 或 Studio Classic 使用 HTTPS 与 Amazon EMR 通信，则需要配置 Studio 或 Studio Classic 以访问证书键。

对于自签名证书或本地证书颁发机构 (CA) 签名证书，您可以通过两个步骤完成此操作：

1. 使用以下选项之一，将证书的 PEM 文件下载到本地文件系统：
   + Jupyter 的内置文件上传功能。
   + 笔记本单元。
   + (仅限 Studio Classic 用户）生命周期配置 (LCC) 脚本。

     有关如何使用 LCC 脚本的信息，请参阅[使用生命周期配置脚本自定义笔记本实例](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)。

1. 在连接命令的 `--verify-certificate` 参数中，通过提供证书的路径来启用证书的验证。

   ```
   %sm_analytics emr connect --cluster-id cluster_id \
   --verify-certificate /home/user/certificateKey.pem ...
   ```

对于公共 CA 颁发的证书，请将 `--verify-certificate` 参数设置为 `true` 来设置证书验证。

或者，您可以通过将 `--verify-certificate` 参数设置为 `false` 来禁用证书验证。

您可以在[使用连接命令连接到 Amazon EMR 集群](#connect-emr-clusters-manually)中找到可用于连接到 Amazon EMR 集群的命令列表。

# 从 Studio 或 Studio Classic 终止 Amazon EMR 集群
<a name="terminate-emr-clusters"></a>

下面的步骤演示了如何从 Studio 或 Studio Classic 笔记本终止 Amazon EMR 集群。

**要终止处于 `Running` 状态的集群，请导航至可用的 Amazon EMR 集群列表。**

1. 在 Studio UI 中，向下滚动到左侧导航菜单中的**数据**节点。

1. 向下导航至 **EMR Clusters** 节点。这将打开一个页面，列出您可以访问的 Amazon EMR 集群。

1. 选择要终止的集群名称，然后选择**终止**。

1. 这将打开一个确认窗口，通知您在终止后，集群上所有待处理的工作或数据将永久丢失。再次选择**终止**进行确认。

# 从 Studio 或 Studio Classic 访问 Spark UI
<a name="studio-notebooks-access-spark-ui"></a>

以下各节提供了从 SageMaker AI Studio 或 Studio Classic 笔记本电脑访问 Spark 用户界面的说明。通过 Spark UI，您可以监控和调试从 Studio 或 Studio Classic 笔记本提交到 Amazon EMR 上运行的 Spark Jobs。SSH 隧道和预签名 URLs 是访问 Spark 界面的两种方式。

## 为 Spark UI 访问设置 SSH 隧道
<a name="studio-notebooks-emr-ssh-tunneling"></a>

要设置 SSH 隧道以访问 Spark UI，请按照此部分中的两个选项之一进行操作。

设置 SSH 隧道的选项：
+ [选项 1：使用本地端口转发设置到主节点的 SSH 隧道](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)
+ [选项 2，第 1 部分：使用动态端口转发设置到主节点的 SSH 隧道](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel.html)

  [选项 2，第 2 部分：配置代理设置以查看主节点上托管的网站。](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-proxy.html)

有关查看托管在 Amazon EMR 上的 Web 界面的更多信息，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)。您也可以访问 Amazon EMR 控制台以访问 Spark UI。

**注意**  
即使您无法使用预签名 URLs ，也可以设置 SSH 隧道。

## 预签名 URLs
<a name="studio-notebooks-emr-spark-ui-presigned-urls"></a>

要创建可以 SageMaker 从 Studio 或 Studio Classic 笔记本电脑访问 Amazon EMR 上的 Spark 用户界面的一键式 URLs 操作，您必须启用以下 IAM 权限。选择适用于您的选项：
+ **对于与 SageMaker Studio 或 Studio Classic 笔记本同一个账户的 Amazon EMR 集群：向 Studio 或 St SageMaker udio Classic IAM 执行角色添加以下权限。**
+ **对于位于不同账户（不是 SageMaker Studio 或 Studio Classic 笔记本电脑）中的 Amazon EMR 集群：将以下权限添加到您为其创建的跨账户角色中。[从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)**

**注意**  
在以下区域，您可以通过控制台访问预签名 URLs ：  
美国东部（弗吉尼亚州北部）区域
美国西部（北加利福尼亚）区域
加拿大（中部）区域
欧洲地区（法兰克福）区域
欧洲地区（斯德哥尔摩）区域
欧洲地区（爱尔兰）区域
欧洲地区（伦敦）区域
欧洲地区（巴黎）区域
亚太地区（东京）区域
亚太地区（首尔）区域
亚太地区（悉尼）区域
亚太地区（孟买）区域
亚太地区（新加坡）区域
南美洲（圣保罗）

 以下策略允许访问您的执行角色 URLs 的预签名。

```
{
        "Sid": "AllowPresignedUrl",
        "Effect": "Allow",
        "Action": [
            "elasticmapreduce:DescribeCluster",
            "elasticmapreduce:ListInstanceGroups",
            "elasticmapreduce:CreatePersistentAppUI",
            "elasticmapreduce:DescribePersistentAppUI",
            "elasticmapreduce:GetPersistentAppUIPresignedURL",
            "elasticmapreduce:GetOnClusterAppUIPresignedURL"
        ],
        "Resource": [
            "arn:aws:elasticmapreduce:region:account-id:cluster/*"
        ]
}
```

# 博客和白皮书
<a name="studio-notebooks-emr-resources"></a>

以下博客使用电影评论情绪预测的案例研究，说明执行完整机器学习工作流的过程。这包括数据准备、监控 Spark 作业以及训练和部署 ML 模型，以便直接从 Studio 或 Studio Classic 笔记本中获取预测结果。
+ [从 SageMaker Studio 或 Studio Classic 创建和管理 Amazon EMR 集群，以运行交互式 Spark 和 ML](https://aws.amazon.com/blogs/machine-learning/part-1-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/) 工作负载。
+ 要将用例扩展到跨账户配置，其中 SageMaker Studio 或 Studio Classic 以及您的 Amazon EMR 集群部署在 AWS 不同的账户中，[请参阅 SageMaker 从 Studio 或 Studio Classic 创建和管理 Amazon EMR 集群以运行交互式 Spark 和 ML](https://aws.amazon.com/blogs/machine-learning/part-2-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/) 工作负载——第 2 部分。

另请参阅：
+ [在启用了 Kerberos 的 Amazon EMR 集群上使用网络负载均衡器访问 Apache Livy 的](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)配置演练。
+ AWS [SageMaker Studio 或 Studio 经典版最佳实践](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/sagemaker-studio-admin-best-practices.html)白皮书。

# 问题排查
<a name="studio-notebooks-emr-troubleshooting"></a>

从 Studio 或 Studio Classic 笔记本使用 Amazon EMR 集群时，您可能会在连接或使用过程中遇到各种潜在问题或挑战。为帮助您排除故障并解决这些错误，本节将就可能出现的常见问题提供指导。

从 Studio 或 Studio Classic 笔记本连接或使用 Amazon EMR 集群时，可能会出现以下常见错误。

## 排除 Livy 连接挂起或失败的问题
<a name="studio-notebooks-emr-troubleshooting.memoryerror"></a>

以下是通过 Studio 或 Studio Classic 笔记本使用 Amazon EMR 集群时可能出现的 Livy 连接问题。
+ **您的 Amazon EMR 集群遇到了错误。 out-of-memory**

  Livy 连接因`sparkmagic`挂起或失败而可能的原因是您的 Amazon EMR 集群遇到了 out-of-memory错误。

  默认情况下，Apache Spark 驱动程序 `spark.driver.defaultJavaOptions` 的 Java 配置参数设置为 `-XX:OnOutOfMemoryError='kill -9 %p'`。这意味着当驱动程序遇到 `OutOfMemoryError` 时，采取的默认操作是通过发送 SIGKILL 信号来终止驱动程序。当 Apache Spark 驱动程序终止时，任何通过依赖于该应用程序的 `sparkmagic` 进行的 Livy 连接都会挂起或失败。这是因为 Spark 驱动程序负责管理 Spark 应用程序的资源，包括任务调度和执行。没有驱动程序时，Spark 应用程序将无法运行，任何与之交互的尝试都会失败。

  如果您怀疑 Spark 集群出现内存问题，可以查看 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) 日志。由于 out-of-memory错误而被杀死的容器通常以代码退出`137`。在这种情况下，您需要重新启动 Spark 应用程序并建立新的 Livy 连接，以恢复与 Spark 集群的交互。

  你可以参考知识库文章[如何解决 Amazon EMR 上的 Spark 上的 “容器因超过内存限制而被 YARN 杀死” 错误](https://repost.aws/knowledge-center/emr-spark-yarn-memory-limit)？ AWS re:Post 继续了解可用于解决 out-of-memory问题的各种策略和参数。

  我们建议您查看《[Amazon EMR 最佳实践指南](https://aws.github.io/aws-emr-best-practices/)》，了解有关在 Amazon EMR 集群上运行 Apache Spark 工作负载的最佳实践和调整指南。
+ **首次连接到 Amazon EMR 集群时，您的 Livy 会话超时。**

  当您最初使用连接到 Amazon EMR 集群时 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)，可能会遇到连接[超时错误，该集群允许使用 Apache Livy](https://livy.apache.org/) 通过[SparkMagic](https://github.com/jupyter-incubator/sparkmagic)库连接到远程 Spark (Amazon EMR) 集群：

  `An error was encountered: Session 0 did not start up in 60 seconds.`

  如果您的 Amazon EMR 集群在建立连接时需要初始化 Spark 应用程序，则遇到连接超时错误的可能性会增加。

  为了减少通过分析扩展程序使用 Livy 连接到 Amazon EMR 集群时出现超时的几率，`sagemaker-studio-analytics-extension` 版本 `0.0.19` 及更高版本会覆盖默认服务器会话超设置，将其改为 `120` 秒而不是 `sparkmagic` 默认的 `60` 秒。

  我们建议您通过运行以下升级命令，将扩展程序升级为 `0.0.18` 或更新版本。

  ```
  pip install --upgrade sagemaker-studio-analytics-extension
  ```

  请注意，在 `sparkmagic` 中提供自定义超时配置时，`sagemaker-studio-analytics-extension` 会遵循此覆盖操作。但是，将会话超时设置为 `60` 秒会自动触发 `sagemaker-studio-analytics-extension` 中的默认服务器会话超时（`120` 秒）。