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

Mit dem Qualifizierungstool können Sie Batcharbeitslasten ermitteln, die mit der Ausführung nativer Abfragen (Native Query Execution, NQE) schneller ausgeführt werden können. Das Tool analysiert Spark-Ereignisprotokolle, um potenzielle Laufzeitersparnisse 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. Für die meisten Nutzer wird der Qualifizierungsjob empfohlen, da er die Ermittlung und Analyse von Batcharbeitslasten automatisiert. Das alternative Qualifizierungsscript ist für den speziellen Anwendungsfall der Analyse einer bekannten Ereignisprotokolldatei verfügbar. Wählen Sie die Methode aus, die am besten zu Ihrem Anwendungsfall passt:

  • Qualifizierungsauftrag (empfohlen): Dies ist die primäre und empfohlene Methode. Es handelt sich um einen PySpark-Job, der aktuelle Batcharbeitslasten in einem oder mehreren Google Cloud Projekten und ‑Regionen automatisch erkennt und analysiert. Verwenden Sie diese Methode, wenn Sie eine umfassende Analyse durchführen möchten, ohne einzelne Ereignisprotokolldateien manuell suchen zu müssen. Dieser Ansatz eignet sich ideal für die groß angelegte 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-Script, mit dem eine einzelne Spark-Ereignisprotokolldatei oder alle Ereignisprotokolle in einem bestimmten Cloud Storage-Verzeichnis analysiert werden. Verwenden Sie diese Methode, wenn Sie den Cloud Storage-Pfad zu den Ereignisprotokollen haben, die Sie analysieren möchten.

Qualifikationsjob

Der Qualifizierungsjob vereinfacht die Analyse im großen Maßstab, indem er programmatisch nach Serverless for Apache Spark-Batcharbeitslasten sucht und einen verteilten Analysejob sendet. Das Tool wertet Jobs in Ihrer gesamten Organisation aus, sodass Sie Ereignisprotokollpfade nicht mehr manuell suchen und angeben müssen.

IAM-Rollen zuweisen

Damit der Qualifizierungsjob auf Batch-Arbeitslastmetadaten zugreifen und Spark-Ereignislogs in Cloud Logging lesen kann, muss dem Dienstkonto, mit dem die Arbeitslast ausgeführt wird, in allen zu analysierenden Projekten die folgenden IAM-Rollen zugewiesen sein:

Qualifizierungsjob senden

Sie reichen den Qualifizierungsjob mit dem gcloud CLI-Tool ein. Der Job enthält ein PySpark-Script 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 Ausführung von Jobs.

  • Als Job, der in einem Dataproc in Compute Engine-Cluster ausgeführt wird. Diese Vorgehensweise kann nützlich sein, um den Job in einen Workflow einzubinden.

Jobargumente

Argument Beschreibung Erforderlich/Optional? Standardwert
--project-ids Eine einzelne Projekt-ID oder eine durch Kommas getrennte Liste von Google Cloud-Projekt-IDs, nach denen Batch-Workloads 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 für das Filtern von Batches. Es werden nur Batches analysiert, die an oder nach diesem Datum (Format: JJJJ-MM-TT) erstellt wurden. Nein Es wird kein Filter für das Startdatum angewendet.
--end-time Das Enddatum zum Filtern von Batches. Es werden nur Batches analysiert, die an oder vor diesem Datum (Format: JJJJ-MM-TT) erstellt wurden. Nein Es wird kein Filter für das Enddatum angewendet.
--limit Die maximale Anzahl der zu analysierenden Batches pro Region. 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. Falls angegeben, überschreibt dieses Argument alle anderen Argumente, die den Bereich definieren (--project-ids, --regions, --start-time, --end-time, --limit). Nein Keine.

Beispiele für Qualifizierungsjobs

  • Ein Serverless for Apache Spark-Batchjob für einfache Ad-hoc-Analysen. Jobargumente 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 letzten Batches, die in sample_project in der Region us-central1 gefunden wurden. Die Ergebnisse werden in einen Bucket in Cloud Storage geschrieben. Jobargumente 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 on Compute Engine-Job, der an einen Dataproc-Cluster für die Bulk-Analyse in einem groß angelegten, wiederholbaren oder automatisierten Analyseworkflow gesendet wird. Jobargumente werden in einem INPUT_FILE platziert, das in einen BUCKET in Cloud Storage hochgeladen wird. Diese Methode eignet sich ideal, um in einem einzigen Lauf verschiedene Zeiträume oder Batchlimits für verschiedene Projekte 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 steht für eine separate Analyseanfrage und verwendet ein Format mit Ein-Buchstaben-Flags, gefolgt von den entsprechenden 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
    

    Mit diesen Argumenten wird das Tool angewiesen, die folgenden beiden Bereiche zu analysieren:

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

Qualifikationsskript

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 einen lokalen Computer oder eine 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 Script für Ereignisdateien von Serverless for Apache Spark-Batcharbeitslasten auszuführen.

1.Kopieren Sie 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 oder mehrere 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, sofern nicht EVENT_FILE_NAME angegeben ist): Pfad der zu analysierenden Ereignisdatei. Wenn nicht angegeben, wird davon ausgegangen, dass sich der Event-Dateipfad im aktuellen Verzeichnis befindet.

    • EVENT_FILE_NAME (erforderlich, sofern EVENT_FILE_PATH nicht angegeben ist): Name der zu analysierenden Ereignisdatei. Wenn kein Pfad angegeben ist, werden die Ereignisdateien analysiert, die rekursiv im Verzeichnis EVENT_FILE_PATH gefunden werden.

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

    • 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 die 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 freien Arbeitsspeichers und alle verfügbaren Maschinenkerne.

    -t(optional):

    • PARALLEL_THREADS_TO_RUN: Die Anzahl der parallelen Threads, die für die Ausführung des Tools verwendet werden. Standardmäßig werden alle Kerne ausgeführt.

    Beispiel für die Verwendung von Befehlen:

    ./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 Verzeichnis gs://dataproc-temp-us-east1-9779/spark-job-history und analysiert die darin und in seinen Unterverzeichnissen enthaltenen Spark-Ereignisdateien. Der Zugriff auf das Verzeichnis erfolgt über /keys/event-file-key. 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 der spark.eventLog.dir für die Arbeitslast und laden Sie sie herunter.

    1. Wenn Sie die spark.eventLog.dir nicht finden, legen Sie den spark.eventLog.dir auf einen Cloud Storage-Speicherort fest, führen Sie die Arbeitslast noch einmal aus und laden Sie die 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 Ereignisprotokoll auf Herunterladen.

Ausgabedateien des Qualifizierungstools

Sobald der Qualifizierungsjob oder die Scriptanalyse abgeschlossen ist, werden die folgenden Ausgabedateien vom Qualifizierungstool in einem perfboost-output-Verzeichnis im aktuellen Verzeichnis platziert:

  • AppsRecommendedForBoost.tsv: Eine durch Tabulatoren getrennte Liste von Anwendungen, die für die Verwendung mit der Ausführung nativer Abfragen empfohlen werden.

  • UnsupportedOperators.tsv: Eine tabulatorgetrennte Liste von Anwendungen, die nicht für die Verwendung mit der Ausführung nativer Abfragen empfohlen werden.

AppsRecommendedForBoost.tsv-Ausgabedatei

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

Beispiel für die AppsRecommendedForBoost.tsv-Ausgabedatei:

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%

Spaltenbeschreibungen:

  • applicationId: Die ApplicationID der Spark-Anwendung. Damit können Sie die entsprechende Batch-Arbeitslast 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 Ausführung nativer Abfragen unterstützt wird.

Die folgenden Spalten enthalten wichtige Informationen, mit denen Sie feststellen können, ob die Ausführung nativer Abfragen 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 Laufzeitverkürzung, die durch die Ausführung der Anwendung mit der nativen Abfrageausführung erzielt werden kann.

  • recommendedForBoost:Wenn TRUE, wird empfohlen, die Anwendung mit der nativen Abfrageausführung auszuführen. Wenn recommendedForBoost gleich 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 Ausführung nativer Abfragen ausführen.

UnsupportedOperators.tsv-Ausgabedatei.

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. In jeder Zeile der Ausgabedatei wird ein nicht unterstützter Operator aufgeführt.

Spaltenbeschreibungen:

  • unsupportedOperator: Der Name des Operators, der von der Ausführung nativer Abfragen nicht unterstützt wird.

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

  • count: Die Häufigkeit, mit der der Operator in der Anwendung verwendet wird.