Qualifizierungstool für die Ausführung nativer Abfragen ausführen

Mit dem Qualifizierungstool können Sie Batcharbeitslasten identifizieren, die mit der nativen Abfrageausführung (Native Query Execution, NQE) schnellere Laufzeiten erzielen können. Das Tool analysiert Spark-Ereignislogs, um potenzielle Laufzeiteinsparungen zu schätzen und alle Vorgänge zu identifizieren, die von der NQE-Engine nicht unterstützt werden.

Google Cloud bietet zwei Methoden zum Ausführen der Qualifizierungsanalyse: Qualifizierungsjob und Qualifizierungsskript. Die empfohlene Methode für die meisten Nutzer ist der Qualifizierungsjob, der die Ermittlung und Analyse von Batcharbeitslasten automatisiert. Das alternative Qualifizierungsskript ist für den spezifischen Anwendungsfall der Analyse einer bekannten Ereignislogdatei verfügbar. Wählen Sie die Methode aus, die am besten zu Ihrem Anwendungsfall passt:

  • Qualifizierungsjob (empfohlen): Dies ist die primäre und empfohlene Methode. Es handelt sich um einen PySpark-Job, der automatisch aktuelle Batch arbeitslasten in einem oder mehreren Google Cloud Projekten und Regionen ermittelt und analysiert. Verwenden Sie diese Methode, wenn Sie eine umfassende Analyse durchführen möchten, ohne einzelne Ereignislogdateien manuell suchen zu müssen. Dieser Ansatz ist ideal für die umfassende Bewertung der Eignung von NQE.

  • Qualifizierungsskript (Alternative): Dies ist eine alternative Methode für erweiterte oder spezifische Anwendungsfälle. Es handelt sich um ein Shell-Skript, das eine einzelne Spark-Ereignislogdatei oder alle Ereignislogs in einem bestimmten Cloud Storage Verzeichnis analysiert. Verwenden Sie diese Methode, wenn Sie den Cloud Storage-Pfad zu den Ereignis logs haben, die Sie analysieren möchten.

Qualifizierungsjob

Der Qualifizierungsjob vereinfacht die umfassende Analyse, indem er programmatisch nach Serverless for Apache Spark-Batcharbeitslasten sucht und einen verteilten Analysejob sendet. Das Tool wertet Jobs in Ihrer Organisation aus, sodass Sie keine Ereignislogpfade manuell suchen und angeben müssen.

IAM-Rollen zuweisen

Damit der Qualifizierungsjob auf Batcharbeitslast-Metadaten zugreifen und Spark-Ereignislogs in Cloud Logging lesen kann, muss dem Dienstkonto, das die Arbeitslast ausführt, in allen zu analysierenden Projekten die folgenden IAM-Rollen zugewiesen sein:

Qualifizierungsjob senden

Sie senden den Qualifizierungsjob mit dem gcloud CLI-Tool. Der Job enthält ein PySpark-Skript und eine JAR-Datei, die in einem öffentlichen Cloud Storage-Bucket gehostet werden.

Sie können den Job in einer der folgenden Ausführungsumgebungen ausführen:

  • Als Serverless for Apache Spark-Batcharbeitslast. Dies ist eine einfache, eigenständige Jobausführung.

  • Als Job, der in einem Dataproc in Compute Engine Cluster ausgeführt wird. Dieser Ansatz kann nützlich sein, um den Job in einen Workflow zu integrieren.

Jobargumente

Argument Beschreibung Erforderlich? Standardwert
--project-ids Eine einzelne Projekt-ID oder eine durch Kommas getrennte Liste von Google Cloud-Projekt-IDs, nach denen nach Batcharbeitslasten gesucht werden soll. Nein Das Projekt, in dem der Qualifizierungsjob ausgeführt wird.
--regions Eine einzelne Region oder eine durch Kommas getrennte Liste von Regionen, die in den angegebenen Projekten gescannt werden sollen. Nein Alle Regionen in den angegebenen Projekten.
--start-time Das Startdatum zum Filtern von Batches. Es werden nur Batches analysiert, die an oder nach diesem Datum (Format: YYYY-MM-DD) erstellt wurden. Nein Es wird kein Startdatumsfilter angewendet.
--end-time Das Enddatum zum Filtern von Batches. Es werden nur Batches analysiert, die an oder vor diesem Datum (Format: YYYY-MM-DD) erstellt wurden. Nein Es wird kein Enddatumsfilter angewendet.
--limit Die maximale Anzahl der Batches, die pro Region analysiert werden sollen. Die neuesten Batches werden zuerst analysiert. Nein Alle Batches, die den anderen Filterkriterien entsprechen, werden analysiert.
--output-gcs-path Der Cloud Storage-Pfad (z. B. gs://your-bucket/output/), in den die Ergebnisdateien geschrieben werden. Ja Keine.
--input-file Der Cloud Storage-Pfad zu einer Textdatei für die Bulk-Analyse. Wenn angegeben, überschreibt dieses Argument alle anderen Argumente zur Definition des Umfangs (--project-ids, --regions, --start-time, --end-time, --limit). Nein Keine.

Beispiele für Qualifizierungsjobs

  • Ein Serverless for Apache Spark-Batchjob zur Durchführung einer einfachen Ad-hoc-Analyse. Die Job argumente werden nach dem -- Trennzeichen aufgeführt.

    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
    
  • Ein Serverless for Apache Spark-Batchjob zur Analyse von bis zu 50 der neuesten Batches in sample_project in der Region us-central1. Die Ergebnisse werden in einen Bucket in Cloud Storage geschrieben. Die Job argumente werden nach dem -- Trennzeichen aufgeführt.

    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/
    
  • Ein Dataproc in Compute Engine-Job, der an einen Dataproc-Cluster gesendet wird, um eine Bulk-Analyse in einem umfassenden, wiederholbaren oder automatisierten Analyseworkflow durchzuführen. Die Jobargumente werden in eine INPUT_FILE eingefügt, die in einen BUCKET in Cloud Storage hochgeladen wird. Diese Methode ist ideal, um in einem einzigen Durchlauf verschiedene Zeiträume oder Batchlimits in verschiedenen Projekten und Regionen zu scannen.

    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
    

    Hinweise:

    INPUT_FILE: Jede Zeile in der Datei stellt eine separate Analyse anfrage dar und verwendet ein Format mit Ein-Buchstaben-Flags, gefolgt von ihren Werten, z. B. -p PROJECT-ID -r REGION -s START_DATE -e END_DATE -l LIMITS.

    Beispiel für den Inhalt einer Eingabedatei:

    -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
    

    Diese Argumente weisen das Tool an, die folgenden beiden Bereiche zu analysieren:

    • Bis zu 100 Batches in Projekt 1 in der us-central1 Region, die zwischen dem 1. Dezember 2025 und dem 15. Dezember 2025 erstellt wurden.
    • Bis zu 50 Batches in Projekt 2 in der Region europe-west1, die am oder nach dem 15. November 2025 erstellt wurden.

Qualifizierungsskript

Verwenden Sie diese Methode, wenn Sie den direkten Cloud Storage-Pfad zu einem bestimmten Spark-Ereignislog haben, das Sie analysieren möchten. Bei diesem Ansatz müssen Sie ein Shell-Skript (run_qualification_tool.sh) auf einem lokalen Computer oder einer Compute Engine-VM herunterladen und ausführen, die für den Zugriff auf die Ereignislogdatei in Cloud Storage konfiguriert ist.

Führen Sie die folgenden Schritte aus, um das Skript für Ereignisdateien von Serverless for Apache Spark Batcharbeitslasten auszuführen.

1.Kopieren Sie die run_qualification_tool.sh in ein lokales Verzeichnis, das die zu analysierenden Spark-Ereignisdateien enthält.

  1. Führen Sie das Qualifizierungsskript aus, um eine Ereignisdatei oder eine Reihe von Ereignisdateien im Skriptverzeichnis zu analysieren.

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

    Flags und Werte:

    -f (erforderlich): Informationen zum Auffinden von Ereignisdateien für Spark-Arbeitslasten finden Sie unter Speicherorte von Spark-Ereignisdateien.

    • EVENT_FILE_PATH (erforderlich, es sei denn, EVENT_FILE_NAME ist angegeben): Pfad der zu analysierenden Ereignisdatei. Wenn nicht angegeben, wird der aktuelle Pfad als Pfad der Ereignisdatei verwendet.

    • EVENT_FILE_NAME (erforderlich, es sei denn, EVENT_FILE_PATH ist angegeben): Name der zu analysierenden Ereignisdatei. Wenn nicht angegeben, werden die Ereignisdateien, die rekursiv in der EVENT_FILE_PATH gefunden werden, analysiert.

    -o(optional): Wenn nicht angegeben, erstellt oder verwendet das Tool ein vorhandenes output Verzeichnis im aktuellen Verzeichnis, um Ausgabedateien zu platzieren.

    • CUSTOM_OUTPUT_DIRECTORY_PATH: Ausgabeverzeichnispfad für Ausgabedateien.

    -k (optional):

    • SERVICE_ACCOUNT_KEY: Der Dienstkontoschlüssel im JSON-Format, falls für den Zugriff auf EVENT_FILE_PATH erforderlich.

    -x (optional):

    • MEMORY_ALLOCATED: Arbeitsspeicher in Gigabyte, der dem Tool zugewiesen werden soll. Standardmäßig verwendet das Tool 80% des im System verfügbaren kostenlosen Arbeitsspeichers und alle verfügbaren Maschinenkerne.

    -t(optional):

    • PARALLEL_THREADS_TO_RUN: Die Anzahl der parallelen Threads, die das Tool ausführen soll. Standardmäßig führt das Tool alle Kerne aus.

    Beispiel für die Befehlsverwendung:

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

    In diesem Beispiel durchläuft das Qualifizierungstool das gs://dataproc-temp-us-east1-9779/spark-job-history Verzeichnis und analysiert Spark-Ereignisdateien, die in diesem Verzeichnis und seinen Unterverzeichnissen enthalten sind. Der Zugriff auf das Verzeichnis wird über /keys/event-file-key gewährt. Das Tool verwendet 34 GB memory für die Ausführung und führt 5 parallele Threads aus.

Speicherorte von Spark-Ereignisdateien

Führen Sie einen der folgenden Schritte aus, um die Spark-Ereignisdateien für Serverless for Apache Spark-Batcharbeitslasten zu finden:

  1. Suchen Sie in Cloud Storage nach spark.eventLog.dir für die Arbeitslast, laden Sie sie dann herunter.

    1. Wenn Sie spark.eventLog.dir nicht finden können, legen Sie spark.eventLog.dir auf einen Cloud Storage-Speicherort fest, führen Sie die Arbeitslast noch einmal aus und laden Sie spark.eventLog.dir herunter.
  2. Wenn Sie den Spark History Server für den Batchjob konfiguriert haben:

    1. Rufen Sie den Spark History Server auf und wählen Sie die Arbeitslast aus.
    2. Klicken Sie in der Spalte Ereignislog auf Herunterladen.

Ausgabedateien des Qualifizierungstools

Sobald die Analyse des Qualifizierungsjobs oder -skripts abgeschlossen ist, platziert das Qualifizierungstool die folgenden Ausgabedateien in einem perfboost-output Verzeichnis im aktuellen Verzeichnis:

  • AppsRecommendedForBoost.tsv: Eine durch Tabstopps getrennte Liste von Anwendungen, die für die Verwendung mit der nativen Abfrageausführung empfohlen werden.

  • UnsupportedOperators.tsv: Eine durch Tabstopps getrennte Liste von Anwendungen, die nicht für die Verwendung mit der nativen Abfrageausführung empfohlen werden.

Ausgabedatei AppsRecommendedForBoost.tsv

Die folgende Tabelle zeigt den Inhalt einer Beispielausgabedatei AppsRecommendedForBoost.tsv. Sie enthält eine Zeile für jede analysierte Anwendung.

Beispielausgabedatei 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% 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%

Spaltenbeschreibungen:

  • applicationId: Die ApplicationID der Spark-Anwendung. Verwenden Sie diese ID, um die entsprechende Batcharbeitslast zu identifizieren.

  • applicationName: Der Name der Spark-Anwendung.

  • rddPercentage: Der Prozentsatz der RDD-Vorgänge in der Anwendung. RDD-Vorgänge werden von der nativen Abfrageausführung nicht unterstützt.

  • unsupportedSqlPercentage: Prozentsatz der SQL-Vorgänge, die von der nativen Abfrageausführung nicht unterstützt werden.

  • totalTaskTime: Kumulative Aufgabenzeit aller Aufgaben, die während der Ausführung der Anwendung ausgeführt wurden.

  • supportedTaskTime: Die gesamte Aufgabenzeit, die von der nativen Abfrageausführung unterstützt wird.

Die folgenden Spalten enthalten wichtige Informationen, mit denen Sie feststellen können ob die native Abfrageausführung für Ihre Batcharbeitslast von Vorteil sein kann:

  • supportedSqlPercentage: Der Prozentsatz der SQL-Vorgänge, die von der nativen Abfrageausführung unterstützt werden. Je höher der Prozentsatz, desto größer die Laufzeitreduzierung, die durch die Ausführung der Anwendung mit der nativen Abfrageausführung erzielt werden kann.

  • recommendedForBoost: Wenn TRUE, wird die Ausführung der Anwendung mit der nativen Abfrageausführung empfohlen. Wenn recommendedForBoost FALSE ist, verwenden Sie die native Abfrageausführung nicht für die Batcharbeitslast.

  • expectedRuntimeReduction: Die erwartete prozentuale Reduzierung der Laufzeit der Anwendung , wenn Sie die Anwendung mit der nativen Abfrageausführung ausführen.

Ausgabedatei UnsupportedOperators.tsv

Die Ausgabedatei UnsupportedOperators.tsv enthält eine Liste der Operatoren, die in Arbeitslastanwendungen verwendet werden und von der nativen Abfrageausführung nicht unterstützt werden. Jede Zeile in der Ausgabedatei enthält einen nicht unterstützten Operator.

Spaltenbeschreibungen:

  • unsupportedOperator: Der Name des Operators, der von der nativen Abfrageausführung nicht unterstützt wird.

  • cumulativeCpuMs: Die Anzahl der CPU-Millisekunden, die während der Ausführung des Operators verbraucht wurden. Dieser Wert spiegelt die relative Bedeutung des Operators in der Anwendung wider.

  • count: Die Anzahl der Male, die der Operator in der Anwendung verwendet wird.