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à.
Gli errori nelle applicazioni Spark derivano in genere da script Spark inefficienti, esecuzione in memoria di trasformazioni su larga scala e anomalie del set di dati. Esistono molte ragioni che possono causare problemi di memoria del driver o dell'executor, ad esempio una differenza di dati, un elenco di troppi oggetti o una riproduzione casuale di dati di grandi dimensioni. Questi spesso si verificano nell'elaborazione di enormi quantità di dati backlog con Spark.
AWS Glue consente di risolvere i problemi di OOM e semplificare l'elaborazione ETL con il partizionamento del carico di lavoro. Quando il partizionamento del carico di lavoro è abilitato, ogni esecuzione del processo ETL seleziona solo i dati non elaborati, con il limite superiore impostato sulla dimensione del set di dati o sul numero di file da elaborare nell'esecuzione del processo. Le future esecuzioni dei processi elaboreranno i dati rimanenti. Ad esempio, se sono presenti 1000 file da elaborare, è possibile impostare il numero di file su 500 e dividerli in due esecuzioni del processo.
Il partizionamento del carico di lavoro è supportato solo per le origini dati di Amazon S3.
Abilitazione del partizionamento del carico di lavoro
È possibile abilitare l'esecuzione delimitata impostando manualmente le opzioni nello script o aggiungendo le proprietà della tabella catalogo.
Per abilitare il partizionamento del carico di lavoro con esecuzione delimitata nello script:
-
Per evitare di rielaborare i dati, abilitare i segnalibri di processo nel nuovo processo o nel processo esistente. Per ulteriori informazioni, consulta Monitoraggio dei dati elaborati mediante segnalibri di processo.
-
Modifica lo script e imposta il limite limitato nelle opzioni aggiuntive del AWS Glue
getSource
API. Devi inoltre impostare il contesto di trasformazione per il segnalibro di processo affinché memorizzi l'elementostate
. Ad esempio:Python
glueContext.create_dynamic_frame.from_catalog( database = "database", table_name = "table_name", redshift_tmp_dir = "", transformation_ctx = "datasource0", additional_options = { "boundedFiles" : "500", # need to be string # "boundedSize" : "1000000000" unit is byte } )
Scala
val datasource0 = glueContext.getCatalogSource( database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions( Map("boundedFiles" -> "500") // need to be string //"boundedSize" -> "1000000000" unit is byte ) ).getDynamicFrame()
val connectionOptions = JsonOptions( Map("paths" -> List(baseLocation), "boundedFiles" -> "30") ) val source = glueContext.getSource("s3", connectionOptions, "datasource0", "")
Per abilitare il partizionamento del carico di lavoro con esecuzione delimitata nella tabella del catalogo dati:
-
Imposta le coppie di chiave-valore nel campo
parameters
della struttura della tabella nel catalogo dati. Per ulteriori informazioni, consulta Visualizzazione e modifica dei dettagli tabella. -
Imposta il limite superiore per la dimensione del set di dati o il numero di file elaborati:
Imposta
boundedSize
alla dimensione target del set di dati in byte. L'esecuzione del processo si interromperà dopo aver raggiunto la dimensione target dalla tabella.Imposta
boundedFiles
al numero target dei file. L'esecuzione del processo si interromperà dopo aver elaborato il numero target dei file.
Nota
Devi impostare solo uno tra
boundedSize
eboundedFiles
, in quanto è supportato un solo limite.
Configurare un AWS Glue trigger per eseguire automaticamente il lavoro
Dopo aver abilitato l'esecuzione limitata, è possibile impostare un AWS Glue trigger per eseguire automaticamente il lavoro e caricare i dati in modo incrementale in esecuzioni sequenziali. Vai al AWS Glue Consola e crea un trigger, imposta l'orario di pianificazione e collegalo al tuo lavoro. Attiverà automaticamente la successiva esecuzione del processo ed elaborerà il nuovo batch di dati.
Puoi anche usare AWS Glue flussi di lavoro per orchestrare più lavori per elaborare dati da diverse partizioni in parallelo. Per ulteriori informazioni, consulta AWS GlueTrigger e AWS Glue Flussi di lavoro.
Per ulteriori informazioni sui casi d'uso e sulle opzioni, consulta il blog Ottimizzazione delle applicazioni Spark con il partizionamento del carico di lavoro in AWS Glue