Ejecutar la herramienta de cualificación de ejecución de consultas nativas

Para identificar las cargas de trabajo por lotes que pueden conseguir tiempos de ejecución más rápidos con la ejecución de consultas nativas (NQE), puedes usar la herramienta de cualificación. La herramienta analiza los registros de eventos de Spark para estimar el posible ahorro de tiempo de ejecución e identificar las operaciones que no son compatibles con el motor NQE.

Google Cloud proporciona dos métodos para ejecutar el análisis de la cualificación: trabajo de cualificación y secuencia de comandos de cualificación. El enfoque recomendado para la mayoría de los usuarios es el trabajo de cualificación, que automatiza la detección y el análisis de las cargas de trabajo por lotes. El script de cualificación alternativo está disponible para el caso de uso específico de analizar un archivo de registro de eventos conocido. Elige el método que mejor se adapte a tu caso práctico:

  • Tarea de cualificación (recomendada): este es el método principal y recomendado. Se trata de un trabajo de PySpark que descubre y analiza automáticamente las cargas de trabajo por lotes recientes en uno o varios Google Cloud proyectos y regiones. Utiliza este método cuando quieras realizar un análisis amplio sin tener que localizar manualmente archivos de registro de eventos individuales. Este enfoque es ideal para evaluar a gran escala la idoneidad de NQE.

  • Script de cualificación (alternativa): es un método alternativo para casos prácticos avanzados o específicos. Se trata de un script de shell que analiza un único archivo de registro de eventos de Spark o todos los registros de eventos de un directorio específico de Cloud Storage. Utilice este método si tiene la ruta de Cloud Storage a los registros de eventos que quiere analizar.

Tarea de cualificación

El trabajo de cualificación simplifica el análisis a gran escala al buscar de forma programática cargas de trabajo por lotes de Serverless para Apache Spark y enviar un trabajo de análisis distribuido. La herramienta evalúa los trabajos de toda tu organización, por lo que no es necesario buscar y especificar manualmente las rutas de los registros de eventos.

Otorgar roles de gestión de identidades y accesos

Para que el trabajo de cualificación pueda acceder a los metadatos de la carga de trabajo por lotes y leer los registros de eventos de Spark en Cloud Logging, la cuenta de servicio que ejecuta la carga de trabajo debe tener los siguientes roles de gestión de identidades y accesos concedidos en todos los proyectos que se van a analizar:

Enviar la tarea de cualificación

Envía el trabajo de cualificación mediante la herramienta gcloud CLI. El trabajo incluye una secuencia de comandos de PySpark y un archivo JAR alojados en un segmento público de Cloud Storage.

Puedes ejecutar el trabajo en cualquiera de los siguientes entornos de ejecución:

  • Como carga de trabajo por lotes de Serverless para Apache Spark. Se trata de una ejecución de trabajos sencilla e independiente.

  • Como una tarea que se ejecuta en un clúster de Dataproc en Compute Engine. Este enfoque puede ser útil para integrar el trabajo en un flujo de trabajo.

Argumentos de las tareas

Argumento Descripción ¿Es obligatorio? Valor predeterminado
--project-ids Un único ID de proyecto o una lista de IDs de proyectos de Google Cloud separados por comas para buscar cargas de trabajo por lotes. No El proyecto en el que se está ejecutando la tarea de cualificación.
--regions Una sola región o una lista de regiones separadas por comas que se analizarán en los proyectos especificados. No Todas las regiones de los proyectos especificados.
--start-time Fecha de inicio para filtrar lotes. Solo se analizarán los lotes creados a partir de esta fecha (formato: AAAA-MM-DD). No No se ha aplicado ningún filtro de fecha de inicio.
--end-time Fecha de finalización para filtrar lotes. Solo se analizarán los lotes creados en esta fecha o antes (formato: AAAA-MM-DD). No No se aplica ningún filtro de fecha de finalización.
--limit Número máximo de lotes que se analizarán por región. Los lotes más recientes se analizan primero. No Se analizan todos los lotes que coincidan con los demás criterios de filtro.
--output-gcs-path La ruta de Cloud Storage (por ejemplo, gs://your-bucket/output/) en la que se escribirán los archivos de resultados. Ninguno
--input-file Ruta de Cloud Storage a un archivo de texto para el análisis en bloque. Si se proporciona, este argumento anula todos los demás argumentos que definen el ámbito (--project-ids, --regions, --start-time, --end-time y --limit). No Ninguno

Ejemplos de trabajos de cualificación

  • Una tarea por lotes de Serverless para Apache Spark para realizar análisis sencillos y ad hoc. Los argumentos de la tarea se indican después del separador --.

    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
    
  • Un trabajo por lotes de Serverless para Apache Spark que analiza hasta 50 de los lotes más recientes encontrados en sample_project en la región us-central1. Los resultados se escriben en un segmento de Cloud Storage. Los argumentos de la tarea se indican después del separador --.

    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/
    
  • Un trabajo de Dataproc en Compute Engine enviado a un clúster de Dataproc para realizar análisis en bloque en un flujo de trabajo de análisis a gran escala, repetible o automatizado. Los argumentos de los trabajos se colocan en un INPUT_FILE que se sube a un BUCKET en Cloud Storage. Este método es ideal para analizar diferentes intervalos de fechas o límites de lotes en distintos proyectos y regiones en una sola ejecución.

    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
    

    Notas:

    INPUT_FILE: cada línea del archivo representa una solicitud de análisis distinta y usa un formato de marcas de una sola letra seguidas de sus valores, como -p PROJECT-ID -r REGION -s START_DATE -e END_DATE -l LIMITS.

    Ejemplo del contenido del archivo de entrada:

    -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
    

    Estos argumentos indican a la herramienta que analice los dos siguientes ámbitos:

    • Hasta 100 lotes en el proyecto 1 de la región us-central1 creados entre el 1 y el 15 de diciembre del 2025.
    • Hasta 50 lotes en el proyecto 2 de la región europe-west1 creados el 15 de noviembre del 2025 o después.

Script de cualificación

Usa este método si tienes la ruta directa de Cloud Storage a un registro de eventos de Spark específico que quieras analizar. Para usar este método, debes descargar y ejecutar un script de shell, run_qualification_tool.sh, en una máquina local o en una máquina virtual de Compute Engine configurada con acceso al archivo de registro de eventos en Cloud Storage.

Sigue estos pasos para ejecutar la secuencia de comandos en los archivos de eventos de cargas de trabajo por lotes de Serverless para Apache Spark.

1.Copia el archivo run_qualification_tool.sh en un directorio local que contenga los archivos de eventos de Spark que quieras analizar.

  1. Ejecuta la secuencia de comandos de cualificación para analizar un archivo de eventos o un conjunto de archivos de eventos que se encuentren en el directorio de la secuencia de comandos.

    ./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
    

    Marcas y valores:

    -f (obligatorio): consulta Ubicaciones de los archivos de eventos de Spark para encontrar los archivos de eventos de las cargas de trabajo de Spark.

    • EVENT_FILE_PATH (obligatorio a menos que se especifique EVENT_FILE_NAME): ruta del archivo de eventos que se va a analizar. Si no se proporciona, se supone que la ruta del archivo de eventos es el directorio actual.

    • EVENT_FILE_NAME (obligatorio a menos que se especifique EVENT_FILE_PATH): nombre del archivo de eventos que se va a analizar. Si no se proporciona, se analizan los archivos de eventos encontrados de forma recursiva en EVENT_FILE_PATH.

    -o(Opcional): Si no se proporciona, la herramienta crea o usa un directorio output en el directorio actual para colocar los archivos de salida.

    • CUSTOM_OUTPUT_DIRECTORY_PATH: ruta del directorio de salida de los archivos de salida.

    -k (opcional):

    -x (opcional):

    • MEMORY_ALLOCATED: memoria en gigabytes que se asignará a la herramienta. De forma predeterminada, la herramienta usa el 80% de la memoria libre disponible en el sistema y todos los núcleos de la máquina disponibles.

    -t(opcional):

    • PARALLEL_THREADS_TO_RUN: número de hilos paralelos que puede ejecutar la herramienta. De forma predeterminada, la herramienta ejecuta todos los núcleos.

    Ejemplo de uso de comandos:

    ./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
    

    En este ejemplo, la herramienta de cualificación recorre el directorio gs://dataproc-temp-us-east1-9779/spark-job-history y analiza los archivos de eventos de Spark que contiene este directorio y sus subdirectorios. El /keys/event-file-key tiene acceso al directorio. La herramienta usa 34 GB memory para la ejecución y ejecuta 5 subprocesos paralelos.

Ubicaciones de archivos de eventos de Spark

Sigue cualquiera de estos pasos para encontrar los archivos de eventos de Spark de las cargas de trabajo por lotes de Serverless para Apache Spark:

  1. En Cloud Storage, busca el spark.eventLog.dir de la carga de trabajo y descárgalo.

    1. Si no encuentras el spark.eventLog.dir, define el spark.eventLog.dir en una ubicación de Cloud Storage, vuelve a ejecutar la carga de trabajo y descarga el spark.eventLog.dir.
  2. Si has configurado Spark History Server para el trabajo por lotes, haz lo siguiente:

    1. Ve a Spark History Server y selecciona la carga de trabajo.
    2. En la columna Registro de eventos, haga clic en Descargar.

Archivos de salida de la herramienta de cualificación

Una vez que se haya completado el trabajo de cualificación o el análisis de la secuencia de comandos, la herramienta de cualificación colocará los siguientes archivos de salida en un directorio perfboost-output del directorio actual:

  • AppsRecommendedForBoost.tsv: Lista de aplicaciones separadas por tabulaciones recomendadas para usar con la ejecución de consultas nativas.

  • UnsupportedOperators.tsv: Lista de aplicaciones separadas por tabulaciones que no se recomiendan para usar con la ejecución de consultas nativas.

Archivo de salida AppsRecommendedForBoost.tsv

En la siguiente tabla se muestra el contenido de un archivo de salida AppsRecommendedForBoost.tsv de ejemplo. Contiene una fila por cada aplicación analizada.

Archivo de salida AppsRecommendedForBoost.tsv de ejemplo:

applicationId nombreaplicación 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% TRUE 30,00%
app-2024081/batches/60381cab738021457-000 projects/example.com:dev/locations/us-central1
474113a1462b426bf
b3aeb
0,00% 0,00% 514401703 514401703 100% TRUE 30,00%

Descripciones de las columnas:

  • applicationId: la ApplicationID de la aplicación Spark. Úsalo para identificar la carga de trabajo por lotes correspondiente.

  • applicationName: nombre de la aplicación de Spark.

  • rddPercentage: porcentaje de operaciones de RDD en la aplicación. La ejecución de consultas nativas no admite operaciones de RDD.

  • unsupportedSqlPercentage: Porcentaje de operaciones de SQL no admitidas por la ejecución de consultas nativas.

  • totalTaskTime: tiempo acumulado de todas las tareas ejecutadas durante la ejecución de la aplicación.

  • supportedTaskTime: tiempo total de las tareas admitido por la ejecución de consultas nativas.

Las siguientes columnas proporcionan información importante para ayudarte a determinar si la ejecución de consultas nativas puede beneficiar a tu carga de trabajo por lotes:

  • supportedSqlPercentage: porcentaje de operaciones de SQL admitidas por la ejecución de consultas nativa. Cuanto mayor sea el porcentaje, mayor será la reducción del tiempo de ejecución que se puede conseguir ejecutando la aplicación con la ejecución de consultas nativas.

  • recommendedForBoost: Si TRUE, se recomienda ejecutar la aplicación con Native Query Execution. Si recommendedForBoost es FALSE, no uses la ejecución de consultas nativas en la carga de trabajo por lotes.

  • expectedRuntimeReduction: porcentaje de reducción previsto en el tiempo de ejecución de la aplicación al ejecutarla con la ejecución de consultas nativas.

UnsupportedOperators.tsv archivo de salida.

El archivo de salida UnsupportedOperators.tsv contiene una lista de operadores utilizados en aplicaciones de carga de trabajo que no son compatibles con la ejecución de consultas nativas. Cada fila del archivo de salida muestra un operador no admitido.

Descripciones de las columnas:

  • unsupportedOperator: El nombre del operador que no admite la ejecución de consultas nativas.

  • cumulativeCpuMs: número de milisegundos de CPU consumidos durante la ejecución del operador. Este valor refleja la importancia relativa del operador en la aplicación.

  • count: número de veces que se usa el operador en la aplicación.