Offerte di lavoro Spark - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Offerte di lavoro Spark

È possibile eseguire i job Spark su un'applicazione con il type parametro impostato su. SPARK I lavori devono essere compatibili con la versione Spark compatibile con la versione di EMR rilascio di Amazon. Ad esempio, quando esegui lavori con Amazon EMR release 6.6.0, il tuo lavoro deve essere compatibile con Apache Spark 3.2.0. Per informazioni sulle versioni delle applicazioni per ogni versione, consulta. Versioni di rilascio di Amazon EMR Serverless

Parametri del job Spark

Quando si utilizza il StartJobRunAPIper eseguire un job Spark, è possibile specificare i seguenti parametri.

Ruolo di runtime del job Spark

executionRoleArnUtilizzalo ARN per specificare il IAM ruolo utilizzato dall'applicazione per eseguire i job Spark. Questo ruolo deve contenere le seguenti autorizzazioni:

  • Leggi dai bucket S3 o da altre fonti di dati in cui risiedono i tuoi dati

  • Leggi i bucket o i prefissi S3 in cui risiede lo script o il file PySpark JAR

  • Scrivi nei bucket S3 dove intendi scrivere l'output finale

  • Scrivi i log in un bucket o prefisso S3 che specifica S3MonitoringConfiguration

  • Accesso alle KMS chiavi se utilizzi KMS le chiavi per crittografare i dati nel tuo bucket S3

  • Accesso al AWS Glue Data Catalog se usi Spark SQL

Se il tuo job Spark legge o scrive dati da o verso altre fonti di dati, specifica le autorizzazioni appropriate per questo ruolo. IAM Se non fornisci queste autorizzazioni al IAM ruolo, il lavoro potrebbe fallire. Per ulteriori informazioni, consulta Ruoli Job Runtime per Amazon EMR Serverless e Archiviazione dei log.

Parametro Spark Job Driver

jobDriverUtilizzato per fornire input al lavoro. Il parametro job driver accetta solo un valore per il tipo di processo che si desidera eseguire. Per un job Spark, il valore del parametro èsparkSubmit. Puoi usare questo tipo di lavoro per eseguire Scala, Java PySpark, SparkR e qualsiasi altro lavoro supportato tramite Spark submit. I job Spark hanno i seguenti parametri:

  • sparkSubmitParameters— Questi sono i parametri Spark aggiuntivi che desideri inviare al job. Utilizzate questo parametro per sovrascrivere le proprietà predefinite di Spark, come la memoria del driver o il numero di esecutori, come quelle definite negli argomenti or. --conf --class

  • entryPointArguments— Questa è una serie di argomenti che vuoi passare al tuo file principale JAR o Python. Dovrai gestire la lettura di questi parametri con il tuo codice di entrypoint. Separare ogni argomento dell'array con una virgola.

  • entryPoint— Questo è il riferimento in Amazon S3 al file principale o JAR Python che desideri eseguire. Se stai usando Scala o JavaJAR, specifica la classe di ingresso principale nell'argomento SparkSubmitParameters using the--class.

Per ulteriori informazioni, consulta Avvio delle applicazioni con spark-submit.

La configurazione di Spark sovrascrive il parametro

Utilizzato configurationOverridesper sovrascrivere le proprietà di configurazione a livello di monitoraggio e a livello di applicazione. Questo parametro accetta un JSON oggetto con i due campi seguenti:

  • monitoringConfiguration‐ Utilizza questo campo per specificare Amazon S3 URL (s3MonitoringConfiguration) in cui desideri che il job EMR Serverless memorizzi i log del tuo lavoro Spark. Assicurati di aver creato questo bucket con lo stesso Account AWS che ospita l'applicazione e nello stesso in Regione AWS cui è in esecuzione il processo.

  • applicationConfiguration— Per sovrascrivere le configurazioni predefinite per le applicazioni, puoi fornire un oggetto di configurazione in questo campo. È possibile utilizzare una sintassi abbreviata per fornire la configurazione oppure fare riferimento all'oggetto di configurazione in un file. JSON Gli oggetti di configurazione sono composti da una classificazione, proprietà e configurazioni nidificate opzionali. Le proprietà sono costituite dalle impostazioni che desideri ignorare in un dato file. È possibile specificare più classificazioni per più applicazioni in un unico oggetto. JSON

    Nota

    Le classificazioni di configurazione disponibili variano in base alla specifica versione EMR Serverless. Ad esempio, le classificazioni per Log4j personalizzate spark-executor-log4j2 sono disponibili solo con le versioni 6.8.0 spark-driver-log4j2 e successive.

Se usi la stessa configurazione in un'applicazione override e nei parametri di invio di Spark, i parametri di invio di Spark hanno la priorità. Le configurazioni hanno la priorità seguente, dalla più alta alla più bassa:

  • Configurazione fornita da EMR Serverless al momento della creazione. SparkSession

  • Configurazione fornita come parte dell'sparkSubmitParameters--confargomento.

  • La configurazione fornita come parte dell'applicazione ha la precedenza quando si avvia un lavoro.

  • La configurazione fornita come parte della configurazione runtimeConfiguration quando si crea un'applicazione.

  • Configurazioni ottimizzate EMR utilizzate da Amazon per il rilascio.

  • Configurazioni open source predefinite per l'applicazione.

Per ulteriori informazioni sulla dichiarazione delle configurazioni a livello di applicazione e sulla sovrascrittura delle configurazioni durante l'esecuzione del processo, consulta. Configurazione predefinita dell'applicazione per Serverless EMR

Ottimizzazione dinamica dell'allocazione delle risorse Spark

Utilizzalo dynamicAllocationOptimization per ottimizzare l'utilizzo delle risorse in modalità EMR Serverless. L'impostazione di questa proprietà true nella classificazione della configurazione di Spark indica a EMR Serverless di ottimizzare l'allocazione delle risorse degli esecutori per allineare meglio la velocità con cui Spark richiede e annulla gli esecutori con la velocità con cui Serverless crea e rilascia i lavoratori. EMR In questo modo, EMR Serverless riutilizza in modo più ottimale i lavoratori su più fasi, con conseguente riduzione dei costi di esecuzione di lavori con più fasi mantenendo le stesse prestazioni.

Questa proprietà è disponibile in tutte le versioni di EMR rilascio di Amazon.

Di seguito è riportato un esempio di classificazione della configurazione condynamicAllocationOptimization.

[ { "Classification": "spark", "Properties": { "dynamicAllocationOptimization": "true" } } ]

Considerate quanto segue se utilizzate l'ottimizzazione dinamica dell'allocazione:

  • Questa ottimizzazione è disponibile per i job Spark per i quali hai abilitato l'allocazione dinamica delle risorse.

  • Per ottenere la massima efficienza in termini di costi, consigliamo di configurare una scalabilità superiore limitata ai lavoratori utilizzando l'impostazione a livello di job spark.dynamicAllocation.maxExecutors o l'impostazione della capacità massima a livello di applicazione in base al carico di lavoro.

  • Potresti non vedere un miglioramento dei costi nei lavori più semplici. Ad esempio, se il job viene eseguito su un piccolo set di dati o termina l'esecuzione in un'unica fase, Spark potrebbe non aver bisogno di un numero maggiore di executor o di più eventi di scalabilità.

  • I lavori con una sequenza composta da una fase grande, fasi più piccole e poi ancora una fase grande potrebbero subire una regressione nella fase di esecuzione del processo. Poiché EMR Serverless utilizza le risorse in modo più efficiente, potrebbe comportare un minor numero di lavoratori disponibili per fasi più ampie, con conseguente maggiore autonomia.

Proprietà del lavoro Spark

La tabella seguente elenca le proprietà Spark opzionali e i relativi valori predefiniti che puoi sostituire quando invii un lavoro Spark.

Chiave Descrizione Valore predefinito
spark.archives Un elenco di archivi separati da virgole che Spark estrae nella directory di lavoro di ogni esecutore. I tipi di file supportati includono, e. .jar .tar.gz .tgz .zip Per specificare il nome della directory da estrarre, aggiungilo # dopo il nome del file che desideri estrarre. Ad esempio file.zip#directory. NULL
spark.authenticate Opzione che attiva l'autenticazione delle connessioni interne di Spark. TRUE
spark.driver.cores Il numero di core utilizzati dal driver. 4
spark.driver.extraJavaOptions Opzioni Java aggiuntive per il driver Spark. NULL
spark.driver.memory La quantità di memoria utilizzata dal driver. 14 G
spark.dynamicAllocation.enabled Opzione che attiva l'allocazione dinamica delle risorse. Questa opzione aumenta o riduce il numero di esecutori registrati con l'applicazione, in base al carico di lavoro. TRUE
spark.dynamicAllocation.executorIdleTimeout Il periodo di tempo in cui un executor può rimanere inattivo prima che Spark lo rimuova. Questo vale solo se attivi l'allocazione dinamica. anni '60
spark.dynamicAllocation.initialExecutors Il numero iniziale di esecutori da eseguire se si attiva l'allocazione dinamica. 3
spark.dynamicAllocation.maxExecutors Il limite superiore per il numero di esecutori se si attiva l'allocazione dinamica.

Per 6.10.0 e versioni successive, infinity

Per 6.9.0 e versioni precedenti, 100

spark.dynamicAllocation.minExecutors Il limite inferiore per il numero di esecutori se si attiva l'allocazione dinamica. 0
spark.emr-serverless.allocation.batch.size Il numero di contenitori da richiedere in ogni ciclo di allocazione degli esecutori. C'è un intervallo di un secondo tra ogni ciclo di allocazione. 20
spark.emr-serverless.driver.disk Il disco del driver Spark. 20G
spark.emr-serverless.driverEnv.[KEY] Opzione che aggiunge variabili di ambiente al driver Spark. NULL
spark.emr-serverless.executor.disk Il disco Spark Executor. 20G
spark.emr-serverless.memoryOverheadFactor Imposta il sovraccarico di memoria da aggiungere alla memoria del contenitore del driver e dell'executor. 0.1
spark.emr-serverless.driver.disk.type Il tipo di disco collegato al driver Spark. Standard
spark.emr-serverless.executor.disk.type Il tipo di disco collegato agli esecutori Spark. Standard
spark.executor.cores Il numero di core utilizzati da ogni executor. 4
spark.executor.extraJavaOptions Opzioni Java aggiuntive per l'esecutore Spark. NULL
spark.executor.instances Il numero di contenitori Spark Executor da allocare. 3
spark.executor.memory La quantità di memoria utilizzata da ogni executor. 14 G
spark.executorEnv.[KEY] Opzione che aggiunge variabili di ambiente agli esecutori Spark. NULL
spark.files Un elenco di file separati da virgole da inserire nella directory di lavoro di ogni executor. È possibile accedere ai percorsi di questi file nell'esecutore con. SparkFiles.get(fileName) NULL
spark.hadoop.hive.metastore.client.factory.class La classe di implementazione del metastore Hive. NULL
spark.jars Jar aggiuntivi da aggiungere al classpath di runtime del driver e degli executor. NULL
spark.network.crypto.enabled Opzione che attiva la crittografia basata. AES RPC Ciò include il protocollo di autenticazione aggiunto in Spark 2.2.0. FALSE
spark.sql.warehouse.dir La posizione predefinita per i database e le tabelle gestiti. Il valore di $PWD/spark-warehouse
spark.submit.pyFiles Un elenco separato da virgole di .zip.egg, o .py file da inserire nelle app per PYTHONPATH Python. NULL

La tabella seguente elenca i parametri di invio Spark predefiniti.

Chiave Descrizione Valore predefinito
archives Un elenco di archivi separati da virgole che Spark estrae nella directory di lavoro di ogni esecutore. NULL
class La classe principale dell'applicazione (per le app Java e Scala). NULL
conf Una proprietà di configurazione arbitraria di Spark. NULL
driver-cores Il numero di core utilizzati dal driver. 4
driver-memory La quantità di memoria utilizzata dal driver. 14 G
executor-cores Il numero di core utilizzati da ogni esecutore. 4
executor-memory La quantità di memoria utilizzata dall'esecutore. 14 G
files Un elenco di file separati da virgole da inserire nella directory di lavoro di ogni esecutore. È possibile accedere ai percorsi di questi file nell'esecutore con. SparkFiles.get(fileName) NULL
jars Un elenco di jar separati da virgole da includere nei percorsi di classe del driver e dell'executor. NULL
num-executors Il numero di esecutori da avviare. 3
py-files Un elenco separato da virgole di .zip.egg, o .py file da inserire nelle app per PYTHONPATH Python. NULL
verbose Opzione che attiva un output di debug aggiuntivo. NULL

Esempi Spark

L'esempio seguente mostra come usare StartJobRun API per eseguire uno script Python. Per un end-to-end tutorial che utilizza questo esempio, vediGuida introduttiva ad Amazon EMR Serverless. Puoi trovare altri esempi su come eseguire PySpark lavori e aggiungere dipendenze Python nel repository EMRServerless Samples. GitHub

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } }'

L'esempio seguente mostra come utilizzare per eseguire uno Spark StartJobRunAPI. JAR

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1" } }'