

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

# 從 入門 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)。