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
Nella console Google Cloud:
- Vai a Dataproc Batches.
- Fai clic su Crea per aprire la pagina Crea batch.
Seleziona e compila i seguenti campi per configurare il batch per l'esecuzione di query native:
- Contenitore:
- Versione runtime:seleziona
1.2
,2.2
o, se disponibile, un numero di versionemajor.minor
superiore. Consulta Versioni del runtime Dataproc Serverless per Spark supportate.
- Versione runtime:seleziona
- Configurazione a livello di esecutore e driver:
- Seleziona
Premium
per tutti i livelli (Livello di calcolo del driver, Livello di calcolo dell'esecuzione).
- Seleziona
- Proprietà: inserisci le seguenti coppie
Key
(nome proprietà) eValue
per le seguenti proprietà di esecuzione di query native:Chiave Valore spark.dataproc.runtimeEngine
indigeno/nativo/locale
- Contenitore:
Compila, seleziona o conferma altre impostazioni dei carichi di lavoro batch. Vedi Inviare un carico di lavoro batch Spark.
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:
- PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono elencati nella sezione Informazioni sul progetto della Dashboard della console Google Cloud.
- REGION: una regione Compute Engine disponibile per eseguire il carico di lavoro.
- VERSION: specifica
1.2
,2.2
o, se disponibile, un numero di versionemajor.minor
superiore. Consulta Versioni del runtime Spark di Dataproc Serverless supportate. - OTHER_FLAGS_AS_NEEDED: consulta Inviare un carico di lavoro batch Spark.
API
Imposta i seguenti campi dell'API Dataproc per configurare il workload batch per l'esecuzione di query native:
- RuntimeConfig.version:
specifica
1.2
,2.2
o, se disponibile, un numero di versionemajor.minor
superiore. Consulta Versioni del runtime Dataproc Serverless per Spark supportate. RuntimeConfig.properties: imposta le seguenti proprietà di esecuzione di query native:
"spark.dataproc.runtimeEngine":"native" "spark.dataproc.driver.compute.tier":"premium" "spark.dataproc.executor.compute".tier:"premium"
Note:
- Consulta Inviare un carico di lavoro batch Spark per impostare altri campi dell'API del carico di lavoro batch.
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 sunative
per sostituire il motore di runtime predefinitospark
.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
espark.dataproc.executor.compute.tier
devono essere impostate supremium
.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 di4g
memoria e la suddivide in un rapporto6: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 ulteriore1/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.
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 directoryoutput
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):- SERVICE_ACCOUNT_KEY: la chiave account di servizio in formato JSON, se necessaria per accedere a EVENT_FILE_PATH.
-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 utilizza34 GB memory
per l'esecuzione ed esegue5
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
: ilApplicationID
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
: seTRUE
, è consigliabile eseguire l'applicazione con l'esecuzione di query native. SerecommendedForBoost
è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.
- La versione Java
- 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.
Scarica lo script
list-batches-and-run-qt.sh
e copialo sulla tua macchina locale.Modificare le autorizzazioni degli script.
chmod +x list-batches-and-run-qt.sh
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 tempo00: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 tempo00: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 regioneus-central1
con un timestamp di creazione successivo al giorno2024-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 regioneus-eastl1
con un'ora di creazione successiva al giorno2024-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.
Esegui lo script
list-batches-and-run-qt.sh
. L'analisi viene visualizzata nei fileAppsRecommendedForBoost.tsv
eUnsupportedOperators.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:
PROJECT_INPUT_FILE_LIST: consulta le istruzioni riportate al punto 3 della sezione.
-x
,-o
e-t
: consulta Eseguire lo strumento di qualifica.
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:
In Cloud Storage, individua il file
spark.eventLog.dir
per il carico di lavoro, quindi scaricalo.- Se non riesci a trovare
spark.eventLog.dir
, impostaspark.eventLog.dir
su una posizione Cloud Storage, quindi esegui di nuovo il carico di lavoro e scaricaspark.eventLog.dir
.
- Se non riesci a trovare
Se hai configurato il server di cronologia Spark per il job batch:
- Vai al server di cronologia Spark, quindi seleziona il carico di lavoro.
- 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:
- Workload non consigliati dallo strumento di certificazione dell'esecuzione di query native.
- Carichi di lavoro Spark RDD, UDF e ML
- Carichi di lavoro di scrittura
- Formati file diversi da Parquet e ORC
- Input dei seguenti tipi di dati:
Timestamp, TinyInt, Byte, Struct, Array, Map
: ORC e ParquetVarChar, Char
: ORC- Query contenenti espressioni regolari
- Carichi di lavoro che utilizzano un bucket con pagamenti a carico del richiedente
- Impostazioni di configurazione di Cloud Storage non predefinite. L'esecuzione di query native utilizza molte impostazioni predefinite anche se sostituite.
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
restituisceNULL
.Configurazione di lettura di Parquet:
- L'esecuzione di query native tratta
spark.files.ignoreCorruptFiles
come impostato sul valore predefinitofalse
, anche se impostato sutrue
. - 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.
- L'esecuzione di query native tratta
NaN
: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando si utilizzaNaN
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.