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 StartJobRun
APIper eseguire un job Spark, è possibile specificare i seguenti parametri.
Parametri obbligatori
Ruolo di runtime del job Spark
executionRoleArn
Utilizzalo 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
jobDriver
Utilizzato 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'argomentoSparkSubmitParameters
using the--class
.
Per ulteriori informazioni, consulta Avvio delle applicazioni con spark-submit
La configurazione di Spark sovrascrive il parametro
Utilizzato configurationOverrides
per 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. JSONNota
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.0spark-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
--conf
argomento. -
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, Per 6.9.0 e versioni precedenti, |
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. |
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. |
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( |
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( |
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
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-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 StartJobRun
API. JAR
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-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" } }'