本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:Amazon 入門 EMR
逐步解說工作流程,以快速設定 Amazon EMR叢集並執行 Spark 應用程式。
設定 Amazon EMR叢集
透過 AmazonEMR,您可以設定叢集,在幾分鐘內使用大數據架構處理和分析資料。本教學課程說明如何使用 Spark 啟動範例叢集,以及如何執行存放在 Amazon S3 儲存貯體中的簡單 PySpark 指令碼。它涵蓋三個主要工作流程類別中的基本 Amazon EMR任務:規劃和設定、管理和清除。
循序完成教學課程時可尋找更詳細主題的連結,以及 後續步驟 章節中其他步驟的想法。如果您有任何問題或卡住,請聯絡我們的討論論壇
必要條件
-
啟動 Amazon EMR叢集之前,請務必完成 中的任務在您設置 Amazon 之前 EMR。
成本
-
您所建立的範例叢集,會在實際環境中執行。叢集會產生最低費用。若要避免其他費用,請務必完成本教學課程最後一個步驟中的清理任務。費用會根據 Amazon EMR定價以每秒費率產生。費用亦因區域而異。如需詳細資訊,請參閱 Amazon EMR定價
。 -
儲存於 Amazon S3 的小型檔案可能會產生最低費用。如果您在 AWS 免費方案的使用限制內,可能會免除 Amazon S3 的部分或全部費用。如需詳細資訊,請參閱 Amazon S3 定價
和 AWS 免費方案 。
步驟 1:設定資料資源並啟動 Amazon EMR叢集
準備 Amazon 的儲存體 EMR
當您使用 Amazon 時EMR,您可以從各種檔案系統中選擇,以存放輸入資料、輸出資料和日誌檔案。在本教學課程中,您會使用 EMRFS 將資料存放在 S3 儲存貯體中。 EMRFS 是 Hadoop 檔案系統的實作,可讓您讀取和寫入一般檔案至 Amazon S3。如需詳細資訊,請參閱使用 Amazon EMR 的儲存和檔案系統。
若要為此教學課程建立儲存貯體,請遵循《Amazon Simple Storage Service 使用者指南》中如何建立 S3 儲存貯體?中的說明。在您計劃啟動 Amazon EMR叢集的相同 AWS 區域中建立儲存貯體。例如,美國西部 (奧勒岡) us-west-2。
您與 Amazon 搭配使用的儲存貯體和資料夾EMR有下列限制:
-
名稱可以包含小寫字母、數字、句點 (.) 與連字號 (-)。
-
名稱不能以數字結尾。
-
儲存貯體名稱在所有 AWS 帳戶中必須唯一。
-
輸出資料夾必須為空。
使用 Amazon 的輸入資料準備應用程式 EMR
為 Amazon 準備應用程式的最常見方法是將應用程式及其輸入資料EMR上傳至 Amazon S3。然後,當您將工作提交到叢集時,可以為指令碼和資料指定 Amazon S3 位置。
在此步驟中,您會將範例 PySpark 指令碼上傳至 Amazon S3 儲存貯體。我們已提供 PySpark 指令碼供您使用。指令碼會處理食品機構檢查資料,並在 S3 儲存貯體中傳回結果檔案。結果檔案會列出「紅色」違規行為最多的十大機構。
您也可以將範例輸入資料上傳到 Amazon S3,以便 PySpark 指令碼處理。輸入資料是 2006 年至 2020 年華盛頓州金縣衛生部門檢查結果的修改版本。如需詳細資訊,請參閱金縣公開資料:食品機構檢查資料
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
準備 的範例 PySpark 指令碼 EMR
-
將以下範例程式碼複製到您所選編輯器的新檔案中。
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)
-
儲存檔案為
health_violations.py
。 -
將
health_violations.py
上傳到您為本教學課程建立的 Amazon S3 儲存貯體。如需指示說明,請參閱《Amazon Simple Storage Service 入門指南》中的將物件上傳至儲存貯體。
準備 的範例輸入資料 EMR
-
下載 zip 檔案,food_establishment_data.zip。
-
解壓縮並在您的機器中將
food_establishment_data.zip
儲存為food_establishment_data.csv
。 -
將CSV檔案上傳至您為本教學課程建立的 S3 儲存貯體。如需指示說明,請參閱《Amazon Simple Storage Service 入門指南》中的將物件上傳至儲存貯體。
如需設定 資料的詳細資訊EMR,請參閱 準備輸入資料以使用 Amazon EMR 處理。
啟動 Amazon EMR叢集
準備儲存位置和應用程式之後,您可以啟動範例 Amazon EMR叢集。在此步驟中,您會使用最新的 Amazon EMR發行版本來啟動 Apache Spark 叢集。
步驟 2:將工作提交到您的 Amazon EMR叢集
提交工作並檢視結果
啟動叢集之後,可以將工作提交至正在執行的叢集,以處理和分析資料。您可以將工作提交至 Amazon EMR叢集做為步驟。步驟是由一個或多個動作組成的工作單元。例如,您可以提交一個步驟來計算值,或者傳輸和處理資料。您可以在建立叢集時提交步驟,或者提交至正在執行的叢集。在本教學課程的此部分中,會作為一個步驟將 health_violations.py
提交至正在執行的叢集。若要進一步了解步驟,請參閱 將工作提交至 Amazon EMR 叢集。
如需有關步驟生命週期的詳細資訊,請參閱 執行步驟來處理資料。
檢視結果
步驟成功執行後,可以在 Amazon S3 輸出資料夾中檢視其輸出結果。
若要檢視 health_violations.py
的結果
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇儲存貯體名稱,然後選擇在提交步驟時指定的輸出資料夾。例如,
amzn-s3-demo-bucket
然後是myOutputFolder
。 -
確認輸出資料夾中顯示下列項目:
-
稱為
_SUCCESS
的小型物件。 -
以 字首開頭CSV的檔案
part-
,其中包含您的結果。
-
-
選擇包含結果的物件,然後選擇下載,將結果儲存至本機檔案系統。
-
在您選擇的編輯器中開啟結果。輸出檔案會列出紅色違規行為最多的十大食品機構。輸出檔案也會顯示每個機構的紅色違規總數。
以下是
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 叢集輸出的位置。
當您使用 Amazon 時EMR,您可能想要連線到執行中的叢集,以讀取日誌檔案、偵錯叢集,或使用 Spark shell 等CLI工具。Amazon EMR可讓您使用 Secure Shell (SSH) 通訊協定連線至叢集。本節說明如何設定 SSH、連線至您的叢集,以及檢視 Spark 的日誌檔案。如需有關連接至叢集的詳細資訊,請參閱 對 Amazon EMR 叢集節點進行驗證。
授權與叢集的SSH連線
連線到叢集之前,您需要修改叢集安全群組以授權傳入SSH連線。Amazon EC2安全群組充當虛擬防火牆,以控制傳入和傳出至叢集的流量。當您為本教學課程建立叢集時,Amazon 會代表您EMR建立下列安全群組:
- ElasticMapReduce- 主要
-
與主要節點相關聯的預設 Amazon EMR受管安全群組。在 Amazon EMR叢集中,主要節點是管理叢集的 Amazon EC2執行個體。
- ElasticMapReduce-從屬
-
與核心節點和任務節點相關聯的預設安全群組。
使用 連線至您的叢集 AWS CLI
無論您的作業系統為何,都可以使用 建立叢集的SSH連線 AWS CLI。
使用 連線至您的叢集並檢視日誌檔案 AWS CLI
-
使用下列命令來開啟叢集的SSH連線。
<mykeypair.key>
以金鑰對檔案的完整路徑和檔案名稱取代 。例如:C:\Users\<username>\.ssh\mykeypair.pem
。aws emr ssh --cluster-id
<j-2AL4XXXXXX5T9>
--key-pair-file<~/mykeypair.key>
-
瀏覽至
/mnt/var/log/spark
以存取叢集主節點上的 Spark 日誌。然後檢視該位置中的檔案。如需主節點上其他日誌檔案的清單,請參閱 檢視主節點上的日誌檔案。cd /mnt/var/log/spark ls
Amazon EMR on EC2 也是 Amazon SageMaker AI Unified Studio 支援的運算類型。如需如何在 Amazon SageMaker AI Unified Studio 中的EC2資源上使用和管理,請參閱EMR在 上管理 AmazonEC2。 EMR
步驟 3:清除 Amazon EMR 資源
終止叢集
現在您已將工作提交至叢集並檢視PySpark 應用程式的結果,您可以終止叢集。終止叢集會停止叢集所有相關聯的 Amazon EMR費用和 Amazon EC2執行個體。
當您終止叢集時,Amazon 會免費EMR保留叢集的相關中繼資料兩個月。封存的中繼資料可協助您為新作業複製叢集,或重新檢視叢集組態以供參考。中繼資料不包含叢集寫入 S3 的資料,或存放在叢集HDFS上的資料。
注意
在您終止叢集之後,Amazon EMR主控台不會讓您從清單檢視中刪除叢集。當 Amazon EMR清除其中繼資料時,終止的叢集會從主控台消失。
刪除 S3 資源
為避免額外費用,應刪除 Amazon S3 儲存貯體。刪除儲存貯體會移除本教學課程的所有 Amazon S3 資源。您的儲存貯體應包含:
-
PySpark 指令碼
-
輸入資料集
-
輸出結果資料夾
-
日誌檔案資料夾
如果您將PySpark 指令碼或輸出儲存在不同的位置,您可能需要採取額外的步驟來刪除儲存的檔案。
注意
在刪除儲存貯體之前,必須終止叢集。否則,可能不允許您清空儲存貯體。
若要刪除儲存貯體,請依照《Amazon Simple Storage Service 使用者指南》中如何刪除 S3 儲存貯體?提供的說明進行操作。
後續步驟
您現在已經從頭到尾啟動第一個 Amazon EMR叢集。您也已完成基本EMR任務,例如準備和提交大數據應用程式、檢視結果,以及終止叢集。
使用以下主題,進一步了解如何自訂 Amazon EMR工作流程。
探索 Amazon 的大數據應用程式 EMR
在 Amazon EMR版本指南中探索並比較您可以在叢集上安裝的大數據應用程式。版本指南會詳細說明每個EMR發行版本,並包含在 Amazon 上使用 Spark 和 Hadoop 等架構的秘訣EMR。
規劃叢集硬體、聯網和安全性
在本教學課程中,您建立了一個簡單的EMR叢集,無需設定進階選項。進階選項可讓您指定 Amazon EC2執行個體類型、叢集聯網和叢集安全性。如需有關規劃和啟動符合您要求的叢集的詳細資訊,請參閱 規劃、設定和啟動 Amazon EMR 叢集 和 Amazon EMR 中的安全。
管理叢集
深入了解如何在 管理 Amazon EMR 叢集 中使用正在執行的叢集。若要管理叢集,可以連線至叢集,對步驟進行偵錯,以及追蹤叢集活動和運作狀態。您也可以調整叢集資源,以透過EMR受管擴展來回應工作負載需求。
使用不同的介面
除了 Amazon EMR主控台之外,您還可以EMR使用 AWS Command Line Interface、Web 服務 API或眾多支援的其中之一來管理 Amazon AWS SDKs。如需詳細資訊,請參閱管理介面。
您也可以透過多種方式與安裝在 Amazon EMR叢集上的應用程式互動。一些應用程式,例如 Apache Hadoop,會發布您可檢視的 Web 介面。如需詳細資訊,請參閱檢視 Amazon EMR 叢集上託管的 Web 介面。
瀏覽EMR技術部落格
如需 Amazon 新EMR功能的範例演練和深入的技術討論,請參閱AWS 大數據部落格