本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
何時在中設定 EMR 事件 CloudWatch
對於某些輪詢 API (例如 DescribeCluster DescribeStep ListClusters、和) 設定 CloudWatch 事件可以縮短變更的回應時間,並釋放服務配額。例如,如果將 Lambda 函數設定為在叢集的狀態變更時執行,例如步驟完成或叢集終止時,您可以使用該觸發條件啟動工作流程中的下一個動作,而不是等待下一個輪詢。否則,如果您擁有專用的 Amazon EC2 執行個體或 Lambda 函數不斷輪詢 EMR API 是否發生變更,這不僅浪費運算資源,還可能達到服務配額。
以下是一些您可能會因移至事件驅動型架構而受益的情況。
案例 1:使用 DescribeCluster API 呼叫輪詢 EMR 以完成步驟
範例 使用 DescribeCluster API 呼叫輪詢 EMR 以完成步驟
常見的模式是向執行中的叢集提交步驟,然後輪詢 Amazon EMR 以取得有關步驟的狀態,通常使用 DescribeCluster 或 DescribeStep API。透過深入了解 Amazon EMR 步驟狀態變更事件,也可以在最短的延遲情況下完成此任務。
此事件在其承載中包含下列資訊。
{ "version": "0", "id": "999cccaa-eaaa-0000-1111-123456789012", "detail-type": "EMR Step Status Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T20:53:09Z", "region": "us-east-1", "resources": [], "detail": { "severity": "ERROR", "actionOnFailure": "CONTINUE", "stepId": "s-ZYXWVUTSRQPON", "name": "CustomJAR", "clusterId": "j-123456789ABCD", "state": "FAILED", "message": "Step s-ZYXWVUTSRQPON (CustomJAR) in Amazon EMR cluster j-123456789ABCD (Development Cluster) failed at 2016-12-16 20:53 UTC." } }
在細節貼圖中,Lambda 函數可以剖析 "state"、"stepId" 或 "clusterId",以尋找相關資訊。
案例 2:輪詢 EMR 是否有可用叢集可執行工作流程
範例 輪詢 EMR 是否有可用叢集可執行工作流程
對於執行多個叢集的客戶而言,應採取的模式是在叢集可用時立即在叢集上執行工作流程。如果有許多叢集正在執行,而且需要在等待的叢集上執行工作流程,則模式可能是使用 DescribeCluster 或可用叢集的 ListClusters API 呼叫輪詢 EMR。在了解叢集何時準備好執行步驟時,另一種減少延遲的方法是處理 Amazon EMR 叢集狀態變更事件。
此事件在其承載中包含下列資訊。
{ "version": "0", "id": "999cccaa-eaaa-0000-1111-123456789012", "detail-type": "EMR Cluster State Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T20:43:05Z", "region": "us-east-1", "resources": [], "detail": { "severity": "INFO", "stateChangeReason": "{\"code\":\"\"}", "name": "Development Cluster", "clusterId": "j-123456789ABCD", "state": "WAITING", "message": "Amazon EMR cluster j-123456789ABCD ..." } }
對於此事件,可以設定 Lambda 函數,以便在叢集狀態變更為 WAITING 時,立即將等待中的工作流程傳送至叢集。
案例 3:輪詢 EMR 以進行叢集終止
範例 輪詢 EMR 以進行叢集終止
執行許多 EMR 叢集的客戶常見模式是輪詢 Amazon EMR 是否存在已終止的叢集,以便不再將工作傳送至該叢集。您可以使用 DescribeCluster 和 ListClusters API 呼叫或使用中的 Amazon EMR 叢集狀態變更事件來實作此模式。
叢集終止時,發出的事件類似下列範例。
{ "version": "0", "id": "1234abb0-f87e-1234-b7b6-000000123456", "detail-type": "EMR Cluster State Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T21:00:23Z", "region": "us-east-1", "resources": [], "detail": { "severity": "INFO", "stateChangeReason": "{\"code\":\"USER_REQUEST\",\"message\":\"Terminated by user request\"}", "name": "Development Cluster", "clusterId": "j-123456789ABCD", "state": "TERMINATED", "message": "Amazon EMR Cluster jj-123456789ABCD (Development Cluster) has terminated at 2016-12-16 21:00 UTC with a reason of USER_REQUEST." } }
承載的「詳細資訊」區段包括叢集 ID 和可對其執行動作的狀態。