

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 儲存貯體來存放使用 EMR Serverless 應用程式執行之範例 Spark 或 Hive 工作負載的輸出檔案和日誌。若要建立儲存貯體，請遵循《*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 中託管的筆記本執行互動式查詢，則需要指定 S3 儲存貯體和[最低服務角色，EMR Serverless ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html#emr-studio-service-role-serverless)才能建立工作區。如需設定步驟，請參閱《*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. 導覽至位於 的 IAM 主控台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/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 Serverless 應用程式的任務 AWS 服務 代表您存取其他 。

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

****  

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

------

1. 選擇**下一步**以導覽至**新增許可**頁面，然後選擇 **EMRServerlessS3AndGlueAccessPolicy**。

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 中建立的政策檔案來建立名為 的 IAM **`EMRServerlessS3AndGlueAccessPolicy`政策。請記下輸出中的 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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中，選擇 **EMR Serverless** 以導覽至 EMR Serverless 登陸頁面。

1. 若要建立或管理 EMR Serverless 應用程式，您需要 EMR Studio UI。
   + 如果您在 AWS 區域 要建立應用程式的 中已有 EMR Studio，請選取**管理應用程式**以導覽至您的 EMR Studio，或選取您要使用的 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**，然後輸入下列 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 中託管的筆記本來執行 EMR Serverless 中 Spark 的互動式工作負載。如需包含許可和先決條件的詳細資訊，請參閱 [透過 EMR Studio 使用 EMR Serverless 執行互動式工作負載](interactive-workloads.md)。

建立應用程式並設定必要的許可後，請使用下列步驟透過 EMR Studio 執行互動式筆記本：

1. 導覽至 EMR Studio **中的工作區**索引標籤。如果您仍然需要設定 Amazon S3 儲存位置和 [EMR Studio 服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-service-role.html)，請選取畫面頂端橫幅中的**設定 Studio** 按鈕。

1. 若要存取筆記本，請選取工作區或建立新的工作區。使用**快速啟動**在新索引標籤中開啟工作區。

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. 選擇核心並啟動筆記本。您也可以在 EMR Serverless 上瀏覽範例筆記本，並將其複製到工作區。若要存取範例筆記本，請導覽至左側導覽中的**`{...}`**選單，然後瀏覽筆記本檔案名稱`serverless`中具有 的筆記本。

1. 在筆記本中，您可以存取驅動程式日誌連結和 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 工作區時，如果應用程式尚未執行，應用程式會自動啟動觸發。您也可以在將應用程式連接到工作區之前，預先啟動應用程式並保持就緒狀態。

------

## 步驟 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`。

繼續進行 之前[步驟 2：將任務執行提交到您的 EMR Serverless 應用程式](#gs-job-run-cli)，請確定您的應用程式已使用 [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 達到 `CREATED` 狀態。

```
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` 使用您在 中建立的執行時間角色 ARN 來取代 [建立任務執行時間角色](getting-started.md#gs-runtime-role)。*`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` 使用您在 中建立的執行時間角色 ARN 來取代 [建立任務執行時間角色](getting-started.md#gs-runtime-role)。將所有`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 查詢的輸出會在您在 `monitoringConfiguration`欄位中指定的 Amazon S3 位置可用`configurationOverrides`。

------

## 步驟 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` 將 取代為在 中建立之 S3 儲存貯體的實際名稱[準備 EMR Serverless 的儲存體](getting-started.md#gs-prepare-storage)。

```
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)。