使用 AWS Glue 任務執行洞察進行監控 - AWS Glue

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

使用 AWS Glue 任務執行洞察進行監控

AWS Glue 任務執行洞察是 的一項功能 AWS Glue ,可簡化 AWS Glue 任務的任務偵錯和最佳化。 AWS Glue 提供 Spark UI,以及 CloudWatch 日誌和指標來監控您的 AWS Glue 任務。使用此功能,您可以取得 AWS Glue 任務執行的相關資訊:

  • 失敗 AWS Glue 的任務指令碼行號。

  • 在任務失敗之前,Spark 查詢計劃中最近執行的 Spark 動作。

  • 與時間排序日誌串流中顯示的故障相關的 Spark 異常事件。

  • 根本原因分析和修正問題的建議動作 (例如調校指令碼)。

  • 常見的 Spark 事件 (與 Spark 動作相關的日誌訊息),其中包含解決根本原因的建議動作。

您可以使用 AWS Glue CloudWatch 日誌中的兩個新日誌串流來取得所有這些洞見。

要求

AWS Glue 任務執行洞察功能適用於 2.0 版和更新 AWS Glue 版本。您可以遵循現有任務的遷移指南,從舊 AWS Glue 版本升級它們。

啟用 AWS Glue ETL 任務的任務執行洞察

您可以透過 AWS Glue Studio 或 CLI 啟用任務執行洞察。

AWS Glue Studio

透過 建立任務時 AWS Glue Studio,您可以在任務詳細資訊索引標籤下啟用或停用任務執行洞察。檢查是否已選中產生任務洞見

在 AWS Glue Studio中啟用任務執行見解。

命令列

如果透過 CLI 建立任務,則可以使用單個新的任務參數啟動任務:--enable-job-insights = true

預設情況下,在 AWS Glue 連續記錄使用的相同預設日誌群組下建立任務執行見解日誌串流, 即 /aws-glue/jobs/logs-v2/。您可以使用相同的連續記錄引數集來設定自訂日誌群組名稱、日誌篩選條件和日誌群組組態。如需詳細資訊,請參閱啟用 AWS Glue 任務的持續記錄

存取 CloudWatch 中的任務執行見解日誌串流

啟用任務執行見解功能後,當任務執行失敗時,可能會建立兩個日誌串流。任務成功完成後,兩個串流均不會產生。

  1. 異常分析日誌串流<job-run-id>-job-insights-rca-driver。此串流提供下列資訊:

    • 造成失敗 AWS Glue 的任務指令碼行號。

    • 在 Spark 查詢計劃 (DAG) 中最近執行的 Spark 動作。

    • Spark 驅動程式和執行器中與異常相關的簡明時間排序事件。您可以從中找到詳細資訊,例如完整的錯誤訊息、失敗的 Spark 任務及其執行器 ID,這些資訊可協助您專注於特定執行器的日誌串流,以便在需要時進行更深入的調查。

  2. 基於規則的見解串流

    • 根本原因分析和關於如何修正錯誤的建議 (例如使用特定的任務參數以最佳化效能)。

    • 作為根本原因分析基礎的相關 Spark 事件和建議的動作。

注意

僅當任何異常 Spark 事件可用於失敗的任務執行時,第一個串流才會存在;只有在見解可用於失敗的任務執行時,第二個串流才存在。例如,如果您的任務成功完成,則不會產生任何串流;如果任務失敗,但沒有可以與故障場景相符的服務定義規則,則僅產生第一個串流。

如果任務是從 建立 AWS Glue Studio,則任務執行詳細資訊索引標籤 (任務執行洞見) 下也會提供上述串流的連結,做為「簡潔和合併錯誤日誌」和「錯誤分析和指引」。

Job Run Details (任務執行詳細資訊) 頁面包含指向日誌串流的連結。

AWS Glue 任務執行洞見的範例

在本部分中,我們展示任務執行見解功能如何協助您解決失敗任務中問題的範例。在此範例中,使用者忘記在 AWS Glue 任務中匯入所需的模組 (張量流程),以分析和建置其資料的機器學習模型。

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.types import * from pyspark.sql.functions import udf,col args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) data_set_1 = [1, 2, 3, 4] data_set_2 = [5, 6, 7, 8] scoresDf = spark.createDataFrame(data_set_1, IntegerType()) def data_multiplier_func(factor, data_vector): import tensorflow as tf with tf.compat.v1.Session() as sess: x1 = tf.constant(factor) x2 = tf.constant(data_vector) result = tf.multiply(x1, x2) return sess.run(result).tolist() data_multiplier_udf = udf(lambda x:data_multiplier_func(x, data_set_2), ArrayType(IntegerType(),False)) factoredDf = scoresDf.withColumn("final_value", data_multiplier_udf(col("value"))) print(factoredDf.collect())

如果沒有任務執行見解功能,當任務失敗時,您只會看到 Spark 擲回的訊息:

An error occurred while calling o111.collectToPython. Traceback (most recent call last):

該訊息含糊不清,並限制了您的偵錯體驗。在此情況下,此功能為您提供了兩個 CloudWatch 日誌串流中的其他見解:

  1. job-insights-rca-driver 日誌串流:

    • 異常事件:此日誌串流提供與從 Spark 驅動程式和不同分佈式工作者收集的故障相關的 Spark 異常事件。這些事件可協助您了解例外狀況的時間順序傳播,因為故障的程式碼會跨分散在 AWS Glue 工作者的 Spark 任務、執行器和階段執行。

    • 行號:此日誌串流標識第 21 行,該行叫用以匯入導致失敗的 Python 模組;它還標識第 24 行,其中叫用 Spark Action collect(),作為指令碼中最後執行的一行。

    job-insights-rca-driver 日誌串流。
  2. job-insights-rule-driver 日誌串流:

    • 根本原因和建議:除了指令碼中故障的行號和上次執行的行號之外,此日誌串流會顯示根本原因分析和建議,讓您遵循 AWS Glue 文件並設定必要的任務參數,以便在 AWS Glue 任務中使用額外的 Python 模組。

    • 基礎事件:此日誌串流還顯示了使用服務定義規則評估的 Spark 異常事件,以推斷根本原因並提供建議。

    job-insights-rule-driver 日誌串流。