

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

# 教學課程：Amazon EMR 入門
<a name="emr-gs"></a>

逐步完成工作流程，以快速設定 Amazon EMR 叢集並執行 Spark 應用程式。

## 設定 Amazon EMR 叢集
<a name="emr-getting-started-overview"></a>

使用 Amazon EMR，您可以在幾分鐘內設定叢集，透過大數據框架來處理和分析資料。本教學課程說明如何使用 Spark 啟動範例叢集，以及如何執行儲存在 Amazon S3 儲存貯體中的簡單 PySpark 指令碼。它涵蓋三個主要工作流程類別的基本 Amazon EMR 任務：規劃和設定、管理以及清理。

循序完成教學課程時可尋找更詳細主題的連結，以及 [後續步驟](#emr-gs-next-steps) 章節中其他步驟的想法。如果您有任何問題或陷入困境，請聯絡[討論論壇](https://forums.aws.amazon.com/forum.jspa?forumID=52)上的 Amazon EMR 團隊。

![\[Amazon EMR 的工作流程圖概述了三個主要工作流程類別：「規劃和設定」、「管理」和「清理」。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/emr-workflow.png)


**先決條件**
+ 在啟動 Amazon EMR 叢集之前，請務必完成 [在您設定 Amazon EMR 之前](emr-setting-up.md) 中的任務。

**Cost**
+ 您所建立的範例叢集，會在實際環境中執行。叢集會產生最低費用。若要避免其他費用，請務必完成本教學課程最後一個步驟中的清理任務。根據 Amazon EMR 定價，按每秒計算費用。費用亦因區域而異。如需詳細資訊，請參閱 [Amazon EMR 定價](https://aws.amazon.com/emr/pricing)。
+ 儲存於 Amazon S3 的小型檔案可能會產生最低費用。如果您在 AWS 免費方案的使用限制內，可能會免除 Amazon S3 的部分或所有費用。如需詳細資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing)和 [AWS 免費方案](https://aws.amazon.com/free/)。

## 步驟 1：設定資料資源並啟動 Amazon EMR 叢集
<a name="emr-getting-started-plan-and-configure"></a>

### 為 Amazon EMR 準備儲存體
<a name="emr-getting-started-prepare-storage"></a>

使用 Amazon EMR 時，可以從各種檔案系統中進行選擇，以儲存輸入資料、輸出資料和日誌檔案。在此教學課程中，可以使用 EMRFS 將資料儲存在 S3 儲存貯體中。EMRFS 是 Hadoop 檔案系統的實作，可讓您在 Amazon S3 讀取和寫入一般檔案。如需詳細資訊，請參閱[使用 Amazon EMR 處理儲存和檔案系統](emr-plan-file-systems.md)。

若要為此教學課程建立儲存貯體，請遵循《Amazon Simple Storage Service 使用者指南》**中[如何建立 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)中的說明。在您計劃啟動 Amazon EMR 叢集的相同 AWS 區域中建立儲存貯體。例如，美國西部 (奧勒岡) us-west-2。

您搭配 Amazon EMR 使用的儲存貯體和資料夾具有下列限制：
+ 名稱可以包含小寫字母、數字、句點 (.) 與連字號 (-)。
+ 名稱不能以數字結尾。
+ 儲存貯體名稱*在所有 AWS 帳戶中*必須唯一。
+ 輸出資料夾必須為空。

### 為 Amazon EMR 準備具有輸入資料的應用程式
<a name="emr-getting-started-prepare-app"></a>

為 Amazon EMR 準備應用程式的最常見方法是將應用程式及其輸入資料上傳至 Amazon S3。然後，當您將工作提交到叢集時，可以為指令碼和資料指定 Amazon S3 位置。

在此步驟中，可以將範例 PySpark 指令碼上傳到 Amazon S3 儲存貯體。我們已經提供 PySpark 指令碼供您使用。指令碼會處理食品機構檢查資料，並在 S3 儲存貯體中傳回結果檔案。結果檔案會列出「紅色」違規行為最多的十大機構。

也可以將範例輸入資料上傳到 Amazon S3，以便 PySpark 指令碼進行處理。輸入資料是 2006 年至 2020 年華盛頓州金縣衛生部門檢查結果的修改版本。如需詳細資訊，請參閱[金縣公開資料：食品機構檢查資料](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.aws.amazon.com/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.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket)。

如需有關為 EMR 設定資料的詳細資訊，請參閱 [準備輸入資料以使用 Amazon EMR 進行處理](emr-plan-input.md)。

### 啟動 Amazon EMR 叢集
<a name="emr-getting-started-launch-sample-cluster"></a>

準備儲存位置和應用程式後，您可以啟動範例 Amazon EMR 叢集。在此步驟中，可使用最新的 [Amazon EMR 發行版本](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)來啟動 Apache Spark 叢集。

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

**使用與主控台一起安裝的 Spark 啟動叢集**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下方，選擇**叢集**，然後選擇**建立叢集**。

1. 在**建立叢集**頁面中，記下**發行版本**、**執行個體類型**、**執行個體數目**和**許可**的預設值。這些欄位會自動填入適用於一般用途叢集的值。

1. 在**叢集名稱**欄位中，輸入唯一的叢集名稱以協助您識別叢集，例如*我的第一個叢集*。您的叢集名稱不能包含字元 <、＞、\$1、\$1 或 ` (backtick)。

1. 在**應用程式**下，選擇 **Spark** 選項以在叢集上安裝 Spark。
**注意**  
在啟動叢集之前，請在 Amazon EMR 叢集上選擇所需的應用程式。啟動後，無法在叢集中新增或移除應用程式。

1. 在**叢集日誌**下，選取「將叢集特定日誌發布至 Amazon S3」核取方塊。將 **Amazon S3 位置**值取代為您建立的 Amazon S3 儲存貯體，後面加上 **/logs**。例如 **s3://amzn-s3-demo-bucket/logs**。新增 **/logs** 可在儲存貯體中建立名為 'logs' 的新資料夾，Amazon EMR 可以在其中複製叢集的日誌檔案。

1. 在**安全組態和許可**下，選擇您的 **EC2 金鑰對**。在相同的區段中，選取 **Amazon EMR 的服務角色**下拉式功能表，然後選擇 **EMR\$1DefaultRole**。然後，選取**執行個體設定檔的 IAM 角色**下拉式功能表，然後選擇 **EMR\$1EC2\$1DefaultRole**。

1. 選擇**建立叢集**以啟動叢集並開啟叢集詳細資訊頁面。

1. 尋找叢集名稱旁邊的叢集**狀態**。Amazon EMR 佈建叢集時，狀態會從**開始**變更為**執行中**或**等待中**。您可能會需要選擇右側的重新整理圖示，或是重新整理您的瀏覽器，以查看狀態更新。

當叢集已啟動、正在執行以及準備好接受工作時，叢集狀態變更為**等待中**。如需關於閱讀叢集摘要的詳細資訊，請參閱[檢視 Amazon EMR 叢集狀態和詳細資訊](emr-manage-view-clusters.md)。如需有關叢集狀態的資訊，請參閱 [了解叢集生命週期](emr-overview.md#emr-overview-cluster-lifecycle)。

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

**使用與 一起安裝的 Spark 啟動叢集 AWS CLI**

1. 建立 IAM 預設角色，然後使用它們透過下列命令來建立叢集。

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

   如需有關 `create-default-roles` 的詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/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` 的詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/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 叢集
<a name="emr-getting-started-manage"></a>

### 提交工作並檢視結果
<a name="emr-getting-started-submit-spark-step"></a>

啟動叢集之後，可以將工作提交至正在執行的叢集，以處理和分析資料。作為一個*步驟*，將工作提交至 Amazon EMR 叢集。步驟是由一個或多個動作組成的工作單元。例如，您可以提交一個步驟來計算值，或者傳輸和處理資料。您可以在建立叢集時提交步驟，或者提交至正在執行的叢集。在本教學課程的此部分中，會作為一個步驟將 `health_violations.py` 提交至正在執行的叢集。若要進一步了解步驟，請參閱 [將工作提交至 Amazon EMR 叢集](emr-work-with-steps.md)。

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

**使用主控台提交 Spark 應用程式作為步驟**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格的 **EMR on EC2** 下，選擇**叢集**，然後選取您要在其中提交工作的叢集。叢集狀態必須為**等待中**。

1. 選擇**步驟**索引標簽，然後選擇**新增步驟**。

1. 根據下列的準則來設定步驟：
   + 針對**類型**，選擇 **Spark 應用程式**。應能看到**部署模式**、**應用程式位置**和 **Spark-submit 選項**的其他欄位。
   + 針對**名稱**，輸入新名稱。如果叢集中有許多步驟，命名每個步驟可幫助您追蹤它們。
   + 針對**部署模式**，請保留預設值**叢集模式**。如需有關 Spark 部署模式的詳細資訊，請參閱 Apache Spark 文件中的[叢集模式概觀](https://spark.apache.org/docs/latest/cluster-overview.html)。
   + 對於**應用程式位置**，在 Amazon S3 中輸入`health_violations.py`指令碼的位置，例如 *s3：//amzn-s3-demo-bucket/health\$1violations.py*。
   + 將 **Spark-submit 選項**欄位保留為空白。如需有關 `spark-submit` 選項的詳細資訊，請參閱[透過 spark-submit 啟動應用程式](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit)。
   + 在**引數**欄位中，輸入下列引數和值：

     ```
     --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*。
   + 針對**步驟失敗時執行的動作**，接受預設選項**繼續**。如此一來，如果步驟失敗，叢集便會繼續執行。

1. 選擇**新增**以提交步驟。該步驟會出現在主控台中，狀態為**待定**。

1. 監控步驟狀態。它應該從**待定**變更為**執行中**，最後變更為**已完成**。若要在主控台中重新整理狀態，請選擇**篩選條件**右側的重新整理圖示。該指令碼大約需要一分鐘來執行。狀態變更為**已完成**時，表示步驟已成功完成。

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

**使用 提交 Spark 應用程式作為步驟 AWS 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 提交步驟的詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/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)。

### 檢視結果
<a name="emr-getting-started-view-results"></a>

步驟成功執行後，可以在 Amazon S3 輸出資料夾中檢視其輸出結果。

**若要檢視 `health_violations.py` 的結果**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**儲存貯體名稱**，然後選擇在提交步驟時指定的輸出資料夾。例如，*amzn-s3-demo-bucket*，然後是 *myOutputFolder*。

1. 確認輸出資料夾中顯示下列項目：
   + 稱為 `_SUCCESS` 的小型物件。
   + 以字首 `part-` 開頭的 CSV 檔案，它包含結果。

1. 選擇包含結果的物件，然後選擇**下載**，將結果儲存至本機檔案系統。

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 叢集
<a name="emr-getting-started-connect-to-cluster"></a>

使用 Amazon EMR 時，您可能想要連接到執行中的叢集以讀取日誌檔案、對叢集進行偵錯或者使用諸如 Spark Shell 等 CLI 工具。Amazon EMR 可讓您使用 Secure Shell (SSH) 通訊協定連接到叢集。本章節說明如何設定 SSH、連接至叢集以及檢視 Spark 的日誌檔案。如需有關連接至叢集的詳細資訊，請參閱 [對 Amazon EMR 叢集節點進行驗證](emr-authenticate-cluster-connections.md)。

#### 授權叢集的 SSH 連線
<a name="emr-getting-started-restrict-ssh"></a>

在連接到叢集之前，需要修改叢集安全群組以授權傳入 SSH 連線。Amazon EC2 安全群組就像是虛擬防火牆，可控管傳入和傳出叢集的流量。當您為本教學課程建立叢集時，Amazon EMR 會代表您建立下列安全群組：

**ElasticMapReduce-master**  
與主節點關聯的預設 Amazon EMR 受管安全群組。在 Amazon EMR 叢集中，主節點是管理叢集的 Amazon EC2 執行個體。

**ElasticMapReduce-slave**  
與核心節點和任務節點相關聯的預設安全群組。

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

**使用主控台允許主要安全群組受信任來源的 SSH 存取**

若要編輯安全群組，您必須擁有許可，才能管理叢集所在 VPC 的安全群組。如需詳細資訊，請參閱《IAM 使用者指南》**中的[變更使用者許可](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html)和允許管理 EC2 安全群組的[範例政策](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_examples_ec2_securitygroups-vpc.html)。

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格的 **EMR on EC2** 下，選擇**叢集**，然後選擇您要更新的叢集。這會開啟叢集詳細資訊頁面。應該預先選取此頁面上的**屬性**索引標籤。

1. 在**屬性**索引標簽中的**聯網**下，選取 **EC2 安全群組 (防火牆)** 旁邊的箭頭以展開此區段。在**主節點**下，選取安全群組連結。完成以下步驟後，可以選擇返回此步驟，選擇**核心節點和任務節點**，然後重複下列步驟以允許 SSH 用戶端存取核心節點和任務節點。

1. 這會開啟 EC2 主控台。選擇**傳入規則**索引標籤，然後選擇**編輯傳入規則**。

1. 使用下列設定，檢查允許公有存取的傳入規則。如果存在，請選擇**刪除**將其移除。
   + **類型**

     SSH
   + **連接埠**

     22
   + **來源**

     自訂 0.0.0.0/0
**警告**  
在 2020 年 12 月之前，ElasticMapReduce-master 安全群組已預先設定規則，允許來自所有來源的連接埠 22 上的傳入流量。建立此規則的目的是簡化主節點的初始 SSH 連接。強烈建議您移除此傳入規則，並限制信任來源的流量。

1. 捲動至規則列表底部並選擇**新增規則**。

1. 針對 **Type (類型)**，選擇 **SSH (SSH)**。選取 SSH 會自動為**協定**輸入 **TCP**，並為**連接埠範圍**輸入 **22**。

1. 對於來源，請選取**我的 IP**，自動將您的 IP 地址新增為來源位址。也可新增一系列**自訂**受信任用戶端 IP 地址，或為其他用戶端建立額外的規則。許多網路環境會動態分配 IP 地址，因此您將來可能需要更新受信任用戶端的 IP 地址。

1. 選擇**儲存**。

1. 也可從清單中選擇**核心節點和任務節點**，並重複上述步驟，以允許 SSH 用戶端存取核心節點和任務節點。

------

#### 使用 連線至您的叢集 AWS CLI
<a name="emr-getting-started-connect-ssh"></a>

無論作業系統為何，都可以使用 AWS CLI來建立叢集的 SSH 連線。

**使用 連接到您的叢集並檢視日誌檔案 AWS CLI**

1. 使用以下命令開啟叢集的 SSH 連線。將 *<mykeypair.key>* 取代為金鑰對檔案的完整路徑和檔案名稱。例如 `C:\Users\<username>\.ssh\mykeypair.pem`。

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

1. 瀏覽至 `/mnt/var/log/spark` 以存取叢集主節點上的 Spark 日誌。然後檢視該位置中的檔案。如需主節點上其他日誌檔案的清單，請參閱 [檢視主節點上的日誌檔案](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 來管理您的 Amazon EMR 叢集
<a name="emr-getting-started-connect-to-cluster-sagemaker"></a>

 Amazon EMR on EC2 也是 Amazon SageMaker AI Unified Studio 支援的運算類型。如需如何在 Amazon SageMaker AI Unified Studio 中使用和管理 EC[EC2，請參閱管理 EC](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/managing-emr-on-ec2.html)EC2 上的 Amazon EMR。

## 步驟 3：清理 Amazon EMR 資源
<a name="emr-getting-started-clean-up"></a>

### 終止叢集
<a name="emr-getting-started-stop-cluster"></a>

既然已將工作提交至叢集，並已檢視 PySpark 應用程式的結果，就可以終止叢集。終止叢集會停止叢集的所有相關聯 Amazon EMR 費用和 Amazon EC2 執行個體。

當您終止叢集時，Amazon EMR 會免費將有關叢集的中繼資料保留兩個月。封存的中繼資料可協助您為新作業[複製叢集](clone-console.md)，或重新檢視叢集組態以供參考。中繼資料*不*包含叢集寫入到 S3 的資料，或儲存在叢集 HDFS 中的資料。

**注意**  
終止叢集後，Amazon EMR 主控台不允許您從清單檢視中刪除叢集。當 Amazon EMR 清除其中繼資料時，終止的叢集會從主控台中消失。

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

**使用主控台終止叢集**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr)：// 開啟 Amazon EMR 主控台。

1. 選擇**叢集**，然後選擇您想要終止的叢集。

1. 在**動作**下拉式功能表中，選擇**終止叢集**。

1. 在對話方塊中，選擇**終止**。視叢集組態而定，終止可能需要 5 到 10 分鐘。如需有關如何終止 Amazon EMR 叢集的詳細資訊，請參閱 [在啟動、執行或等待狀態下終止 Amazon EMR 叢集](UsingEMR_TerminateJobFlow.md)。

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

**使用 終止叢集 AWS 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 資源
<a name="emr-getting-started-delete-bucket"></a>

為避免額外費用，應刪除 Amazon S3 儲存貯體。刪除儲存貯體會移除本教學課程的所有 Amazon S3 資源。您的儲存貯體應包含：
+ PySpark 指令碼
+ 輸入資料集
+ 輸出結果資料夾
+ 日誌檔案資料夾

如果將 PySpark 指令碼或輸出儲存在不同位置，則可能需要採取額外的步驟來刪除已儲存的檔案。

**注意**  
在刪除儲存貯體之前，必須終止叢集。否則，可能不允許您清空儲存貯體。

若要刪除儲存貯體，請依照《Amazon Simple Storage Service 使用者指南》**中[如何刪除 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)提供的說明進行操作。

## 後續步驟
<a name="emr-gs-next-steps"></a>

您現在已從頭到尾啟動了您的第一個 Amazon EMR 叢集。您也已完成必要的 EMR 任務，例如準備和提交大數據應用程式、檢視結果以及終止叢集。

使用以下主題，進一步了解如何自訂 Amazon EMR 工作流程。

### 探索適用於 Amazon EMR 的大數據應用程式
<a name="emr-gs-next-explore-apps"></a>

在 [Amazon EMR 版本指南](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)中探索並比較可在叢集上安裝的大數據應用程式。《版本指南》詳細說明了每個 EMR 發行版本，並包含在 Amazon EMR 上使用 Spark 和 Hadoop 等框架的提示。

### 規劃叢集硬體、聯網和安全性
<a name="emr-gs-next-plan-clusters"></a>

在本教學課程中，您建立了一個簡單的 EMR 叢集，而沒有設定進階選項。進階選項可讓您指定 Amazon EC2 執行個體類型、叢集聯網和叢集安全性。如需有關規劃和啟動符合您要求的叢集的詳細資訊，請參閱 [規劃、設定和啟動 Amazon EMR 叢集](emr-plan.md) 和 [Amazon EMR 中的安全](emr-security.md)。

### 管理叢集
<a name="emr-gs-next-manage-clusters"></a>

深入了解如何在 [管理 Amazon EMR 叢集](emr-manage.md) 中使用正在執行的叢集。若要管理叢集，可以連線至叢集，對步驟進行偵錯，以及追蹤叢集活動和運作狀態。也可以使用 [EMR 受管擴展](emr-managed-scaling.md)來調整叢集資源，以回應工作負載需求。

### 使用不同的介面
<a name="emr-gs-next-interfaces"></a>

除了 Amazon EMR 主控台之外，您還可以使用 AWS Command Line Interface、Web 服務 API 或許多支援的 AWS SDKs 之一來管理 Amazon EMR。如需詳細資訊，請參閱[管理介面](emr-overview-benefits.md#emr-what-tools)。

也可以透過多種方式與 Amazon EMR 叢集上安裝的應用程式互動。一些應用程式，例如 Apache Hadoop，會發布您可檢視的 Web 介面。如需詳細資訊，請參閱[檢視 Amazon EMR 叢集上託管的 Web 介面](emr-web-interfaces.md)。

### 瀏覽 EMR 技術部落格
<a name="emr-gs-next-browse-blogs"></a>

如需 Amazon EMR 新功能的範例逐步解說和深入的技術討論，請參閱 [AWS 大數據部落格](https://aws.amazon.com/blogs/big-data/tag/amazon-emr/)。