

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

# 教程：Amazon EMR 入门
入门教程

演示快速设置 Amazon EMR 集群并运行 Spark 应用程序的工作流。

## 设置 Amazon EMR 集群


借助 Amazon EMR，您可以设置集群以便在几分钟内使用大数据框架处理和分析数据。本教程向您展示如何使用 Spark 启动示例集群，以及如何运行存储在 Amazon S3 存储桶中的简单 PySpark 脚本。它涵盖了三个主要工作流类别中的基本 Amazon EMR 任务：计划和配置、管理以及清除。

在学习本教程时，您可以找到指向更详细主题的链接，以及 [后续步骤](#emr-gs-next-steps) 部分中其他步骤的想法。如果您有任何疑问或遇到困难，请在我们的[论坛](https://forums.aws.csdn.net/forum.jspa?forumID=52)上联系 Amazon EMR 团队。

![\[Amazon EMR 的工作流程图，概览了计划和配置、管理以及清除这三个主要工作流程类别。\]](http://docs.amazonaws.cn/emr/latest/ManagementGuide/images/emr-workflow.png)


**先决条件**
+ 在启动 Amazon EMR 集群之前，请确保您已完成 [设置 Amazon EMR 之前](emr-setting-up.md) 中的任务。

**成本**
+ 您创建的示例集群将在实际环境中运行。该集群产生最低费用。为避免额外费用，请确保您完成本教程最后一步中的清理任务。根据 Amazon EMR 定价，费用按秒计算。费用也因区域而有所不同。有关更多信息，请参阅 [Amazon EMR 定价](https://www.amazonaws.cn/emr/pricing)。
+ 对于您在 Amazon S3 中存储的小文件，也可能会产生最低费用。如果您在 Amazon 免费套餐的使用限制范围内，则可以免除 Amazon S3 的部分或全部费用。有关更多信息，请参阅 [Amazon S3 定价](https://www.amazonaws.cn/s3/pricing)和[Amazon 免费套餐](https://www.amazonaws.cn/free/)。

## 步骤 1：配置数据资源并启动 Amazon EMR 集群
步骤 1：配置数据资源并启动 Amazon EMR 集群

### 为 Amazon EMR 准备存储


当您使用 Amazon EMR 时，您可以从各种文件系统中进行选择，以存储输入数据、输出数据和日志文件。在本教程，您可以使用 EMRFS 将数据存储在 S3 存储桶中。EMRFS 是 Hadoop 文件系统的一种实现方式，允许您读取常规文件并将其写入到 Amazon S3。有关更多信息，请参阅[使用 Amazon EMR 处理存储和文件系统](emr-plan-file-systems.md)。

要为本教程创建存储桶，请参照*《Amazon Simple Storage Service 控制台用户指南》*中的[如何创建 S3 存储桶？](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/create-bucket.html)。在您计划启动 Amazon EMR 集群的同一 Amazon 地区创建存储桶。例如，美国西部（俄勒冈）us-west-2。

您用于 Amazon EMR 的存储桶和文件夹具有以下限制：
+ 名称由小写字母、数字、句点 (.) 和连字符 (-) 组成。
+ 名称不能以数字结尾。
+ *对于所有 Amazon 账户*，存储桶名称必须是唯一的。
+ 输出文件夹必须为空。

### 为 Amazon EMR 准备含有输入数据的应用程序


为 Amazon EMR 准备应用程序的最常见方法是将应用程序及其输入数据上传至 Amazon S3。然后，您在向集群提交工作时，指定脚本和数据的 Amazon S3 位置。

在此步骤中，您将示例 PySpark 脚本上传到您的 Amazon S3 存储桶。我们提供了一个 PySpark 脚本供您使用。该脚本处理食品企业检查数据并在 S3 存储桶中返回结果文件。结果文件列出了红色类违规最多的十大企业。

您还可以将示例输入数据上传到 Amazon S3 以供 PySpark 脚本处理。输入数据是修正版，其中包含 2006 年至 2020 年华盛顿州金县卫生部门的检查结果。有关更多信息，请参阅 [King County Open Data: Food Establishment Inspection Data](https://data.kingcounty.gov/Health-Wellness/Food-Establishment-Inspection-Data/f29f-zza5)。请勿直接从金县网站下载本教程的餐厅数据，因为文件非常大。为了帮助完成本教程，我们在下面提供了一个包含较少记录的可下载文件。以下是数据集中的示例行。

```
name,inspection_result,inspection_closed_business,violation_type,violation_points
100 LB CLAM,Unsatisfactory,FALSE,BLUE,5
100 PERCENT NUTRICION,Unsatisfactory,FALSE,BLUE,5
7-ELEVEN #2361-39423A,Complete,FALSE,,0
```

**为 EMR 准备示例 PySpark 脚本**

1. 将下面的示例代码复制到您选择的编辑器中的新文件中。

   ```
   import argparse
   
   from pyspark.sql import SparkSession
   
   def calculate_red_violations(data_source, output_uri):
       """
       Processes sample food establishment inspection data and queries the data to find the top 10 establishments
       with the most Red violations from 2006 to 2020.
   
       :param data_source: The URI of your food establishment data CSV, such as 's3://amzn-s3-demo-bucket/food-establishment-data.csv'.
       :param output_uri: The URI where output is written, such as 's3://amzn-s3-demo-bucket/restaurant_violation_results'.
       """
       with SparkSession.builder.appName("Calculate Red Health Violations").getOrCreate() as spark:
           # Load the restaurant violation CSV data
           if data_source is not None:
               restaurants_df = spark.read.option("header", "true").csv(data_source)
   
           # Create an in-memory DataFrame to query
           restaurants_df.createOrReplaceTempView("restaurant_violations")
   
           # Create a DataFrame of the top 10 restaurants with the most Red violations
           top_red_violation_restaurants = spark.sql("""SELECT name, count(*) AS total_red_violations 
             FROM restaurant_violations 
             WHERE violation_type = 'RED' 
             GROUP BY name 
             ORDER BY total_red_violations DESC LIMIT 10""")
   
           # Write the results to the specified output URI
           top_red_violation_restaurants.write.option("header", "true").mode("overwrite").csv(output_uri)
   
   if __name__ == "__main__":
       parser = argparse.ArgumentParser()
       parser.add_argument(
           '--data_source', help="The URI for you CSV restaurant data, like an S3 bucket location.")
       parser.add_argument(
           '--output_uri', help="The URI where output is saved, like an S3 bucket location.")
       args = parser.parse_args()
   
       calculate_red_violations(args.data_source, args.output_uri)
   ```

1. 将该文件保存为 `health_violations.py`。

1. 将 `health_violations.py` 上传到您为本教程创建的 Amazon S3 存储桶中。有关说明，请参阅 *Amazon Simple Storage Service 入门指南*中的[将对象上传到存储桶](https://docs.amazonaws.cn/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket)。

**为 EMR 准备示例输入数据**

1. 下载 zip 文件 [food\$1establishment\$1data.zip](samples/food_establishment_data.zip)。

1. 解压并保存 `food_establishment_data.zip` 至 计算机的 `food_establishment_data.csv`。

1. 将 CSV 文件上载到您为本教程创建的 S3 存储桶。有关说明，请参阅 *Amazon Simple Storage Service 入门指南*中的[将对象上传到存储桶](https://docs.amazonaws.cn/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket)。

有关为 EMR 设置数据的更多信息，请参阅[准备输入数据以供 Amazon EMR 处理](emr-plan-input.md)。

### 启动 Amazon EMR 集群


您在准备存储位置和应用程序之后，则可以启动示例 Amazon EMR 集群。在此步骤，您使用最新的 [Amazon EMR 版本](https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-release-components.html)启动 Apache Spark 集群。

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

**使用新控制台启动已安装 Spark 的集群**

1. [登录 Amazon Web Services 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.amazonaws.cn/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择 **Create cluster**（创建集群）。

1. 在 **Create Cluster**（创建集群）页面上，记下 **Release**（发行版）、**Instance type**（实例类型）、**Number of instances**（示例数量）和 **Permissions**（权限）的默认值。这些字段使用适用于通用型集群的值自动填充。

1. 在**集群名称**字段中，输入唯一的集群名称以帮助您识别您的集群，例如*My first cluster*。集群名称不能包含字符 <、>、\$1、\$1 或 `（反引号）。

1. 在 **Applications (应用程序)** 下，选择 **Spark** 选项以在集群上安装 Spark。
**注意**  
在启动集群之前，选择要在 Amazon EMR 集群上运行的应用程序。在启动集群之后，您无法在集群中添加或删除应用程序。

1. 在 **Cluster logs**（集群日志）下，选中 Publish cluster-specific logs to Amazon S3（将集群特定日志发布到 Amazon S3）复选框。将 **Amazon S3 location**（Amazon S3 位置）值替换为您创建的 Amazon S3 存储桶，后跟 **/logs**。例如 **s3://amzn-s3-demo-bucket/logs**。添加 **/logs** 会在存储桶中创建一个名为“logs”的新文件夹，Amazon EMR 可以从中复制集群的日志文件。

1. 在 **Security configuration and permissions**（安全配置和权限）下，选择您的 **EC2 key pair**（EC2 密钥对）。**在同一部分中，选择 **Amazon EMR 的服务角色下拉菜单，然后选择 EMR** \$1。DefaultRole**然后，选择**实例配置文件的 IAM 角色**下拉菜单并选择 **EMR\$1 \$1 EC2**。DefaultRole

1. 选择 **Create cluster**（创建集群）以启动集群并打开集群详细信息页面。

1. 找到集群名称旁边的集群 **Status (状态)**。Amazon EMR 预制集群过程中，状态会从 **Starting (正在启动) **变为 **Running (正在运行) **再变为** Waiting (正在等待)**。您可能需要选择右侧的刷新图标或刷新您的浏览器才能查看状态更新情况。

集群已启动且正在运行，并准备好接受工作时，集群状态会变更为 **Waiting (正在等待)**。有关读取集群摘要的更多信息，请参阅[查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)。有关集群状态的信息，请参阅[了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。

------
#### [ CLI ]

**要启动安装了 Spark 的集群，请使用 Amazon CLI**

1. 创建 IAM 原定设置角色，然后您可以使用该角色通过以下命令创建集群。

   ```
   aws emr create-default-roles
   ```

   有关 `create-default-roles` 的更多信息，请参阅 [Amazon CLI 命令参考](https://docs.amazonaws.cn/cli/latest/reference/emr/create-default-roles.html)。

1. 使用以下命令创建 Spark 集群。使用 `--name` 选项为您的集群输入一个名称，并使用 `--ec2-attributes` 选项指定您的 EC2 密钥对的名称。

   ```
   aws emr create-cluster \
   --name "<My First EMR Cluster>" \
   --release-label <emr-5.36.2> \
   --applications Name=Spark \
   --ec2-attributes KeyName=<myEMRKeyPairName> \
   --instance-type m5.xlarge \
   --instance-count 3 \
   --use-default-roles
   ```

   请注意 `--instance-type`、`--instance-count` 和 `--use-default-roles` 的其它必需值。这些值是为通用型集群选择的。有关 `create-cluster` 的更多信息，请参阅 [Amazon CLI 命令参考](https://docs.amazonaws.cn/cli/latest/reference/emr/create-cluster.html)。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字符 (^)。

   将会看到类似下面的输出。输出将显示新集群的`ClusterId`和`ClusterArn`。记下您的`ClusterId`。您可以使用`ClusterId`检查集群状态并提交工作。

   ```
   {
       "ClusterId": "myClusterId",
       "ClusterArn": "myClusterArn"
   }
   ```

1. 使用以下命令检查集群状态。

   ```
   aws emr describe-cluster --cluster-id <myClusterId>						
   ```

   您应看到类似下面的输出，可以使用`Status`对象适用于新集群。

   ```
   {
       "Cluster": {
           "Id": "myClusterId",
           "Name": "My First EMR Cluster",
           "Status": {
               "State": "STARTING",
               "StateChangeReason": {
                   "Message": "Configuring cluster software"
               }
           }
        }
   }
   ```

   在 Amazon EMR 预置集群时，`State`值从`STARTING`变为`RUNNING`，再变为`WAITING`。

集群已启动且正在运行，并准备好接受工作时，集群状态会变更为 `WAITING`。有关集群状态的信息，请参阅 [了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。

------

## 步骤 2：将工作提交到 Amazon EMR 集群
步骤 2：将工作提交到 Amazon EMR 集群

### 提交工作并查看结果


启动集群后，可以向正在运行的集群提交工作，从而处理分析数据。提交工作至 Amazon EMR 集群，作为 *step (步骤)*。步骤是由一个或多个任务组成的工作单位。例如，您可以提交一个步骤来计算值，或传输和处理数据。可以在创建集群时提交步骤，也可以将步骤提交到正在运行的集群。教程这部分内容中，您向正在运行的集群提交`health_violations.py`步骤。要了解有关步骤的更多信息，请参阅[将工作提交到 Amazon EMR 集群](emr-work-with-steps.md)。

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

**使用控制台以步骤的形式提交 Spark 应用程序**

1. [登录 Amazon Web Services 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.amazonaws.cn/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要提交工作的集群。集群状态必须为 **Waiting (正在等待)**。

1. 选择 **Steps**（步骤）选项卡，然后选择 **Add step**（添加步骤）。

1. 根据以下准则配置步骤：
   + 对于 **Type**（类型），选择 **Spark application**（Spark 应用程序）。您应该会看到 **Deploy Mode**（部署模式）、**Application location**（应用程序位置）和 **Spark-submit options**（Spark-submit 选项）的其他字段。
   + 对于 **Name**（名称），输入新名称。如果您在集群中有很多步骤，命名每个步骤有助于您跟踪它们。
   + 对于 **Deploy mode**（部署模式），保留默认值 **Cluster mode**（集群模式）。有关 Spark 部署模式的更多信息，请参阅 Apache Spark 文档中的 [Cluster mode overview](https://spark.apache.org/docs/latest/cluster-overview.html)（集群模式概览）。
   + 在 “**应用程序位置**” 中，输入`health_violations.py`脚本在 Amazon S3 中的位置，例如*s3://amzn-s3-demo-bucket/health\$1violations.py*。
   + **Spark-submit options**（Spark-submit 选项）字段留空。有关 `spark-submit` 选项的更多信息，请参阅 [Launching applications with spark-submit](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit)（使用 spark-submit 启动应用程序）。
   + 在 **Arguments (参数)** 字段中，输入以下参数和值：

     ```
     --data_source s3://amzn-s3-demo-bucket/food_establishment_data.csv
     --output_uri s3://amzn-s3-demo-bucket/myOutputFolder
     ```

     *s3://amzn-s3-demo-bucket/food\$1establishment\$1data.csv*替换为您在中准备的输入数据的 S3 存储桶 URI [为 Amazon EMR 准备含有输入数据的应用程序](#emr-getting-started-prepare-app)。

     *amzn-s3-demo-bucket*替换为您在本教程中创建的存储桶的名称，并*myOutputFolder*替换为集群输出文件夹的名称。
   + 对于 **Action if step fails**（步骤失败时的操作），接受默认选项 **Continue**（继续）。这样，如果步骤失败，集群将继续运行。

1. 选择 **Add (添加)** 以提交步骤。该步骤应出现在控制台中，状态为 **Pending (待处理)**。

1. 监控步骤状态。状态将从 **Pending**（待处理）变为 **Running**（正在运行）再变为 **Completed**（已完成）。要更新控制台中的状态，请选择 **Filter**（筛选条件）右侧的刷新图标。运行该脚本大约需要一分钟时间。步骤成功完成后，该状态将变为 **Completed**（已完成）。

------
#### [ CLI ]

**要将 Spark 申请作为步骤提交 Amazon CLI**

1. 确保您拥有在 [启动 Amazon EMR 集群](#emr-getting-started-launch-sample-cluster) 中启动的集群的 `ClusterId`。您还可以使用以下命令检索集群 ID。

   ```
   aws emr list-clusters --cluster-states WAITING							
   ```

1.  通过 `add-steps` 命令和 `ClusterId`，将 `health_violations.py` 以步骤的形式提交。
   + 您可以通过替换为步骤指定名称*"My Spark Application"*。在`Args`数组中，*s3://amzn-s3-demo-bucket/health\$1violations.py*替换为`health_violations.py`应用程序的位置。
   + *s3://amzn-s3-demo-bucket/food\$1establishment\$1data.csv*替换为`food_establishment_data.csv`数据集的 S3 位置。
   + *s3://amzn-s3-demo-bucket/MyOutputFolder*替换为指定存储桶的 S3 路径和集群输出文件夹的名称。
   + `ActionOnFailure=CONTINUE` 表示如果步骤失败，集群将继续运行。

   ```
   aws emr add-steps \
   --cluster-id <myClusterId> \
   --steps Type=Spark,Name="<My Spark Application>",ActionOnFailure=CONTINUE,Args=[<s3://amzn-s3-demo-bucket/health_violations.py>,--data_source,<s3://amzn-s3-demo-bucket/food_establishment_data.csv>,--output_uri,<s3://amzn-s3-demo-bucket/MyOutputFolder>]
   ```

   有关使用 CLI 提交步骤的更多信息，请参阅 [Amazon CLI 命令参考](https://docs.amazonaws.cn/cli/latest/reference/emr/add-steps.html)。

   提交步骤后，您应该会看到包含 `StepIds` 的列表的输出，类似于下列内容。由于您提交了一个步骤，因此列表中只有一个 ID。复制步骤 ID。使用步骤 ID，检查步骤状态。

   ```
   {
       "StepIds": [
           "s-1XXXXXXXXXXA"
       ]
   }
   ```

1. 使用带有 `describe-step` 命令的步骤，查询步骤的状态。

   ```
   aws emr describe-step --cluster-id <myClusterId> --step-id <s-1XXXXXXXXXXA>							
   ```

   您应该会看到包含步骤相关内容的输出，类似于以下内容。

   ```
   {
       "Step": {
           "Id": "s-1XXXXXXXXXXA",
           "Name": "My Spark Application",
           "Config": {
               "Jar": "command-runner.jar",
               "Properties": {},
               "Args": [
                   "spark-submit",
                   "s3://amzn-s3-demo-bucket/health_violations.py",
                   "--data_source",
                   "s3://amzn-s3-demo-bucket/food_establishment_data.csv",
                   "--output_uri",
                   "s3://amzn-s3-demo-bucket/myOutputFolder"
               ]
           },
           "ActionOnFailure": "CONTINUE",
           "Status": {
               "State": "COMPLETED"
           }
       }
   }
   ```

   随着步骤的运行，步骤的 `State` 从 `PENDING` 变为 `RUNNING`，再变为 `COMPLETED`。运行该步骤大约需要一分钟，因此您可能需要多次检查状态。

当 `State` 更改为 `COMPLETED` 时，您将知道该步骤已成功。

------

有关步骤生命周期的更多信息，请参阅[运行步骤以处理数据](emr-overview.md#emr-overview-steps)。

### 查看结果


步骤成功运行后，您可以在 Amazon S3 输出文件夹中查看其输出结果。

**查看 `health_violations.py` 的结果**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 选择 **Bucket name (存储桶名称)**，然后选择您在提交步骤时指定的输出文件夹。例如，*amzn-s3-demo-bucket*然后*myOutputFolder*。

1. 验证以下项目是否位于输出文件夹中：
   + 称为 `_SUCCESS` 的小格式对象。
   + 以前缀 `part-` 开头的 CSV 文件，包含结果。

1. 选择包含结果的对象，然后选择 **Download (下载)** 以将结果保存到本地文件系统。

1. 在选定编辑器中打开结果。输出文件列出了红色违规最多的十大食品企业。输出文件还显示每个机构的红色违规总数。

   以下是 `health_violations.py` 结果的示例。

   ```
   name, total_red_violations
   SUBWAY, 322
   T-MOBILE PARK, 315
   WHOLE FOODS MARKET, 299
   PCC COMMUNITY MARKETS, 251
   TACO TIME, 240
   MCDONALD'S, 177
   THAI GINGER, 153
   SAFEWAY INC #1508, 143
   TAQUERIA EL RINCONSITO, 134
   HIMITSU TERIYAKI, 128
   ```

有关 Amazon EMR 集群输出的更多信息，请参阅[为 Amazon EMR 集群输出配置位置](emr-plan-output.md)。

### （可选）连接到正在运行的 Amazon EMR 集群


当您使用 Amazon EMR 时，您可能希望连接到正在运行的集群，以读取日志文件、调试集群或使用类似于 Spark shell 的 CLI 工具。通过 Amazon EMR，您可以使用 Secure Shell（SSH）协议连接到集群。本部分介绍如何配置 SSH、集群连接以及查看 Spark 的日志文件。有关连接到集群的更多信息，请参阅 [对 Amazon EMR 集群节点进行身份验证](emr-authenticate-cluster-connections.md)。

#### 授权与集群的 SSH 连接


在连接到集群之前，您需要修改集群安全组以授权入站 SSH 连接。Amazon EC2 安全组充当虚拟防火墙以控制至您的集群的入站和出站流量。为本教程创建集群时，Amazon EMR 代表您创建了以下安全组：

**ElasticMapReduce-主人**  
与主节点关联的默认 Amazon EMR 托管安全组。在 Amazon EMR 集群中，主节点是管理集群的 Amazon EC2 实例。

**ElasticMapReduce-奴隶**  
与核心和任务节点关联的默认安全组。

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

**允许使用控制台对主要安全组的受信任来源进行 SSH 访问**

要编辑安全组，您必须具有权限来管理集群所在 VPC 的安全组。有关更多信息，请参阅《IAM 用户指南》**中的[更改用户的权限](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_users_change-permissions.html)和允许管理 EC2 安全组的[示例策略](https://docs.amazonaws.cn//IAM/latest/UserGuide/reference_policies_examples_ec2_securitygroups-vpc.html)。

1. [登录 Amazon Web Services 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.amazonaws.cn/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要更新的集群。集群详细信息页面随即打开。应预先选择此页面上的 **Properties**（属性）选项卡。

1. 在 **Properties**（属性）选项卡的 **Networking**（联网）下，选择 **EC2 security groups (firewall)** [EC2 安全组（防火墙）] 旁边的箭头以展开此部分。在 **Primary node**（主节点）下，选择安全组链接。完成以下步骤后，可以选择返回此步骤，选择 **Core and task nodes**（核心节点和任务节点），然后重复以下步骤以允许 SSH 客户端访问核心节点和任务节点。

1. 此操作将打开 EC2 控制台。选择 **Inbound rules**（入站规则）选项卡，然后选择 **Edit inbound rules（编辑入站规则）**。

1. 通过以下设置检查允许公有访问的入站规则。如果存在，请选择 **Delete (删除)** 以将其删除。
   + **Type**

     SSH
   + **端口**：

     22
   + **源**

     自定义 0.0.0.0/0
**警告**  
2020 年 12 月之前， ElasticMapReduce-master 安全组已预先配置规则，允许所有来源的端口 22 上的入站流量。此规则的创建可以简化与主节点 (master node) 的初始 SSH 客户端连接。我们强烈建议您移除此入站规则，限制流量进入可信来源。

1. 滚动到规则列表的底部并选择 **Add Rule (添加规则)**。

1. 对于**Type (类型)**，选择 **SSH**。选择 SSH，自动为 **Protocol (协议)** 输入 **TCP**，为 **Port Range (端口范围)** 输入 **22**。

1. 针对源，选择 **My IP（我的 IP）**，自动添加您的 IP 地址作为源地址。您也可以添加一系列 **Custom (自定义)** 可信客户端 IP 地址，或创建针对其他客户端的其他规则。许多网络环境动态分配 IP 地址，因此您以后可能需要更新受信任客户端的 IP 地址。

1. 选择**保存**。

1. 或者，从列表中选择 **Core and task nodes**（核心节点和任务节点）并重复上述步骤，以允许 SSH 客户端访问核心节点和任务节点。

------

#### 使用 Connect 连接到您的集群 Amazon CLI


无论您的操作系统如何，都可以使用 Amazon CLI创建 SSH 连接到集群。

**要连接到您的集群并使用查看日志文件 Amazon CLI**

1. 使用以下命令开启与集群的 SSH 连接。*<mykeypair.key>*替换为 key pair 文件的完整路径和文件名。例如 `C:\Users\<username>\.ssh\mykeypair.pem`。

   ```
   aws emr ssh --cluster-id <j-2AL4XXXXXX5T9> --key-pair-file <~/mykeypair.key>						
   ```

1. 导航到 `/mnt/var/log/spark` 访问集群主节点 (master node) 上的 Spark 日志。然后查看该位置的文件。有关主节点 (master node) 上其他日志文件的列表，请参阅 [查看主节点上的日志文件](emr-manage-view-web-log-files.md#emr-manage-view-web-log-files-master-node)。

   ```
   cd /mnt/var/log/spark
   ls
   ```

### 使用 Amazon SageMaker AI Unified Studio 管理您的亚马逊 EMR 集群


 EC2 上的 Amazon EMR 也是 Uni Amazon SageMaker AI fied Studio 支持的计算类型。有关如何在 Un [ified Studio 中使用和管理 EC2 资源上的](https://docs.amazonaws.cn/sagemaker-unified-studio/latest/userguide/managing-emr-on-ec2.html) EMR，请参阅在 EC2 上管理 Amazon EMR。 Amazon SageMaker AI 

## 第 3 步：清除 Amazon EMR 资源
第 3 步：清除

### 终止集群


既然您已向集群提交工作并查看了PySpark 应用程序的结果，就可以终止集群了。终止集群会停止所有集群关联的 Amazon EMR 费用和 Amazon EC2 实例。

在终止集群后，Amazon EMR 将有关集群的元数据免费保留两个月。归档元数据有助于为新任务[克隆集群 (clone the cluster) ](clone-console.md)或为了参考的目的重新访问集群配置。元数据*不*包括集群写入 S3 的数据，或存储在集群上的 HDFS 中的数据。

**注意**  
Amazon EMR 控制台不允许您在关闭集群后从列表视图中终止集群。当 Amazon EMR 清除其元数据时，终止的集群将从控制台消失。

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

**使用控制台终止集群**

1. [登录 Amazon Web Services 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.amazonaws.cn/emr)

1. 选择 **Clusters**（集群），然后选择要终止的集群。

1. 在 **Actions**（操作）下拉菜单下，选择 **Terminate cluster**（终止集群）。

1. 在对话框中选择 **Terminate**（终止）。根据集群配置，终止可能需要 5 至 10 分钟。有关如何终止 Amazon EMR 集群的更多信息，请参阅 [终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

------
#### [ CLI ]

**使用终止集群 Amazon CLI**

1. 使用以下命令启动集群终止过程。*<myClusterId>*替换为示例集群的 ID。命令不会返回输出。

   ```
   aws emr terminate-clusters --cluster-ids <myClusterId>
   ```

1. 要检查集群终止过程是否正在进行，请使用以下命令检查集群状态。

   ```
   aws emr describe-cluster --cluster-id <myClusterId>									
   ```

   以下是 JSON 格式的示例输出。集群 `Status` 应从 **`TERMINATING`** 更改为 **`TERMINATED`**。终止可能需要 5 到 10 分钟，具体取决于集群配置。有关终止 Amazon EMR 集群的更多信息，请参阅[终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

   ```
   {
       "Cluster": {
           "Id": "j-xxxxxxxxxxxxx",
           "Name": "My Cluster Name",
           "Status": {
               "State": "TERMINATED",
               "StateChangeReason": {
                   "Code": "USER_REQUEST",
                   "Message": "Terminated by user request"
               }
           }
       }
   }
   ```

------

### 删除 S3 资源


为避免产生额外费用，您应删除 Amazon S3 存储桶。删除存储桶意味着将删除本教程中的所有 Amazon S3 资源。您的存储桶应包含：
+ 剧 PySpark 本
+ 输入数据集
+ 您的输出结果文件夹
+ 您的日志文件夹

如果您将PySpark 脚本或输出保存在其他位置，则可能需要采取额外的步骤来删除存储的文件。

**注意**  
在删除存储桶之前，必须终止集群。否则，可能不允许您清空存储桶。

要删除存储桶，请参照*《Amazon Simple Storage Service 用户指南》*中[如何删除 S3 存储桶？](https://docs.amazonaws.cn/AmazonS3/latest/userguide/delete-bucket.html)的说明。

## 后续步骤


您现在已经从头到尾启动了第一个 Amazon EMR 集群。您还完成了基本的 EMR 任务，例如：准备和提交大数据应用程序、查看结果以及终止集群。

可以使用以下主题了解如何自定义 Amazon EMR 工作流程的更多信息。

### 了解 Amazon EMR 的大数据应用程序


在[《Amazon EMR 版本指南》](https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-release-components.html)中发现并比较您可以在集群上安装的大数据应用程序。《发布指南 (Release Guide)》详细介绍了每个 EMR 发布版本，并包括使用 Amazon EMR 上的 Spark 和 Hadoop 等框架的提示。

### 规划集群硬件、联网和安全


本教程中，您将创建一个简单的 EMR 集群，而无需配置高级选项。高级选项允许您指定 Amazon EC2 实例类型、集群联网和集群安全性。有关规划和启动满足您要求的集群的更多信息，请参阅[规划、配置和启动 Amazon EMR 集群](emr-plan.md)和[Amazon EMR 中的安全性](emr-security.md)。

### 管理集群


深入了解如何在[管理 Amazon EMR 集群](emr-manage.md)中运行的集群。要管理集群，您可以连接到集群、调试步骤以及跟踪集群活动和健康状况。您还可以通过 [EMR 托管扩展](emr-managed-scaling.md)，调整集群资源以响应工作负载需求。

### 使用不同的界面


除了亚马逊 EMR 控制台之外，您还可以使用、网络服务 API 或众多支持的应用程序之一来管理 Amazon EMR。 Amazon Command Line Interface Amazon SDKs有关更多信息，请参阅 [管理界面](emr-overview-benefits.md#emr-what-tools)。

您可以通过多种方式与安装在 Amazon EMR 集群上的应用程序进行交互。某些应用程序（如 Apache Hadoop）会发布您可以查看的 Web 界面。有关更多信息，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

### 浏览 EMR 技术博客


有关新的 Amazon EMR 功能的示例演练和深入的技术讨论，请参阅[Amazon 大数据博客](https://www.amazonaws.cn/blogs/big-data/tag/amazon-emr/)。