Partizionamento del carico di lavoro con esecuzione delimitata - AWS Glue

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à.

Partizionamento del carico di lavoro con esecuzione delimitata

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 eccezione di memoria 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:
  1. 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.

  2. Modifica lo script e imposta il limite nelle opzioni aggiuntive nella finestra API getSource AWS Glue. Devi inoltre impostare il contesto di trasformazione per il segnalibro di processo affinché memorizzi l'elemento state. 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:
  1. 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.

  2. Imposta il limite superiore per la dimensione del set di dati o il numero di file elaborati:

    • ImpostaboundedSize 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 e boundedFiles, in quanto è supportato un solo limite.

Configurazione di un trigger AWS Glue per l'esecuzione automatica del processo

Una volta abilitata l'esecuzione delimitata, è possibile impostare un trigger AWS Glue per eseguire automaticamente il processo e caricare in modo incrementale i dati in esecuzioni sequenziali. Accedi alla console AWS Glue e crea un trigger, imposta l'orario di pianificazione e allegalo al tuo lavoro. Attiverà automaticamente la successiva esecuzione del processo ed elaborerà il nuovo batch di dati.

È possibile utilizzare i flussi di lavoro AWS Glue anche per orchestrare più processi allo scopo di elaborare dati da partizioni diverse in parallelo. Per ulteriori informazioni, consulta Trigger AWS Glue e Flussi di lavoro AWS Glue.

Per ulteriori informazioni sui casi d'uso e sulle opzioni, consulta il blog Optimizing Spark applications with workload partitioning in AWS Glue.