Ottimizzazione automatica dei workload Spark

Questo documento fornisce informazioni sull'ottimizzazione automatica dei carichi di lavoro Spark. L'ottimizzazione di un workload Spark per prestazioni e resilienza può essere difficile a causa del numero di opzioni di configurazione di Spark e della difficoltà di valutare l'impatto di queste opzioni su un workload.L'ottimizzazione automatica di Serverless for Apache Spark offre un'alternativa alla configurazione manuale del workload applicando automaticamente le impostazioni di configurazione di Spark a un workload Spark ricorrente in base alle best practice di ottimizzazione di Spark e a un'analisi delle esecuzioni del workload. Google Cloud

Registrati per Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark

Per registrarti e accedere alla release di anteprima dell'ottimizzazione automatica di Serverless per Apache Spark descritta in questa pagina, compila e invia il modulo di registrazione Richiesta di accesso all'anteprima di Dataproc. Una volta approvato il modulo, i progetti elencati al suo interno hanno accesso alle funzionalità di anteprima.

Vantaggi

Google Cloud L'ottimizzazione automatica di Serverless per Apache Spark può offrire i seguenti vantaggi:

  • Prestazioni migliorate: ottimizzazione per aumentare le prestazioni
  • Ottimizzazione più rapida: configurazione automatica per evitare test di configurazione manuale che richiedono molto tempo
  • Maggiore resilienza: allocazione automatica della memoria per evitare errori correlati alla memoria

Limitazioni

Google Cloud L'ottimizzazione automatica di Serverless per Apache Spark presenta le seguenti limitazioni:

  • L'ottimizzazione automatica viene calcolata e applicata alla seconda e alle successive esecuzioni di un carico di lavoro. La prima esecuzione di un workload ricorrente non viene ottimizzata automaticamente perché Google Cloud l'ottimizzazione automatica di Serverless for Apache Spark utilizza la cronologia dei workload per l'ottimizzazione.
  • Il downgrade della memoria non è supportato.
  • L'ottimizzazione automatica non viene applicata retroattivamente ai workload in esecuzione, ma solo alle coorti di workload inviate di recente.

Coorti di ottimizzazione automatica

L'ottimizzazione automatica viene applicata alle esecuzioni ricorrenti di un carico di lavoro batch, chiamate coorti. Il nome della coorte specificato quando invii un carico di lavoro lo identifica come una delle esecuzioni successive del carico di lavoro ricorrente. Ti consigliamo di utilizzare nomi di coorte che descrivano il tipo di workload o che aiutino a identificare le esecuzioni di un workload come parte di un workload ricorrente. Ad esempio, specifica daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliera.

Scenari di ottimizzazione automatica

Applichi Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark al tuo carico di lavoro selezionando uno o più dei seguenti scenari di ottimizzazione automatica:

  • MEMORY: Regola automaticamente l'allocazione della memoria Spark per prevedere ed evitare potenziali errori di esaurimento della memoria del workload. Correggi un workload precedente non riuscito a causa di un errore di esaurimento della memoria.
  • SCALING: Regola automaticamente le impostazioni di configurazione della scalabilità automatica di Spark.
  • BROADCAST_HASH_JOIN: ottimizza automaticamente le impostazioni di configurazione di Spark per ottimizzare le prestazioni di SQL broadcast join.

Prezzi

Google Cloud L'ottimizzazione automatica di Serverless per Apache Spark è offerta durante l'anteprima senza costi aggiuntivi. Vengono applicati i prezzi standard di Google Cloud Serverless per Apache Spark.

Disponibilità a livello di regione

Puoi utilizzare la funzionalità di ottimizzazione automatica di Google Cloud Serverless per Apache Spark con i batch inviati nelle regioni Compute Engine disponibili.

Utilizza Google Cloud Serverless per l'ottimizzazione automatica di Apache Spark

Puoi attivare l'ottimizzazione automatica di Google Cloud Serverless per Apache Spark su un carico di lavoro utilizzando la console Google Cloud , Google Cloud CLI o l'API Dataproc.

Console

Per attivare Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Batch di Dataproc.

    Vai alla pagina Batch di Dataproc

  2. Per creare un workload batch, fai clic su Crea.

  3. Nella sezione Contenitore, compila i seguenti campi per il carico di lavoro Spark:

    • Coorte:il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliera.

    • Scenari di ottimizzazione automatica:uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il workload, ad esempio BROADCAST_HASH_JOIN, MEMORY e SCALING. Puoi modificare la selezione dello scenario a ogni invio di coorte batch.

  4. Compila le altre sezioni della pagina Crea batch in base alle tue esigenze, poi fai clic su Invia. Per saperne di più su questi campi, consulta Inviare un workload batch.

gcloud

Per attivare Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, esegui il seguente comando gcloud CLI gcloud dataproc batches submit localmente in una finestra del terminale o in Cloud Shell.

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    --autotuning-scenarios=SCENARIOS \
    other arguments ...

Sostituisci quanto segue:

  • COMMAND: il tipo di workload Spark, ad esempio Spark, PySpark, Spark-Sql o Spark-R.
  • REGION: la regione in cui verrà eseguito il tuo workload.
  • COHORT: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliera.

  • SCENARIOS: uno o più scenari di ottimizzazione automatica separati da virgole da utilizzare per ottimizzare il carico di lavoro, ad esempio --autotuning-scenarios=MEMORY,SCALING. Puoi modificare l'elenco degli scenari a ogni invio di coorte batch.

API

Per attivare Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, invia una richiesta batches.create che includa i seguenti campi:

  • RuntimeConfig.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliera.
  • AutotuningConfig.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY e SCALING. Puoi modificare l'elenco degli scenari a ogni invio di coorte batch.

Esempio:

...
runtimeConfig:
  cohort: daily_sales_aggregation
  autotuningConfig:
    scenarios:
    - BROADCAST_HASH_JOIN
    - MEMORY
    - SCALING
...

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Serverless per Apache Spark Java.

Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Per attivare Google Cloud l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, chiama BatchControllerClient.createBatch con una CreateBatchRequest che includa i seguenti campi:

  • Batch.RuntimeConfig.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY, SCALING. Puoi modificare l'elenco degli scenari a ogni invio di coorte batch. Per l'elenco completo degli scenari, consulta la documentazione Javadoc di AutotuningConfig.Scenario.

Esempio:

...
Batch batch =
  Batch.newBuilder()
    .setRuntimeConfig(
      RuntimeConfig.newBuilder()
        .setCohort("daily_sales_aggregation")
        .setAutotuningConfig(
          AutotuningConfig.newBuilder()
            .addScenarios(Scenario.SCALING))
    ...
  .build();

batchControllerClient.createBatch(
    CreateBatchRequest.newBuilder()
        .setParent(parent)
        .setBatchId(batchId)
        .setBatch(batch)
        .build());
...

Per utilizzare l'API, devi utilizzare la versione 4.43.0 o successive della libreria client google-cloud-dataproc. Puoi utilizzare una delle seguenti configurazioni per aggiungere la libreria al tuo progetto.

Maven

<dependencies>
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-dataproc</artifactId>
   <version>4.43.0</version>
 </dependency>
</dependencies>

Gradle

implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'

SBT

libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Serverless per Apache Spark Python.

Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Per attivare la regolazione automatica di Google Cloud Serverless per Apache Spark a ogni invio di un carico di lavoro batch ricorrente, chiama BatchControllerClient.create_batch con un Batch che include i seguenti campi:

  • batch.runtime_config.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY,SCALING. Puoi modificare l'elenco degli scenari con ogni invio di coorte batch. Per l'elenco completo degli scenari, consulta il riferimento Scenario.

Esempio:

# Create a client
client = dataproc_v1.BatchControllerClient()

# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
    Scenario.SCALING
]

request = dataproc_v1.CreateBatchRequest(
    parent="parent_value",
    batch=batch,
)

# Make the request
operation = client.create_batch(request=request)

Per utilizzare l'API, devi utilizzare la versione 5.10.1 o successive della libreria client google-cloud-dataproc. Per aggiungerlo al tuo progetto, puoi utilizzare il seguente requisito:

google-cloud-dataproc>=5.10.1

Airflow

Per attivare la regolazione automatica di Google Cloud Serverless per Apache Spark a ogni invio di un carico di lavoro batch ricorrente, chiama BatchControllerClient.create_batch con un Batch che include i seguenti campi:

  • batch.runtime_config.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY,SCALING. Puoi modificare l'elenco degli scenari con ogni invio di coorte batch. Per l'elenco completo degli scenari, consulta il riferimento Scenario.

Esempio:

create_batch = DataprocCreateBatchOperator(
    task_id="batch_create",
    batch={
        "pyspark_batch": {
            "main_python_file_uri": PYTHON_FILE_LOCATION,
        },
        "environment_config": {
            "peripherals_config": {
                "spark_history_server_config": {
                    "dataproc_cluster": PHS_CLUSTER_PATH,
                },
            },
        },
        "runtime_config": {
            "cohort": "daily_sales_aggregation",
            "autotuning_config": {
                "scenarios": [
                    Scenario.SCALING,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

Per utilizzare l'API, devi utilizzare la versione 5.10.1 o successive della libreria client google-cloud-dataproc. Puoi utilizzare il seguente requisito dell'ambiente Airflow:

google-cloud-dataproc>=5.10.1

Per aggiornare il pacchetto in Cloud Composer, vedi Installare le dipendenze Python per Cloud Composer .

Visualizzare le modifiche alla regolazione automatica

Per visualizzare le modifiche alla messa a punto automatica di Serverless per Apache Spark a un workload batch, esegui il comando gcloud dataproc batches describe. Google Cloud

Esempio: l'output di gcloud dataproc batches describe è simile al seguente:

...
runtimeInfo:
   propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties
      spark.driver.memory:
        annotation: Driver OOM was detected
        value: 11520m
      spark.driver.memoryOverhead:
        annotation: Driver OOM was detected
        value: 4608m
    # Old overwritten properties.
    userProperties
...

Puoi visualizzare le ultime modifiche di ottimizzazione automatica applicate a un workload in esecuzione, completato o non riuscito nella pagina Dettagli batch della console Google Cloud , nella scheda Analizza.

Pannello di analisi della sintonizzazione automatica.