使用 Apache Spark web UI 監控任務 - AWS Glue

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

使用 Apache Spark web UI 監控任務

您可以使用 Apache Spark Web UI 來監控和偵錯在 AWS Glue 任務系統上執行的 AWS Glue ETL 任務,以及在 AWS Glue 開發端點上執行的 Spark 應用程式。Spark UI 可讓您為每個任務檢查下列項目:

  • 每個 Spark 階段的事件時間軸

  • 任務的有向無環圖 (DAG)

  • SparkSQL 查詢的實體和邏輯計畫

  • 每個任務的基礎 Spark 環境變數

如需有關使用 Spark Web UI 的詳細資訊,請參閱《Spark 文件》中的 Web UI。如需如何解譯 Spark UI 結果以改善工作效能的指引,請參閱《 AWS 規範指引》中有關 Apache Spark 工作效能調整 AWS Glue 的最佳做法

您可以在 AWS Glue 控制台中看到星火 UI。如果 AWS Glue 工作在 AWS Glue 3.0 或更新版本上執行,且記錄檔以標準 (而非舊版) 格式產生,這是較新工作的預設值。如果您的記錄檔大於 0.5 GB,您可以為 AWS Glue 4.0 或更新版本的工作執行啟用滾動記錄支援,以簡化記錄封存、分析和疑難排解。

您可以使用AWS Glue控制台或 AWS Command Line Interface (AWS CLI)啟用星火 UI。當您啟用 Spark UI 時,AWS Glue 開發端點上的 AWS Glue ETL 任務和 Spark 應用程式可以將 Spark 事件日誌備份到您在 Amazon Simple Storage Service (Amazon S3) 中指定的位置。可搭配使用 Amazon S3 中已備份的事件日誌與 Spark UI,即可在工作運作時即時使用,也可在工作完成後使用。當日誌保留在 Amazon S3 中時, AWS Glue 控制台中的 Spark UI 可以查看它們。

許可

若要在 AWS Glue 主控台中使用 Spark UI,您可以使用UseGlueStudio或新增所有個別服務 API。需要所有 API 才能完全使用 Spark UI,但是使用者可以透過在其 IAM 權限中新增其服務 API 來存取 SparKui 功能,以進行更精細的存取。

RequestLogParsing是最關鍵的,因為它執行日誌的解析。其餘的 API 用於讀取相應的解析數據。例如,GetStages可讓您存取 Spark 工作所有階段的相關資料。

對應至的 Spark UI 服務 API 清單UseGlueStudio如下範例政策。以下政策提供僅使用 Spark UI 功能的存取權。若要新增更多許可,例如 Amazon S3 和 IAM,請參閱建立的自訂 IAM 政策 AWS Glue Studio。

對應至的 Spark UI 服務 API 清UseGlueStudio單如下範例政策。使用星火 UI 服務 API 時,請使用以下命名空間:glue:<ServiceAPI>

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGlueStudioSparkUI", "Effect": "Allow", "Action": [ "glue:RequestLogParsing", "glue:GetLogParsingStatus", "glue:GetEnvironment", "glue:GetJobs", "glue:GetJob", "glue:GetStage", "glue:GetStages", "glue:GetStageFiles", "glue:BatchGetStageFiles", "glue:GetStageAttempt", "glue:GetStageAttemptTaskList", "glue:GetStageAttemptTaskSummary", "glue:GetExecutors", "glue:GetExecutorsThreads", "glue:GetStorage", "glue:GetStorageUnit", "glue:GetQueries", "glue:GetQuery" ], "Resource": [ "*" ] } ] }

限制

  • AWS Glue 主控台中的 Spark UI 不適用於 2023 年 11 月 20 日之前發生的工作執行,因為它們是舊版記錄檔格式。

  • AWS Glue 控制台中的 Spark UI 支持 AWS Glue 4.0 的滾動日誌,例如在流式作業中默認生成的日誌。所有產生的捲動記錄事件檔總和上限為 2 GB。對於沒有復原記錄支援的 AWS Glue 工作,SparKui 支援的記錄事件檔案大小上限為 0.5 GB。

  • 無伺服器 Spark 使用者介面不適用於只能由您的 VPC 存取的 Amazon S3 儲存貯體中存取的 Spark 事件日誌。

範例:Apache Spark Web UI

此範例顯示如何使用 Spark UI 了解工作效能。螢幕擷取畫面顯示自我管理的 Spark 歷史記錄伺服器提供的 Spark Web UI。在 AWS Glue 控制台星火 UI 提供了類似的意見。如需有關使用 Spark Web UI 的詳細資訊,請參閱《Spark 文件》中的 Web UI

以下是 Spark 應用程式的範例,它會讀取兩個資料來源、執行聯結轉換,然後以 Parquet 格式將其寫入至 Amazon S3。

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from pyspark.sql.functions import count, when, expr, col, sum, isnull from pyspark.sql.functions import countDistinct from awsglue.dynamicframe import DynamicFrame args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME']) df_persons = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/persons.json") df_memberships = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/memberships.json") df_joined = df_persons.join(df_memberships, df_persons.id == df_memberships.person_id, 'fullouter') df_joined.write.parquet("s3://aws-glue-demo-sparkui/output/") job.commit()

下列 DAG 視覺化顯示此 Spark 任務中的不同階段。

Spark UI 的螢幕擷取畫面顯示任務 0 的 2 個已完成階段。

下列任務的事件時間軸顯示不同 Spark 執行器的啟動、執行和終止。

Spark UI 的螢幕擷取畫面顯示不同 Spark 執行器的完成、失敗和作用中階段。

下列畫面顯示 SparkSQL 查詢計畫的詳細資訊:

  • 已剖析的邏輯計畫

  • 已分析的邏輯計畫

  • 已最佳化的邏輯計畫

  • 要執行的實體計畫

SparkSQL 查詢計畫:已剖析、已分析和已最佳化的邏輯計畫,以及要執行的實體計畫。