

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

# 开始使用 Amazon EMR Serverless
<a name="getting-started"></a>

本教程可帮助您在部署示例 Spark 或 Hive 工作负载时开始使用 EMR Serverless。您将创建、运行和调试自己的应用程序。我们将在本教程的大部分内容中展示默认选项。

在启动 EMR Serverless 应用程序之前，请完成以下任务。

**Topics**
+ [授予使用 EMR Serverless 的权限](#gs-permissions)
+ [准备 EMR Serverless 存储](#gs-prepare-storage)
+ [创建 EMR Studio 运行交互式工作负载](#gs-interactive)
+ [创建作业运行时角色](#gs-runtime-role)
+ [从控制台开始使用 EMR Serverless](gs-console.md)
+ [从这里开始 AWS CLI](gs-cli.md)

## 授予使用 EMR Serverless 的权限
<a name="gs-permissions"></a>

要使用 EMR Serverless，您需要具有附加策略的用户或 IAM 角色，可授予使用 EMR Serverless 的权限。要创建用户并向该用户附加适当的策略，请按照 [授予权限](setting-up.md#setting-up-iam) 中的说明操作。

## 准备 EMR Serverless 存储
<a name="gs-prepare-storage"></a>

在本教程中，您将使用 S3 存储桶来存储示例 Spark 或 Hive 工作负载（使用 EMR Serverless 应用程序运行）的输出文件和日志。要创建存储桶，请按照《Amazon Simple Storage Service 控制台用户指南》**中[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)的说明操作。将对 `amzn-s3-demo-bucket` 的进一步引用替换为新建存储桶的名称。

## 创建 EMR Studio 运行交互式工作负载
<a name="gs-interactive"></a>

如果要使用 EMR Serverless 通过托管在 EMR Studio 中的 Notebook 执行交互式查询，则需要指定一个 S3 存储桶，并[为 EMR Serverless 指定一个最低服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html#emr-studio-service-role-serverless)，以创建 Workspace。有关设置步骤，请参阅《Amazon EMR 管理指南》**中的[设置 EMR Studio](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-set-up.html)。有关交互式工作负载的更多信息，请参阅 [通过 EMR Studio 使用 EMR Serverless 运行交互式工作负载](interactive-workloads.md)。

## 创建作业运行时角色
<a name="gs-runtime-role"></a>

在 EMR Serverless 中运行的作业使用运行时角色，该角色在运行时为特定资源 AWS 服务 和资源提供精细权限。在本教程中，数据和脚本存放在公有 S3 存储桶中。存储桶 `amzn-s3-demo-bucket` 存储输出。

要设置作业运行时角色，先创建一个具有信任策略的运行时角色，以便 EMR Serverless 可以使用新角色。然后，将所需的 S3 访问策略附加到该角色。以下步骤将指导您完成此过程。

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

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

1. 在左侧导航窗格中，选择 **Policies（策略）**。

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

1. **创建策略**页面将在新选项卡中打开。选择**策略编辑器**为 JSON，并在下面粘贴策略 JSON。
**重要**  
将以下策略中的 `amzn-s3-demo-bucket` 替换为 [准备 EMR Serverless 存储](#gs-prepare-storage) 中创建的实际存储桶名称。这是 S3 访问的基本策略。有关更多作业运行时角色示例，请参阅 [Amazon EMR Serverless 的作业运行时角色](security-iam-runtime-role.md)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ReadAccessForEMRSamples",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::*.elasticmapreduce",
           "arn:aws:s3:::*.elasticmapreduce/*"
         ]
       },
       {
         "Sid": "FullAccessToOutputBucket",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket",
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       },
       {
         "Sid": "GlueCreateAndReadDataCatalog",
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. 选择**下一步**为您的策略输入名称（如 `EMRServerlessS3AndGlueAccessPolicy`），然后选择**创建策略** 

1. 在 IAM 控制台的左侧导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 对于角色类型，选择**自定义信任策略**并粘贴以下信任策略。这样，提交到您的 Amazon EMR 无服务器应用程序的任务就可以 AWS 服务 代表您访问其他应用程序。

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

****  

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

------

1. 选择 “**下一步**” 导航至 “**添加权限**” 页面，然后选择 **EMRServerlessS3 AndGlueAccessPolicy**。

1. 在**命名、查看和创建**页面上，在**角色名称**中输入角色的名称，例如 `EMRServerlessS3RuntimeRole`。要创建此 IAM 角色，请选择**创建角色**。

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

1. 创建一个名为 `emr-serverless-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下策略。

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

****  

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

------

1. 创建命名为 `EMRServerlessS3RuntimeRole` 的 IAM 角色。使用您在上一步中创建的信任策略。

   ```
   aws iam create-role \
       --role-name EMRServerlessS3RuntimeRole \
       --assume-role-policy-document file://emr-serverless-trust-policy.json
   ```

   记下输出中的 ARN。在作业提交时，您可以使用新角色的 ARN，后面称为 `job-role-arn`。

1. 创建一个名为 `emr-sample-access-policy.json` 的文件，来定义工作负载的 IAM 策略。这提供了对公有 S3 存储桶中存储的脚本和数据的读取访问权限以及对 `amzn-s3-demo-bucket` 的读写访问权限。
**重要**  
将以下策略中的 `amzn-s3-demo-bucket` 替换为 [准备 EMR Serverless 存储](#gs-prepare-storage) 中创建的实际存储桶名称。这是 Glue 和 AWS S3 访问的基本策略。有关更多作业运行时角色示例，请参阅 [Amazon EMR Serverless 的作业运行时角色](security-iam-runtime-role.md)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ReadAccessForEMRSamples",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::*.elasticmapreduce",
           "arn:aws:s3:::*.elasticmapreduce/*"
         ]
       },
       {
         "Sid": "FullAccessToOutputBucket",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket",
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       },
       {
         "Sid": "GlueCreateAndReadDataCatalog",
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. 使用您在**步骤 3** 中创建的策略文件创建一个名为 `EMRServerlessS3AndGlueAccessPolicy` 的 IAM 策略。记下输出中的 ARN，因为下一步将使用新策略的 ARN。

   ```
   aws iam create-policy \
       --policy-name EMRServerlessS3AndGlueAccessPolicy \
       --policy-document file://emr-sample-access-policy.json
   ```

   记下输出中新策略的 ARN。下一步将用 `policy-arn` 来替代。

1. 将 IAM 策略 `EMRServerlessS3AndGlueAccessPolicy` 附加到作业运行时角色 `EMRServerlessS3RuntimeRole`。

   ```
   aws iam attach-role-policy \
       --role-name EMRServerlessS3RuntimeRole \
       --policy-arn policy-arn
   ```

------

# 从控制台开始使用 EMR Serverless
<a name="gs-console"></a>

本节介绍了如何使用 EMR Serverless，包括创建 EMR Studio。还介绍了如何提交作业运行和查看日志。

**Topics**
+ [步骤 1：创建 EMR Serverless 应用程序](#gs-application-console)
+ [步骤 2：提交作业运行或交互式工作负载](#gs-job-run-console)
+ [步骤 3：查看应用程序 UI 和日志](#gs-output-console)
+ [步骤 4：清除](#gs-cleanup-console)

## 步骤 1：创建 EMR Serverless 应用程序
<a name="gs-application-console"></a>

使用 EMR Serverless 创建新应用程序，如下所示。

1. [登录 AWS 管理控制台 并打开亚马逊 EMR 控制台，网址为 /emr。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中，选择 **EMR Serverless** 以导航到 EMR Serverless 登录页面。

1. 要创建或管理 EMR Serverless 应用程序，需使用 EMR Studio UI。
   + 如果您要创建应用程序 AWS 区域 的地方已经有 EMR Studio，请选择 “**管理应用程序**” 以导航到您的 EMR Studio，或者选择要使用的工作室。
   + **如果您要创建应用程序 AWS 区域 的地方没有 EMR Studio，请选择 “**开始”，然后选择 “创建” 并启动** Studio。**EMR Serverless 会为您创建一个 EMR Studio，用来创建和管理应用程序。

1. 在新选项卡中打开的**创建 Studio** UI 中，输入应用程序的名称、类型和发布版本。如果只想运行批处理作业，请选择**仅对批处理作业使用默认设置**。对于交互式工作负载，请选择**对交互式工作负载使用默认设置**。您还可以使用此选项在交互式应用程序上运行批处理作业。如果需要，您可以在以后更改这些设置。

   有关更多信息，请参阅[创建 Studio](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-create-studio.html)。

1. 选择**创建应用程序**，创建您的第一个应用程序。

继续下一节 [步骤 2：提交作业运行或交互式工作负载](#gs-job-run-console)，提交作业运行或交互式工作负载。

## 步骤 2：提交作业运行或交互式工作负载
<a name="gs-job-run-console"></a>

------
#### [ Spark job run ]

在本教程中，我们使用 PySpark 脚本来计算多个文本文件中唯一单词的出现次数。公有的只读 S3 存储桶可同时存储脚本和数据集。

**运行 Spark 作业**

1. 使用以下命令将示例脚本 `wordcount.py` 上传到新存储桶。

   ```
   aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
   ```

1. 完成 [步骤 1：创建 EMR Serverless 应用程序](#gs-application-console) 后，您将进入 EMR Studio 中的**应用程序详情**页面。在此页面上，选择**提交作业**选项。

1. 在**提交作业**页面上，完成以下操作。
   + 在**名称**字段中，输入要调用的作业运行名称。
   + 在**运行时角色**字段中，输入您在 [创建作业运行时角色](getting-started.md#gs-runtime-role) 中创建的角色名称。
   + 在**脚本位置**字段中，输入 `s3://amzn-s3-demo-bucket/scripts/wordcount.py` 作为 S3 URI。
   + 在**脚本参数**字段中，输入 `["s3://amzn-s3-demo-bucket/emr-serverless-spark/output"]`。
   + 在 **Spark 属性**部分，选择**以文本形式编辑**，然后输入以下配置。

     ```
     --conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1
     ```

1. 要开始作业运行，请选择**提交作业**。

1. 在**作业运行**选项卡中，您应该看到状态为**正在运行**的新作业运行。

------
#### [ Hive job run ]

在本教程的这一部分，我们将创建一个表，插入几条记录，然后运行计数聚合查询。要运行 Hive 作业，先创建一个包含所有要作为单个作业的一部分运行的 Hive 查询的文件，将该文件上传到 S3，然后在启动 Hive 作业时指定此 S3 路径。

**运行 Hive 作业**

1. 创建一个名为 `hive-query.ql` 的文件，其中包含您要在 Hive 作业中运行的所有查询。

   ```
   create database if not exists emrserverless;
   use emrserverless;
   create table if not exists test_table(id int);
   drop table if exists Values__Tmp__Table__1;
   insert into test_table values (1),(2),(2),(3),(3),(3);
   select id, count(id) from test_table group by id order by id desc;
   ```

1. 使用以下命令将 `hive-query.ql` 上传到 S3 存储桶。

   ```
   aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
   ```

1. 完成 [步骤 1：创建 EMR Serverless 应用程序](#gs-application-console) 后，您将进入 EMR Studio 中的**应用程序详情**页面。在此页面上，选择**提交作业**选项。

1. 在**提交作业**页面上，完成以下操作。
   + 在**名称**字段中，输入要调用的作业运行名称。
   + 在**运行时角色**字段中，输入您在 [创建作业运行时角色](getting-started.md#gs-runtime-role) 中创建的角色名称。
   + 在**脚本位置**字段中，输入 `s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql` 作为 S3 URI。
   + 在 **Hive 属性**部分，选择**以文本形式编辑**，然后输入以下配置。

     ```
     --hiveconf hive.log.explain.output=false
     ```
   + 在**作业属性**部分，选择**以文本形式编辑**，然后输入以下 JSON。

     ```
     {
        "applicationConfiguration": 
        [{
            "classification": "hive-site",
               "properties": {
                   "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch",
                   "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse",
                   "hive.driver.cores": "2",
                   "hive.driver.memory": "4g",
                   "hive.tez.container.size": "4096",
                   "hive.tez.cpu.vcores": "1"
                }
         }]
     }
     ```

1. 要开始运行作业，请选择**提交作业**。

1. 在**作业运行**选项卡中，您应该看到状态为**正在运行**的新作业运行。

------
#### [ Interactive workload ]

在 Amazon EMR 6.14.0 及更高版本中，您可以使用 EMR Studio 中托管的 Notebook 在 EMR Serverless 中运行 Spark 的交互式工作负载。有关权限和先决条件等更多信息，请参阅 [通过 EMR Studio 使用 EMR Serverless 运行交互式工作负载](interactive-workloads.md)。

创建应用程序并设置所需权限后，请按以下步骤使用 EMR Studio 运行交互式 Notebook：

1. 导航到 EMR Studio 中的** Workspace**。如果仍需要配置 Amazon S3 存储位置和 [EMR Studio 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html)，请选择屏幕顶部横幅中的**配置 Studio** 按钮。

1. 要访问 Notebook，请选择一个 Workspace 或创建一个新 Workspace。使用**快速启动**在新选项卡中打开 Workspace。

1. 转到新打开的选项卡。从左侧导航栏中选择**计算**图标。选择 EMR Serverless 作为**计算类型**。

1. 选择您在上一节中创建的交互式应用程序。

1. 在**运行时角色**字段中，输入 EMR Serverless 应用程序在运行作业时可代入的 IAM 角色名称。要了解有关运行时角色的更多信息，请参阅《Amazon EMR Serverless 用户指南》**中的[作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。

1. 选择**附加**。该过程可能需要一分钟。附加后，页面将会刷新。

1. 选择内核并启动 Notebook。您还可以浏览 EMR Serverless 上的示例 Notebook，将其复制到 Workspace。要访问示例 Notebook，请导航到左侧导航栏中的 **`{...}`** 菜单，然后浏览 Notebook文件名中包含 `serverless` 的 Notebook。

1. 在 Notebook 中，您可以访问驱动程序日志链接和指向 Apache Spark UI 链接，Apache Spark UI 是一个实时界面，提供了监控作业的指标。有关更多信息，请参阅《Amazon EMR Serverless 用户指南》**中的[监控 EMR Serverless 应用程序和作业](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/app-job-metrics.html)。

将应用程序附加到 Studio Workspace 时，如果应用程序尚未运行，则会自动触发启动。您也可以预先启动应用程序，在将其附加到 Workspace 之前准备就绪。

------

## 步骤 3：查看应用程序 UI 和日志
<a name="gs-output-console"></a>

要查看应用程序 UI，先确定作业运行情况。该作业运行的第一行选项中提供了 **Spark UI** 或 **Hive Tez UI** 选项（取决于作业类型）。选择相应的选项。

如果选择 Spark UI，请选择**执行程序**选项卡以查看驱动程序和执行程序日志。如果选择 Hive Tez UI，请选择**所有任务**选项卡以查看日志。

一旦作业运行状态显示为**成功**，就可以在 S3 存储桶中查看作业的输出。

## 步骤 4：清除
<a name="gs-cleanup-console"></a>

虽然您创建的应用程序应在 15 分钟不活动后自动停止，但我们仍然建议您释放不打算再次使用的资源。

要删除应用程序，请导航到**列出应用程序**页面。选择您创建的应用程序，然后选择**操作→停止**以停止应用程序。应用程序处于 `STOPPED` 状态后，选择同一应用程序，然后选择**操作→删除**。

有关运行 Spark 和 Hive 作业的更多示例，请参阅 [运行 EMR Serverless 作业时使用 Spark 配置](jobs-spark.md) 和 [运行 EMR Serverless 作业时使用 Hive 配置](jobs-hive.md)。

# 从这里开始 AWS CLI
<a name="gs-cli"></a>

使用创建应用程序、运行作业、检查作业运行输出和删除资源的命令开始 AWS CLI 使用 EMR Serverless。

## 步骤 1：创建 EMR Serverless 应用程序
<a name="gs-application-cli"></a>

使用 [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html) 命令创建您的第一个 EMR Serverless 应用程序。您需要指定应用程序类型，以及与要使用的应用程序版本关联的 Amazon EMR 发行版标签。应用程序的名称为可选。

------
#### [ Spark ]

要创建 Spark 应用程序，请运行以下命令。

```
aws emr-serverless create-application \
    --release-label emr-6.6.0 \
    --type "SPARK" \
    --name my-application
```

------
#### [ Hive ]

要创建 Hive 应用程序，请运行以下命令。

```
aws emr-serverless create-application \
    --release-label emr-6.6.0 \
    --type "HIVE" \
    --name my-application
```

------

记下输出中返回的应用程序 ID。您将在启动应用程序和提交作业时使用该 ID，后面称为 `application-id`。

在继续学习 `CREATED` 之前，请确保您的应用程序已使用 [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetApplication.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetApplication.html) API 达到 [步骤 2：将作业运行提交到 EMR Serverless 应用程序](#gs-job-run-cli) 状态。

```
aws emr-serverless get-application \
    --application-id application-id
```

EMR Serverless 会创建工作线程来容纳您请求的作业。默认情况下，这些是按需创建的，但您也可以在创建应用程序时通过设置 `initialCapacity` 参数来指定预初始化容量。您还可以使用 `maximumCapacity` 参数来限制应用程序可以使用的最大总容量。要了解有关这些选项的更多信息，请参阅 [使用 EMR Serverless 时配置应用程序](application-capacity.md)。

## 步骤 2：将作业运行提交到 EMR Serverless 应用程序
<a name="gs-job-run-cli"></a>

现在，您的 EMR Serverless 应用程序已准备好运行作业。

------
#### [ Spark ]

在此步骤中，我们使用 PySpark 脚本来计算多个文本文件中唯一单词的出现次数。公有的只读 S3 存储桶可同时存储脚本和数据集。应用程序将 Spark 运行时中的输出文件和日志数据发送到您创建的 S3 存储桶中的 `/output` 和 `/logs` 目录。

**运行 Spark 作业**

1. 使用以下命令将我们要运行的示例脚本复制到您的新存储桶。

   ```
   aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
   ```

1. 在以下命令中，将 `application-id` 替换为您的应用程序 ID。将 `job-role-arn` 替换为您在 [创建作业运行时角色](getting-started.md#gs-runtime-role) 中创建的运行时角色 ARN。将 *`job-run-name`* 替换为您要调用的作业运行名称。将所有 `amzn-s3-demo-bucket` 字符串替换为您创建的 Amazon S3 存储桶，然后将 `/output` 添加到路径中。这将在您的存储桶中创建一个新文件夹，EMR Serverless 可以在其中复制应用程序的输出文件。

   ```
   aws emr-serverless start-job-run \
       --application-id application-id \
       --execution-role-arn job-role-arn \
       --name job-run-name \
       --job-driver '{
           "sparkSubmit": {
             "entryPoint": "s3://amzn-s3-demo-bucket/scripts/wordcount.py",
             "entryPointArguments": ["s3://amzn-s3-demo-bucket/emr-serverless-spark/output"],
             "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
           }
       }'
   ```

1. 记下输出中返回的作业运行 ID。在以下步骤中将 `job-run-id` 替换为此 ID。

------
#### [ Hive ]

在本教程中，我们将创建一个表，插入几条记录，然后运行计数聚合查询。要运行 Hive 作业，先创建一个包含所有要作为单个作业的一部分运行的 Hive 查询的文件，将该文件上传到 S3，然后在启动 Hive 作业时指定此 S3 路径。

**运行 Hive 作业**

1. 创建一个名为 `hive-query.ql` 的文件，其中包含您要在 Hive 作业中运行的所有查询。

   ```
   create database if not exists emrserverless;
   use emrserverless;
   create table if not exists test_table(id int);
   drop table if exists Values__Tmp__Table__1;
   insert into test_table values (1),(2),(2),(3),(3),(3);
   select id, count(id) from test_table group by id order by id desc;
   ```

1. 使用以下命令将 `hive-query.ql` 上传到 S3 存储桶。

   ```
   aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
   ```

1. 在以下命令中，将 `application-id` 替换为您自己的应用程序 ID。将 `job-role-arn` 替换为您在 [创建作业运行时角色](getting-started.md#gs-runtime-role) 中创建的运行时角色 ARN。将所有 `amzn-s3-demo-bucket` 字符串替换为您创建的 Amazon S3 存储桶，然后将 `/output` 和 `/logs` 添加到路径中。这将在您的存储桶中创建的新文件夹，EMR Serverless 可以在其中复制应用程序的输出和日志文件。

   ```
   aws emr-serverless start-job-run \
       --application-id application-id \
       --execution-role-arn job-role-arn \
       --job-driver '{
           "hive": {
             "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql",
             "parameters": "--hiveconf hive.log.explain.output=false"
           }
       }' \
       --configuration-overrides '{
         "applicationConfiguration": [{
           "classification": "hive-site",
             "properties": {
               "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch",
               "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse",
               "hive.driver.cores": "2",
               "hive.driver.memory": "4g",
               "hive.tez.container.size": "4096",
               "hive.tez.cpu.vcores": "1"
               }
           }],
           "monitoringConfiguration": {
             "s3MonitoringConfiguration": {
               "logUri": "s3://amzn-s3-demo-bucket/emr-serverless-hive/logs"
              }
           }
       }'
   ```

1. 记下输出中返回的作业运行 ID。在以下步骤中将 `job-run-id` 替换为此 ID。

------

## 步骤 3：查看作业运行的输出
<a name="gs-output-cli"></a>

作业运行通常需要 3-5 分钟才能完成。

------
#### [ Spark ]

您可以使用以下命令检查 Spark 作业的状态。

```
aws emr-serverless get-job-run \
    --application-id application-id \
    --job-run-id job-run-id
```

将日志目标设置为 `s3://amzn-s3-demo-bucket/emr-serverless-spark/logs`，可在 `s3://amzn-s3-demo-bucket/emr-serverless-spark/logs/applications/application-id/jobs/job-run-id` 下方找到特定作业的日志。

对于 Spark 应用程序，EMR Serverless 每 30 秒将事件日志推送到 S3 日志目标中的 `sparklogs` 文件夹。作业完成后，驱动程序和执行程序的 Spark 运行时日志会上传到按工作线程类型适当命名的文件夹，例如 `driver` 或 `executor`。 PySpark 作业的输出将上传到。`s3://amzn-s3-demo-bucket/output/`

------
#### [ Hive ]

您可以使用以下命令检查 Hive 作业的状态。

```
aws emr-serverless get-job-run \
    --application-id application-id \
    --job-run-id job-run-id
```

将日志目标设置为 `s3://amzn-s3-demo-bucket/emr-serverless-hive/logs`，可在 `s3://amzn-s3-demo-bucket/emr-serverless-hive/logs/applications/application-id/jobs/job-run-id` 下方找到特定作业的日志。

对于 Hive 应用程序，EMR Serverless 会持续将 Hive 驱动程序上传到 S3 日志目标的 `HIVE_DRIVER` 文件夹，并将 Tez 任务日志上传到 `TEZ_TASK` 文件夹。作业运行达到 `SUCCEEDED` 状态后，Hive 查询的输出将出现在您在 `configurationOverrides` 的 `monitoringConfiguration` 字段中指定的 Amazon S3 位置。

------

## 步骤 4：清除
<a name="gs-cleanup-cli"></a>

本教程学习结束后，请考虑删除创建的资源。建议您释放不打算再次使用的资源。

### 删除应用程序
<a name="delete-application-cli"></a>

要删除应用程序，请使用以下命令。

```
aws emr-serverless delete-application \
    --application-id application-id
```

### 删除 S3 日志存储桶
<a name="delete-s3-bucket-cli"></a>

要删除 S3 日志记录和输出存储桶，请使用以下命令。将 `amzn-s3-demo-bucket` 替换为您在 [准备 EMR Serverless 存储](getting-started.md#gs-prepare-storage) 中创建的 S3 存储桶的实际名称。

```
aws s3 rm s3://amzn-s3-demo-bucket --recursive
aws s3api delete-bucket --bucket amzn-s3-demo-bucket
```

### 删除作业运行时角色
<a name="delete-runtime-role-cli"></a>

要删除运行时角色，请将策略与角色分离。然后，就可以删除角色和策略。

```
aws iam detach-role-policy \
    --role-name EMRServerlessS3RuntimeRole \
    --policy-arn policy-arn
```

要删除角色，请使用以下命令。

```
aws iam delete-role \
    --role-name EMRServerlessS3RuntimeRole
```

要删除附加到角色的策略，请使用以下命令。

```
aws iam delete-policy \
    --policy-arn policy-arn
```

有关运行 Spark 和 Hive 作业的更多示例，请参阅 [运行 EMR Serverless 作业时使用 Spark 配置](jobs-spark.md) 和 [运行 EMR Serverless 作业时使用 Hive 配置](jobs-hive.md)。