執行原生查詢執行資格工具

如要找出可透過原生查詢執行作業 (NQE) 加快執行時間的批次工作負載,可以使用資格判定工具。這項工具會分析 Spark 事件記錄,預估潛在的執行階段節省量,並找出 NQE 引擎不支援的作業。

Google Cloud 提供兩種執行資格分析的方法:資格工作和資格指令碼。對大多數使用者來說,建議採用資格判定工作,自動探索及分析批次工作負載。替代資格判定指令碼適用於分析已知事件記錄檔的特定用途。請根據您的用途選擇最合適的方法:

  • 資格判定工作 (建議):這是主要且建議的方法。這項 PySpark 工作會自動探索及分析一或多個 Google Cloud 專案和區域中,最近的批次工作負載。如要進行廣泛分析,而不必手動找出個別事件記錄檔,請使用這個方法。這種方法適合大規模評估 NQE 適用性。

  • 資格判定指令碼 (替代方案):這是進階或特定用途的替代方法。這項殼層指令碼會分析單一 Spark 事件記錄檔,或特定 Cloud Storage 目錄中的所有事件記錄。如果您有要分析的事件記錄 Cloud Storage 路徑,請使用這個方法。

資格評估工作

資格判定工作會以程式輔助方式掃描 Managed Service for Apache Spark 批次工作負載,並提交分散式分析工作,簡化大規模分析作業。這項工具會評估整個組織的工作,因此您不必手動尋找及指定事件記錄路徑。

授予 IAM 角色

為使資格判定工作能存取批次工作負載中繼資料,並讀取 Cloud Logging 中的 Spark 事件記錄,執行工作負載的服務帳戶必須在所有要分析的專案中,具備下列 IAM 角色:

提交資格判定工作

您可以使用 gcloud CLI 工具提交資格判定工作。這項工作包含 PySpark 指令碼和 JAR 檔案,兩者都託管在公開的 Cloud Storage bucket。

您可以在下列任一執行環境中執行工作:

  • 做為 Managed Service for Apache Spark 批次工作負載。這是簡單的獨立工作執行。

  • 在 Managed Service for Apache Spark 叢集執行的工作。這種方法有助於將工作整合至工作流程。

工作引數

引數 說明 是否必要 預設值
--project-ids 單一專案 ID 或以半形逗號分隔的 Google Cloud 專案 ID 清單,用於掃描批次工作負載。 否 執行資格判定工作的專案。
--regions 指定專案中要掃描的單一區域或以半形逗號分隔的區域清單。 否 指定專案中的所有區域。
--start-time 篩選批次的開始日期。系統只會分析在這個日期 (格式:YYYY-MM-DD) 當天或之後建立的批次。 否 未套用開始日期篩選條件。
--end-time 篩選批次的結束日期。系統只會分析在這個日期 (格式:YYYY-MM-DD) 當天或之前建立的批次。 否 未套用結束日期篩選條件。
--limit 每個區域可分析的批次數量上限。系統會先分析最近的批次。 否 系統會分析符合其他篩選條件的所有批次。
--output-gcs-path 寫入結果檔案的 Cloud Storage 路徑 (例如 gs://your-bucket/output/)。 是 無。
--input-file 用於大量分析的文字檔案 Cloud Storage 路徑。如果提供這個引數,就會覆寫所有其他定義範圍的引數 (--project-ids、--regions、--start-time、--end-time、--limit)。 否 無。

資格工作範例

  • Managed Service for Apache Spark 批次工作,用於執行簡單的臨時分析。工作引數會列在 -- 分隔符號之後。

    gcloud dataproc batches submit pyspark gs://qualification-tool/performance-boost-qualification.py \
        --project=PROJECT_ID \
        --region=REGION \
        --jars=gs://qualification-tool/dataproc-perfboost-qualification-1.2.jar \
        -- \
        --project-ids=COMMA_SEPARATED_PROJECT_IDS \
        --regions=COMMA_SEPARATED_REGIONS \
        --limit=MAX_BATCHES \
        --output-gcs-path=gs://BUCKET
    
  • Managed Service for Apache Spark 批次工作:分析 us-central1 區域中 sample_project 內最多 50 個最新批次,並將結果寫入 Cloud Storage 中的 bucket。工作引數會列在 -- 分隔符號之後。

    gcloud dataproc batches submit pyspark gs://qualification-tool/performance-boost-qualification.py \
        --project=PROJECT_ID \
        --region=US-CENTRAL1 \
        --jars=gs://qualification-tool/dataproc-perfboost-qualification-1.2.jar \
        -- \
        --project-ids=PROJECT_ID \
        --regions=US-CENTRAL1 \
        --limit=50 \
        --output-gcs-path=gs://BUCKET/
    
  • 提交至 Managed Service for Apache Spark 叢集的 Managed Service for Apache Spark 工作,用於大規模、可重複或自動化分析工作流程中的大量分析。工作引數會放在 INPUT_FILE 中,並上傳至 Cloud Storage 的 BUCKET。這個方法適合在單次執行中,掃描不同專案和區域的不同日期範圍或批次限制。

    gcloud dataproc jobs submit pyspark gs://qualification-tool/performance-boost-qualification.py \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --jars=gs://qualification-tool/dataproc-perfboost-qualification-1.2.jar \
        -- \
        --input-file=gs://INPUT_FILE \
        --output-gcs-path=gs://BUCKET
    

    注意:

    INPUT_FILE:檔案中的每一行代表不同的分析要求,並使用單一字母標記,後接其值,例如 -p PROJECT-ID -r REGION -s START_DATE -e END_DATE -l LIMITS。

    輸入檔案內容範例:

    -p project1 -r us-central1 -s 2024-12-01 -e 2024-12-15 -l 100
    -p project2 -r europe-west1 -s 2024-11-15 -l 50
    

    這些引數會指示工具分析下列兩個範圍:

    • 2025 年 12 月 1 日至 2025 年 12 月 15 日期間,在 us-central1 區域的 project1 中建立最多 100 個批次。
    • 2025 年 11 月 15 日當天或之後,在 europe-west1 區域的 project2 中建立最多 50 個批次。

資格審查腳本

如果您有要分析的特定 Spark 事件記錄的直接 Cloud Storage 路徑,請使用這個方法。這種方法需要您在本機電腦或 Compute Engine VM 上下載並執行殼層指令碼 run_qualification_tool.sh,該 VM 必須設定為可存取 Cloud Storage 中的事件記錄檔。

請按照下列步驟,對 Managed Service for Apache Spark 批次工作負載事件檔案執行指令碼。

1. 將 run_qualification_tool.sh 複製到本機目錄,其中包含要分析的 Spark 事件檔案。

  1. 執行資格指令碼,分析指令碼目錄中的一個或一組事件檔案。

    ./run_qualification_tool.sh -f EVENT_FILE_PATH/EVENT_FILE_NAME \
        -o CUSTOM_OUTPUT_DIRECTORY_PATH \
        -k SERVICE_ACCOUNT_KEY  \
        -x MEMORY_ALLOCATEDg  \
        -t PARALLEL_THREADS_TO_RUN
    

    旗標和值:

    -f (必要):請參閱「Spark 事件檔案位置」,找出 Spark 工作負載事件檔案。

    • EVENT_FILE_PATH (除非指定 EVENT_FILE_NAME,否則為必要):要分析的事件檔案路徑。如未提供,系統會假設事件檔案路徑為目前目錄。

    • EVENT_FILE_NAME (除非指定 EVENT_FILE_PATH,否則為必要):要分析的事件檔案名稱。如未提供,系統會分析在 EVENT_FILE_PATH 中遞迴找到的事件檔案。

    -o (選用):如未提供,工具會建立或使用目前目錄下的現有 output 目錄,用來放置輸出檔案。

    • CUSTOM_OUTPUT_DIRECTORY_PATH::輸出檔案的輸出目錄路徑。

    -k (選用):

    • SERVICE_ACCOUNT_KEY:JSON 格式的服務帳戶金鑰 (如需存取 EVENT_FILE_PATH)。

    -x (選用):

    • MEMORY_ALLOCATED:要分配給工具的記憶體 (單位為 GB)。根據預設,這項工具會使用系統中 80% 的可用記憶體,以及所有可用的機器核心。

    -t(選用):

    • PARALLEL_THREADS_TO_RUN:工具要執行的平行執行緒數量。根據預設,這項工具會執行所有核心。

    指令用法範例:

    ./run_qualification_tool.sh -f gs://dataproc-temp-us-east1-9779/spark-job-history \
        -o perfboost-output -k /keys/event-file-key -x 34g -t 5
    

    在這個範例中,資格判定工具會周遊 gs://dataproc-temp-us-east1-9779/spark-job-history 目錄,並分析這個目錄及其子目錄中的 Spark 事件檔案。/keys/event-file-key 會提供目錄的存取權。這項工具會使用 34 GB memory 執行,並執行 5 個平行執行緒。

Spark 事件檔案位置

請執行下列任一步驟,找出 Managed Service for Apache Spark 批次工作負載的 Spark 事件檔案:

  1. 在 Cloud Storage 中,找出工作負載的 spark.eventLog.dir,然後下載。

    1. 如果找不到 spark.eventLog.dir,請將 spark.eventLog.dir 設為 Cloud Storage 位置,然後重新執行工作負載並下載 spark.eventLog.dir。
  2. 如果您已為批次工作設定 Spark 記錄伺服器:

    1. 前往 Spark 記錄伺服器,然後選取工作負載。
    2. 按一下「事件記錄」欄中的「下載」。

評估工具輸出檔案

資格判定工作或指令碼分析完成後,資格判定工具會將下列輸出檔案放在目前目錄的 perfboost-output 目錄中:

AppsRecommendedForBoost.tsv 個輸出檔案

下表顯示 AppsRecommendedForBoost.tsv 輸出檔案範例的內容。其中包含每個分析應用程式的資料列。

AppsRecommendedForBoost.tsv 輸出檔案範例:

applicationId applicationName rddPercentage unsupportedSqlPercentage totalTaskTime supportedTaskTime supportedSqlPercentage recommendedForBoost expectedRuntimeReduction
app-2024081/batches/083f6196248043938-000 projects/example.com:dev/locations/us-central1
6b4d6cae140f883c0
11c8e
0.00% 0.00% 548924253 548924253 100.00% TRUE 30.00%
app-2024081/batches/60381cab738021457-000 projects/example.com:dev/locations/us-central1
474113a1462b426bf
b3aeb
0.00% 0.00% 514401703 514401703 100.00% TRUE 30.00%

資料欄說明:

  • applicationId:Spark 應用程式的 ApplicationID。可用於識別對應的批次工作負載。

  • applicationName:Spark 應用程式的名稱。

  • rddPercentage:應用程式中 RDD 作業的百分比。原生查詢執行不支援 RDD 作業。

  • unsupportedSqlPercentage: 原生查詢執行不支援的 SQL 作業百分比。

  • totalTaskTime:應用程式執行期間,所有工作的累計工作時間。

  • supportedTaskTime:原生查詢執行作業支援的總工作時間。

下列資料欄提供重要資訊,可協助您判斷原生查詢執行功能是否能提升批次工作負載的成效:

  • supportedSqlPercentage:原生查詢執行支援的 SQL 作業百分比。百分比越高,透過原生查詢執行功能執行應用程式時,可縮短的執行階段時間就越多。

  • recommendedForBoost:如果 TRUE,建議使用原生查詢執行功能執行應用程式。如果 recommendedForBoost 為 FALSE,請勿在批次工作負載上使用原生查詢執行作業。

  • expectedRuntimeReduction:使用原生查詢執行功能執行應用程式時,預期可縮短的應用程式執行階段百分比。

UnsupportedOperators.tsv 個輸出檔案。

UnsupportedOperators.tsv 輸出檔案包含工作負載應用程式中使用的運算子清單,這些運算子不受原生查詢執行支援。輸出檔案中的每一列都會列出不支援的運算子。

資料欄說明:

  • unsupportedOperator:原生查詢執行不支援的運算子名稱。

  • cumulativeCpuMs:執行運算子期間耗用的 CPU 毫秒數。這個值反映了運算子在應用程式中的相對重要性。

  • count:運算子在應用程式中的使用次數。