运行原生查询执行资格认证工具

如需确定哪些批处理工作负载可以通过原生查询执行 (NQE) 实现更快的运行时间,您可以使用资格鉴定工具。该工具会分析 Spark 事件日志,以估算潜在的运行时节省,并识别 NQE 引擎不支持的任何操作。

Google Cloud 提供了两种运行资格分析的方法:资格作业和资格脚本。对于大多数用户,建议的方法是资格认定作业,该作业可自动发现和分析批处理工作负载。备用资格认定脚本适用于分析已知事件日志文件的特定用例。请选择最适合您应用场景的方法:

  • 资格认定作业(推荐):这是主要且推荐的方法。 它是一个 PySpark 作业,可自动发现和分析一个或多个 Google Cloud 项目和区域中的近期批量工作负载。如果您想执行广泛的分析,而无需手动查找单个事件日志文件,请使用此方法。此方法非常适合大规模评估 NQE 的适用性。

  • 资格认定脚本(替代方法):这是一种适用于高级或特定用例的替代方法。它是一个 shell 脚本,用于分析单个 Spark 事件日志文件或特定 Cloud Storage 目录中的所有事件日志。如果您有要分析的事件日志的 Cloud Storage 路径,请使用此方法。

资格验证作业

资格认定作业通过以编程方式扫描 Managed Service for Apache Spark 批量工作负载并提交分布式分析作业,简化了大规模分析。该工具会评估整个组织中的作业,无需手动查找和指定事件日志路径。

授予 IAM 角色

为了使资格评定作业能够访问批处理工作负载元数据并在 Cloud Logging 中读取 Spark 事件日志,运行工作负载的服务账号必须在所有要分析的项目中获得以下 IAM 角色:

提交资格认定作业

您可以使用 gcloud CLI 工具提交资格认证作业。 该作业包含一个 PySpark 脚本和一个 JAR 文件,它们托管在公共 Cloud Storage 存储桶中。

您可以在以下任一执行环境中运行作业:

  • 作为 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 中的存储桶。作业参数列在 -- 分隔符后面。

    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 路径,请使用此方法。此方法要求您在本地机器或配置为有权访问 Cloud Storage 中的事件日志文件的 Compute Engine 虚拟机上下载并运行 shell 脚本 run_qualification_tool.sh。

执行以下步骤,针对 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 History Server,然后选择相应工作负载。
    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。使用此 ID 可识别相应的批处理工作负载。

  • applicationName:Spark 应用的名称。

  • rddPercentage:应用中 RDD 操作的百分比。原生查询执行不支持 RDD 操作。

  • unsupportedSqlPercentage: 原生查询执行不支持的 SQL 操作百分比。

  • totalTaskTime:应用运行期间执行的所有任务的累计任务时间。

  • supportedTaskTime:原生查询执行支持的总任务时间。

以下各列提供了重要信息,可帮助您确定原生查询执行是否可以使批处理工作负载受益:

  • supportedSqlPercentage:原生查询执行支持的 SQL 操作百分比。百分比越高,通过使用 Native Query Execution 运行应用可以实现的运行时缩减幅度就越大。

  • recommendedForBoost:如果为 TRUE,建议使用原生查询执行功能运行应用。如果 recommendedForBoost 为 FALSE,请勿对批处理工作负载使用原生查询执行。

  • expectedRuntimeReduction:使用 Native Query Execution 运行应用时,应用运行时的预期缩减百分比。

UnsupportedOperators.tsv 输出文件。

UnsupportedOperators.tsv 输出文件包含工作负载应用中使用但原生查询执行不支持的运算符列表。输出文件中的每一行都列出了一个不受支持的运算符。

列说明:

  • unsupportedOperator:原生查询执行不支持的运算符的名称。

  • cumulativeCpuMs:执行运算符期间消耗的 CPU 毫秒数。此值反映了运算符在应用中的相对重要性。

  • count:该运算符在应用中使用的次数。