Accelera i carichi di lavoro batch e le sessioni interattive di Dataproc Serverless con l'esecuzione di query native

Stiamo annunciando la disponibilità generale (GA) dell'esecuzione di query native, che supporta le API Spark Dataframe, le query Spark SQL che leggono i dati dai file Parquet e ORC e i carichi di lavoro consigliati dallo strumento di qualifica dell'esecuzione di query native. Per domande su altri casi d'uso, contatta dataproc-pms@google.com.

Questo documento descrive come abilitare i carichi di lavoro batch di Dataproc Serverless e le sessioni interattive in esecuzione nel livello di prezzo Premium per utilizzare l'esecuzione di query native.

Come utilizzare l'esecuzione di query native con i prezzi del livello Premium

L'esecuzione di query native di Dataproc Serverless è disponibile solo con i carichi di lavoro batch e le sessioni interattive in esecuzione nel livello di prezzo premium di Dataproc Serverless. I prezzi del livello Premium sono più elevati rispetto a quelli del livello Standard, ma non è previsto alcun addebito aggiuntivo per l'esecuzione di query native. Per ulteriori informazioni, consulta i prezzi di Dataproc Serverless.

Puoi attivare l'allocazione delle risorse e i prezzi del livello premium per le risorse di sessioni interattive e collettive impostando le seguenti proprietà del livello di allocazione delle risorse su premium quando invii un workload batch di Spark o una sessione interattiva.

Configura l'esecuzione di query native impostando le relative proprietà su un carico di lavoro batch, su una sessione interattiva o su un modello di sessione, quindi invia il carico di lavoro o esegui la sessione interattiva in un notebook.

Console

  1. Nella console Google Cloud:

    1. Vai a Dataproc Batches.
    2. Fai clic su Crea per aprire la pagina Crea batch.
  2. Seleziona e compila i seguenti campi per configurare il batch per l'esecuzione di query native:

    • Contenitore:
    • Configurazione a livello di esecutore e driver:
      • Seleziona Premium per tutti i livelli (Livello di calcolo del driver, Livello di calcolo dell'esecuzione).
    • Proprietà: inserisci le seguenti coppie Key (nome proprietà) e Value per le seguenti proprietà di esecuzione di query native:
      Chiave Valore
      spark.dataproc.runtimeEngine indigeno/nativo/locale
  3. Compila, seleziona o conferma altre impostazioni dei carichi di lavoro batch. Vedi Inviare un carico di lavoro batch Spark.

  4. Fai clic su INVIA per eseguire il carico di lavoro batch Spark.

gcloud

Imposta i seguenti flag di comando gcloud CLI gcloud dataproc batches submit spark per configurare il carico di lavoro batch per l'esecuzione di query native:

gcloud dataproc batches submit spark \
    --project=PROJECT_ID \
    --region=REGION \
    --version=VERSION \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    --properties=spark.dataproc.runtimeEngine=native,spark.dataproc.driver.compute.tier=premium,spark.dataproc.executor.compute.tier=premium \
    OTHER_FLAGS_AS_NEEDED

Note:

API

Imposta i seguenti campi dell'API Dataproc per configurare il workload batch per l'esecuzione di query native:

Ottimizzazione del carico di lavoro di esecuzione di query native

L'esecuzione di query native di Dataproc Serverless può essere ottimizzata ulteriormente utilizzando le seguenti proprietà:

Proprietà batch Quando utilizzarlo
spark.driver.memory
spark.driver.memoryOverhead
To tune the memory provided to spark driver process
spark.executor.memory
spark.executor.memoryOverhead
spark.memory.offHeap.size
To tune the memory provided to onheap/offheap memory of executor process
spark.dataproc.driver.disk.tier
spark.dataproc.driver.disk.size
To configure premium disk tier and size for driver
spark.dataproc.executor.disk.tier
spark.dataproc.executor.disk.size
To configure premium disk tier and size for executor

Proprietà di esecuzione delle query native

  • spark.dataproc.runtimeEngine=native (obbligatorio): il motore di runtime del carico di lavoro deve essere impostato su native per sostituire il motore di runtime predefinito spark.

  • version (obbligatorio): il workload deve utilizzare la versione del runtime Spark 1.2.26 o versioni successive, 2.2.26 o versioni successive o una versione principale del runtime successiva.

  • Livelli di calcolo Premium (obbligatorio): le proprietà spark.dataproc.spark.driver.compute.tier e spark.dataproc.executor.compute.tier devono essere impostate su premium.

  • Livelli di dischi Premium (facoltativo e consigliato): i livelli di dischi Premium utilizzano la modalità colonnare anziché la modalità di ordinamento basata su riga per offrire prestazioni migliori. Per un throughput I/O migliore per la funzionalità di organizzazione casuale, utilizza i livelli di disco premium per il driver e l'executor con una dimensione del disco sufficientemente grande per contenere i file di organizzazione casuale.

  • Memoria (facoltativa): se hai configurato il motore di esecuzione delle query native senza configurare sia la memoria off-heap (spark.memory.offHeap.size) sia la memoria on-heap (spark.executor.memory), il motore di esecuzione delle query native prende una quantità predefinita di 4g memoria e la suddivide in un rapporto 6:1 tra memoria off-heap e memoria on-heap.

    Se decidi di configurare la memoria quando utilizzi l'esecuzione di query native, puoi farlo in uno dei seguenti modi:

    • Configura solo la memoria off-heap (spark.memory.offHeap.size) con un valore specificato. L'esecuzione di query native utilizza il valore specificato come memoria off-heap e alloca un ulteriore 1/7th del valore della memoria off-heap come memoria on-heap.

    • Configura sia la memoria on-heap (spark.executor.memory) sia la memoria off-heap (spark.memory.offHeap.size). La quantità allocata alla memoria off-heap deve essere maggiore di quella allocata alla memoria on-heap. Consiglio: alloca la memoria off-heap alla memoria on-heap in un rapporto di 6:1.

    Valori di esempio:

    Impostazioni della memoria senza esecuzione di query native Impostazioni di memoria consigliate con l'esecuzione di query native
    spark.executor.memory spark.memory.offHeap.size spark.executor.memory
    7g 6g 1g
    14g 12g 2g
    28g 24g 4G
    56g 48g 8g

Strumento di qualificazione dell'esecuzione di query native

Puoi eseguire lo strumento di idoneità per l'esecuzione di query native di Dataproc,run_qualification_tool.sh, per identificare i carichi di lavoro che possono raggiungere tempi di esecuzione più rapidi con l'esecuzione di query native. Lo strumento analizza i file di eventi Spark generati dalle applicazioni di carichi di lavoro batch e stima i potenziali risparmi di tempo di esecuzione che ogni applicazione di carico di lavoro può ottenere con l'esecuzione di query native.

Esegui lo strumento di qualificazione

Esegui i seguenti passaggi per eseguire lo strumento sui file di eventi dei carichi di lavoro batch Dataproc Serverless.

1.Copia run_qualification_tool.sh in una directory locale contenente i file di eventi Spark da analizzare.

  1. Esegui lo strumento di qualifica per analizzare un file di eventi o un insieme di file di eventi contenuti nella directory dello script.

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

    Flag e valori:

    -f (obbligatorio): consulta la sezione Posizione dei file di eventi Spark per individuare i file di eventi del carico di lavoro Spark.

    • EVENT_FILE_PATH (obbligatorio, a meno che non sia specificato EVENT_FILE_NAME): percorso del file di eventi da analizzare. Se non viene fornito, si presume che il percorso del file dell'evento sia la directory corrente.

    • EVENT_FILE_NAME (obbligatorio, a meno che non sia specificato EVENT_FILE_PATH): nome del file di eventi da analizzare. Se non viene fornito, vengono analizzati i file di eventi trovati in modo ricorsivo in EVENT_FILE_PATH.

    -o(facoltativo): se non viene fornito, lo strumento crea o utilizza una directory output esistente nella directory corrente per posizionare i file di output.

    • CUSTOM_OUTPUT_DIRECTORY_PATH: percorso della directory di output dei file di output.

    -k (facoltativo):

    -x (facoltativo):

    • MEMORY_ALLOCATED: la memoria in gigabyte da allocare allo strumento. Per impostazione predefinita, lo strumento utilizza l'80% della memoria libera disponibile nel sistema e tutti i core della macchina disponibili.

    -t(facoltativo):

    • PARALLEL_THREADS_TO_RUN: N=numero di thread paralleli da eseguire per lo strumento. Per impostazione predefinita, lo strumento esegue tutti i core.

    Esempio di utilizzo del comando:

    ./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 questo esempio, lo strumento di qualificazione attraversa la directory gs://dataproc-temp-us-east1-9779/spark-job-history e analizza i file di eventi Spark contenuti in queste directory e nelle relative sottodirectory. L'accesso alla directory è fornito da /keys/event-file-key. Lo strumento utilizza 34 GB memory per l'esecuzione ed esegue 5 thread paralleli.

File di output dello strumento di qualifica

Al termine dell'analisi, lo strumento di qualificazione inserisce i seguenti file di output in una directory perfboost-output nella directory corrente:

  • AppsRecommendedForBoost.tsv: un elenco separato da tabule di applicazioni consigliate per l'utilizzo con l'esecuzione di query native.

  • UnsupportedOperators.tsv: un elenco separato da tabule di applicazioni non consigliate per l'utilizzo con l'esecuzione di query native.

File di output AppsRecommendedForBoost.tsv

La seguente tabella mostra i contenuti di un file di output AppsRecommendedForBoost.tsv di esempio. Contiene una riga per ogni applicazione analizzata.

File di output AppsRecommendedForBoost.tsv di esempio:

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

Descrizioni delle colonne:

  • applicationId: il ApplicationID dell'applicazione Spark. Utilizzalo per identificare il carico di lavoro batch corrispondente.

  • applicationName: il nome dell'applicazione Spark.

  • rddPercentage: la percentuale di operazioni RDD nell'applicazione. Le operazioni RDD non sono supportate dall'esecuzione di query native.

  • unsupportedSqlPercentage: Percentuale di operazioni SQL non supportate dall'esecuzione di query native.

  • totalTaskTime: tempo cumulativo di tutte le attività eseguite durante l'esecuzione dell'applicazione.

  • supportedTaskTime: il tempo totale dell'attività supportato dall'esecuzione di query native.

Le seguenti colonne forniscono le informazioni importanti per aiutarti a determinare se l'esecuzione di query native può essere utile per il tuo carico di lavoro batch:

  • supportedSqlPercentage: la percentuale di operazioni SQL supportate dall'esecuzione di query native. Maggiore è la percentuale, maggiore è la riduzione del tempo di esecuzione che si può ottenere eseguendo l'applicazione con l'esecuzione di query native.

  • recommendedForBoost: se TRUE, è consigliabile eseguire l'applicazione con l'esecuzione di query native. Se recommendedForBoost è FALSE, non utilizzare l'esecuzione di query native nel carico di lavoro batch.

  • expectedRuntimeReduction: la riduzione percentuale prevista del tempo di esecuzione dell'applicazione quando esegui l'applicazione con l'esecuzione di query native.

File di output UnsupportedOperators.tsv.

Il file di output UnsupportedOperators.tsv contiene un elenco di operatori utilizzati nelle applicazioni di carico di lavoro non supportate dall'esecuzione di query native. Ogni riga del file di output elenca un operatore non supportato.

Descrizioni delle colonne:

  • unsupportedOperator: il nome dell'operatore non supportato dall'esecuzione di query native.

  • cumulativeCpuMs: il numero di millisecondi della CPU consumati durante l'esecuzione dell'operatore. Questo valore riflette l'importanza relativa dell'operatore nell'applicazione.

  • count: il numero di volte in cui l'operatore viene utilizzato nell'applicazione.

Esegui lo strumento di qualificazione in più progetti

Questa sezione fornisce istruzioni per eseguire uno script per eseguire lo strumento di qualifica al fine di analizzare i file di eventi Spark per i carichi di lavoro batch di più progetti.

Requisiti e limitazioni degli script:

  • Esegui lo script sulle macchine Linux:
    • La versione Java >=11 deve essere installata come versione Java predefinita.
  • Poiché i log in Cloud Logging hanno un TTL di 30 giorni, i file di eventi Spark da carichi di lavoro batch eseguiti più di 30 giorni fa non possono essere analizzati.

Per eseguire lo strumento di qualificazione nei progetti, svolgi i seguenti passaggi.

  1. Scarica lo script list-batches-and-run-qt.sh e copialo sulla tua macchina locale.

  2. Modificare le autorizzazioni degli script.

    chmod +x list-batches-and-run-qt.sh
    
  3. Prepara un elenco di file di input del progetto da passare allo script per l'analisi. Crea il file di testo aggiungendo una riga nel formato seguente per ogni progetto e regione con i file di eventi Spark dei carichi di lavoro batch da analizzare.

    -r REGION -s START_DATE -e END_DATE -p PROJECT_ID -l LIMIT_MAX_BATCHES -k KEY_PATH
    

    Note:

    -r (obbligatorio):

    • REGION: regione in cui vengono inviati i batch del progetto.

    -s (obbligatorio): formato: yyyy-mm-dd. Puoi aggiungere un segmento di tempo 00:00:00 facoltativo.

    • START_DATE: vengono analizzati solo i carichi di lavoro batch creati dopo la data di inizio. I batch vengono analizzati in ordine decrescente in base alla data di creazione, ovvero i batch più recenti vengono analizzati per primi.

    -e (facoltativo): formato: yyyy-mm-dd. Puoi aggiungere un segmento di tempo 00:00:00 facoltativo.

    • END_DATE: se lo specifichi, vengono analizzati solo i carichi di lavoro batch creati prima o nella data di fine. Se non specificato, vengono analizzati tutti i batch creati dopo il giorno START_DATE. I batch vengono analizzati in ordine decrescente in base alla data di creazione, quindi i batch più recenti vengono analizzati per primi.

    -l (facoltativo):

    • LIMIT_MAX_BATCHES: il numero massimo di batch da analizzare. Puoi utilizzare questa opzione in combinazione con START-DATE e END-DATE per analizzare un numero limitato di batch creati tra le date specificate.

      Se non viene specificato -l, viene analizzata la quantità predefinita di massimo 100 batch.

    -k (facoltativo):

    • KEY_PATH: un percorso locale contenente le chiavi di accesso Cloud Storage per i file di eventi Spark del carico di lavoro.

    Esempio di file di input:

    -r us-central1 -s 2024-08-21 -p project1 -k key1
    -r us-east1 -s 2024-08-21 -e 2024-08-23 -l 50 -p project2 -k key2
    

    Note:

    • Riga 1: verranno analizzati fino ai 100 file di eventi Spark (valore predefinito) più recenti in project1 nella regione us-central1 con un timestamp di creazione successivo al giorno 2024-08-21 00:00:00 AM. key1 consente l'accesso ai file in Cloud Storage.

    • Riga 2: verranno analizzati fino ai 50 file di eventi Spark più recenti in project2 nella regione us-eastl1 con un'ora di creazione successiva al giorno 2024-08-21 00:00:00 AM e precedente o uguale al giorno 23-08-2024 alle ore 23:59:59. key2 consente di accedere ai file di eventi in Cloud Storage.

  4. Esegui lo script list-batches-and-run-qt.sh. L'analisi viene visualizzata nei file AppsRecommendedForBoost.tsv e UnsupportedOperators.tsv.

    ./list-batches-and-run-qt.sh PROJECT_INPUT_FILE_LIST \
        -x MEMORY_ALLOCATED \
        -o CUSTOM_OUTPUT_DIRECTORY_PATH \
        -t PARALLEL_THREADS_TO_RUN
    

    Note:

Posizioni dei file di eventi Spark

Per trovare i file di eventi Spark per i carichi di lavoro batch Dataproc Serverless, svolgi uno dei seguenti passaggi:

  1. In Cloud Storage, individua il file spark.eventLog.dir per il carico di lavoro, quindi scaricalo.

    1. Se non riesci a trovare spark.eventLog.dir, imposta spark.eventLog.dir su una posizione Cloud Storage, quindi esegui di nuovo il carico di lavoro e scarica spark.eventLog.dir.
  2. Se hai configurato il server di cronologia Spark per il job batch:

    1. Vai al server di cronologia Spark, quindi seleziona il carico di lavoro.
    2. Fai clic su Scarica nella colonna Log eventi.

Quando utilizzare l'esecuzione di query native

Utilizza l'esecuzione di query native nei seguenti scenari:

API DataFrame di Spark e query Spark SQL che leggono i dati dai file Parquet e ORC.
Carichi di lavoro consigliati dallo strumento di idoneità all'esecuzione di query native.

Quando non utilizzare l'esecuzione di query native

Non utilizzare l'esecuzione di query native nei seguenti scenari, poiché potrebbe non essere possibile ridurre il tempo di esecuzione del carico di lavoro e potrebbero verificarsi errori o regressioni:

Limitazioni

L'abilitazione dell'esecuzione di query native nei seguenti scenari può generare eccezioni, provocare incompatibilità con Spark o causare il fallback del carico di lavoro all'engine Spark predefinito.

Valori di riserva

L'esecuzione di query native nell'esecuzione successiva può comportare il fallback del carico di lavoro al motore di esecuzione Spark, con conseguente regressione o errore.

  • ANSI: se la modalità ANSI è attiva, l'esecuzione passa a Spark.

  • Modalità sensibile alle maiuscole: l'esecuzione di query native supporta solo la modalità predefinita di Spark insensibile alle maiuscole. Se la modalità sensibile alle maiuscole è attivata, possono verificarsi risultati errati.

  • Scansione delle tabelle partizionate: l'esecuzione di query native supporta la scansione delle tabella partizionata solo quando il percorso contiene le informazioni sulla partizione, altrimenti il carico di lavoro ricorre al motore di esecuzione Spark.

Comportamento incompatibile

L'utilizzo dell'esecuzione di query native può comportare un comportamento incompatibile o risultati errati nei seguenti casi:

  • Funzioni JSON: l'esecuzione di query native supporta le stringhe racchiuse tra virgolette doppie, non tra virgolette singole. I risultati non sono corretti con le virgolette singole. L'utilizzo di "*" nel percorso con la funzione get_json_object restituisce NULL.

  • Configurazione di lettura di Parquet:

    • L'esecuzione di query native tratta spark.files.ignoreCorruptFiles come impostato sul valore predefinito false, anche se impostato su true.
    • L'esecuzione di query native ignora spark.sql.parquet.datetimeRebaseModeInRead e restituisce solo i contenuti del file Parquet. Le differenze tra il calendario ibrido precedente (giuliano-gregoriano) e il calendario gregoriano prolettico non vengono prese in considerazione. I risultati di Spark possono variare.
  • NaN: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando si utilizza NaN in un confronto numerico.

  • Lettura colonnare di Spark: può verificarsi un errore irreversibile perché il vettore colonnare di Spark non è compatibile con l'esecuzione di query native.

  • Spill: quando le partizioni di smistamento sono impostate su un numero elevato, la funzionalità di smistamento sul disco può attivare un OutOfMemoryException. In questo caso, ridurre il numero di partizioni può eliminare questa eccezione.