Migrazione dei processi AWS Glue per Spark ad AWS Glue versione 3.0 - 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à.

Migrazione dei processi AWS Glue per Spark ad AWS Glue versione 3.0

In questo argomento vengono descritte le modifiche tra AWS Glue versioni 0.9, 1.0, 2.0 e 3.0 per permettere la migrazione delle applicazioni Spark e dei processi ETL ad AWS Glue 3.0.

Per usare questa caratteristica con i processi ETL di AWS Glue, scegli 3.0 per la Glue version durante la creazione dei processi.

Nuove caratteristiche supportate

In questa sezione vengono descritte le nuove caratteristiche e i vantaggi di AWS Glue versione 3.0.

  • Si basa su Apache Spark 3.1.1, che presenta ottimizzazioni da Spark open source e sviluppate da AWS Glue e servizi EMR, come esecuzione adattiva delle query, lettori vettorizzati e shuffle e coalescenza delle partizioni ottimizzati.

  • Driver JDBC aggiornati per tutte le fonti native Glue, inclusi MySQL, Microsoft SQL Server, Oracle, PostgreSQL, MongoDB e le librerie e le dipendenze Spark aggiornate introdotte da Spark 3.1.1.

  • Accesso Amazon S3 ottimizzato con EMRFS aggiornato e committer di output ottimizzati per Amazon S3 abilitati per impostazione predefinita.

  • Accesso ottimizzato al catalogo dati con indici delle partizioni, predicati push down, elenco delle partizioni e client metastore Hive aggiornato.

  • Integrazione con Lake Formation per tabelle di catalogo governate con filtraggio a livello di cella e transazioni data lake.

  • Esperienza dell'interfaccia utente Spark migliorata con Spark 3.1.1 con nuovi parametri di memoria dell'executor e parametri di streaming strutturati di Spark.

  • Ridotta latenza di avvio, con miglioramento dei tempi complessivi di completamento del processo e dell'interattività, similmente ad AWS Glue 2.0.

  • I processi Spark vengono fatturati in incrementi di 1 secondo con una durata minima di fatturazione 10 volte inferiore, da un minimo di 10 minuti a un minimo di 1 minuto, similmente ad AWS Glue 2.0.

Operazioni per eseguire la migrazione ad AWS Glue 3.0

Per i processi esistenti, modifica la Glue version dalla versione precedente a Glue 3.0 nella configurazione del processo.

  • Nella console, scegli Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) in Glue version.

  • In AWS Glue Studio, scegli Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 in Glue version.

  • Nell'API, scegli 3.0 nel parametro GlueVersion nell'API UpdateJob.

Per i nuovi processi, scegli Glue 3.0 al momento della creazione.

  • Nella console, scegli Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) in Glue version.

  • In AWS Glue Studio, scegli Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 in Glue version.

  • Nell'API, scegli 3.0 nel parametro GlueVersion nell'API CreateJob.

Per visualizzare i log eventi Spark di AWS Glue 3.0, avvia un server di cronologia Spark aggiornato per Glue 3.0 utilizzando CloudFormation o Docker.

Elenco di controllo per la migrazione

Esamina questo elenco di controllo per la migrazione.

  • Il processo dipende da HDFS? In caso affermativo, prova a sostituire HDFS con S3.

    • Cerca il percorso del file system che inizia con hdfs:// o / come percorso DFS nel codice di script del processo.

    • Controlla che il file system di default non sia configurato con HDFS. Se è configurato in modo esplicito, è necessario rimuovere la configurazione fs.defaultFS.

    • Controlla se il processo contiene dei parametri dfs.*. Se ne contiene, è necessario verificare che sia corretto disabilitare i parametri.

  • Il processo dipende da YARN? In caso affermativo, verifica l'impatto controllando se il processo contiene i seguenti parametri. Se ne contiene, è necessario verificare che sia corretto disabilitare i parametri.

    • spark.yarn.*

      Ad esempio:

      spark.yarn.executor.memoryOverhead spark.yarn.driver.memoryOverhead spark.yarn.scheduler.reporterThread.maxFailures
    • yarn.*

      Ad esempio:

      yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb
  • Il processo dipende da Spark 2.2.1 o Spark 2.4.3? In caso affermativo, verifica l'impatto controllando se il processo utilizza caratteristiche modificate in Spark 3.1.1.

    • https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23

      Ad esempio la funzione percentile_approx o la funzione SparkSession con SparkSession.builder.getOrCreate() quando esiste un SparkContext.

    • https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24

      Ad esempio la funzione array_contains o la funzione CURRENT_DATE, CURRENT_TIMESTAMP con spark.sql.caseSensitive=true.

  • I file jar aggiuntivi del processo sono in conflitto in Glue 3.0?

    • Da AWS Glue 0.9/1.0: i file jar aggiuntivi forniti in processi esistenti AWS Glue 0.9/1.0 potrebbero causare conflitti di classpath a causa di dipendenze nuove o aggiornate disponibili in Glue 3.0. È possibile evitare conflitti di classpath in AWS Glue 3.0 con il parametro --user-jars-first del processo AWS Glue oppure ombreggiando le dipendenze.

    • Da AWS Glue 2.0 è ancora possibile evitare conflitti di classpath in AWS Glue 3.0 con il parametro --user-jars-first del processo AWS Glue oppure ombreggiando le dipendenze.

  • Il processo dipende da Scala 2.11?

    • AWS Glue 3.0 utilizza Scala 2.12, quindi è necessario ricreare le librerie con Scala 2.12 se dipendono da Scala 2.11.

  • Le librerie Python esterne del processo dipendono da Python 2.7/3.6?

    • Utilizza i parametri --additional-python-modules invece di impostare il file egg/wheel/zip nel percorso della libreria Python.

    • Aggiorna le librerie dipendenti da Python 2.7/3.6 a Python 3.7, poiché Spark 3.1.1 ha rimosso il supporto Python 2.7.

Migrazione da AWS Glue 0.9 ad AWS Glue 3.0

Nota le seguenti modifiche durante la migrazione:

  • AWS Glue 0.9 utilizza Spark 2.2.1 open source e AWS Glue 3.0 utilizza Spark 3.1.1 ottimizzato per EMR.

    • Diverse modifiche di Spark da sole potrebbero richiedere la revisione degli script per garantire che non si faccia riferimento alle caratteristiche rimosse.

    • Ad esempio, Spark 3.1.1 non abilita le FDU non tipizzate per Scala, ma Spark 2.2 le consente.

  • Tutti i processi in AWS Glue 3.0 verranno eseguiti con tempi di avvio significativamente migliorati. I processi Spark verranno fatturati in incrementi di 1 secondo con una durata minima di fatturazione 10 volte inferiore poiché la latenza di avvio passerà da un massimo di 10 minuti a un massimo di 1 minuto.

  • Il comportamento di registrazione è cambiato rispetto ad AWS Glue 2.0.

  • Diversi aggiornamenti delle dipendenze, evidenziati in Appendice A: aggiornamenti notevoli delle dipendenze.

  • Scala viene inoltre aggiornato da 2.11 a 2.12 e Scala 2.12 non è compatibile con Scala 2.11.

  • Python 3.7 è anche la versione di default utilizzata per gli script Python, mentre AWS Glue 0.9 utilizzava solo Python 2.

    • Python 2.7 non è supportato con Spark 3.1.1.

    • È disponibile un nuovo meccanismo di installazione di moduli Python aggiuntivi.

  • AWS Glue 3.0 non viene eseguita su Apache YARN, quindi le impostazioni di YARN non si applicano.

  • AWS Glue 3.0 non dispone di un file di sistema distribuito Hadoop (HDFS).

  • Eventuali file jar supplementari forniti in processi esistenti AWS Glue 0.9 potrebbero causare conflitti di dipendenze, a causa dell'aggiornamento di diverse dipendenze in 3.0 da 0.9. È possibile evitare conflitti di dipendenze in AWS Glue 3.0 con il parametro --user-jars-first del processo AWS Glue.

  • AWS Glue 3.0 non utilizza l'allocazione dinamica, quindi i parametri ExecutorAllocationManager non sono disponibili.

  • Nei processi di AWS Glue versione 3.0, è possibile specificare il numero di dipendenti e il tipo di dipendente, ma non una maxCapacity.

  • AWS Glue 3.0 non supporta ancora le trasformazioni basate su machine learning.

  • AWS Glue 3.0 non supporta ancora gli endpoint di sviluppo.

Consulta la documentazione relativa alla migrazione di Spark:

Migrazione da AWS Glue 1.0 ad AWS Glue 3.0

Nota le seguenti modifiche durante la migrazione:

  • AWS Glue 1.0 utilizza Spark 2.4 open source e AWS Glue 3.0 utilizza Spark 3.1.1 ottimizzato per EMR.

    • Diverse modifiche di Spark da sole potrebbero richiedere la revisione degli script per garantire che non si faccia riferimento alle caratteristiche rimosse.

    • Ad esempio, Spark 3.1.1 non abilita le FDU non tipizzate per Scala, ma Spark 2.4 le consente.

  • Tutti i processi in AWS Glue 3.0 verranno eseguiti con tempi di avvio significativamente migliorati. I processi Spark verranno fatturati in incrementi di 1 secondo con una durata minima di fatturazione 10 volte inferiore poiché la latenza di avvio passerà da un massimo di 10 minuti a un massimo di 1 minuto.

  • Il comportamento di registrazione è cambiato rispetto ad AWS Glue 2.0.

  • Diversi aggiornamenti delle dipendenze, evidenziati in

  • Scala viene inoltre aggiornato da 2.11 a 2.12 e Scala 2.12 non è compatibile con Scala 2.11.

  • Python 3.7 è anche la versione di default utilizzata per gli script Python, mentre AWS Glue 0.9 utilizzava solo Python 2.

    • Python 2.7 non è supportato con Spark 3.1.1.

    • È disponibile un nuovo meccanismo di installazione di moduli Python aggiuntivi.

  • AWS Glue 3.0 non viene eseguita su Apache YARN, quindi le impostazioni di YARN non si applicano.

  • AWS Glue 3.0 non dispone di un file di sistema distribuito Hadoop (HDFS).

  • Eventuali file jar supplementari forniti in processi esistenti AWS Glue 1.0 potrebbero causare conflitti di dipendenze, a causa dell'aggiornamento di diverse dipendenze in 3.0 da 1.0. È possibile evitare conflitti di dipendenze in AWS Glue 3.0 con il parametro --user-jars-first del processo AWS Glue.

  • AWS Glue 3.0 non utilizza l'allocazione dinamica, quindi i parametri ExecutorAllocationManager non sono disponibili.

  • Nei processi di AWS Glue versione 3.0, è possibile specificare il numero di dipendenti e il tipo di dipendente, ma non una maxCapacity.

  • AWS Glue 3.0 non supporta ancora le trasformazioni basate su machine learning.

  • AWS Glue 3.0 non supporta ancora gli endpoint di sviluppo.

Consulta la documentazione relativa alla migrazione di Spark:

Migrazione da AWS Glue 2.0 a AWS Glue 3.0

Nota le seguenti modifiche durante la migrazione:

  • Tutti i parametri di processo e le funzioni principali esistenti in AWS Glue 2.0 esisteranno in AWS Glue 3.0.

    • In AWS Glue 3.0, il committer ottimizzato EMRFS S3 per la scrittura dei dati Parquet in Amazon S3 è abilitato di default. Tuttavia, puoi disabilitarlo impostando --enable-s3-parquet-optimized-committer a false.

  • AWS Glue 2.0 utilizza Spark 2.4 open source e AWS Glue 3.0 utilizza Spark 3.1.1 ottimizzato per EMR.

    • Diverse modifiche di Spark da sole potrebbero richiedere la revisione degli script per garantire che non si faccia riferimento alle caratteristiche rimosse.

    • Ad esempio, Spark 3.1.1 non abilita le FDU non tipizzate per Scala, ma Spark 2.4 le consente.

  • AWS Glue 3.0 include anche un aggiornamento a EMRFS, driver JDBC aggiornati e include ulteriori ottimizzazioni su Spark stesso fornite da AWS Glue.

  • Tutti i processi in AWS Glue 3.0 verranno eseguiti con tempi di avvio significativamente migliorati. I processi Spark verranno fatturati in incrementi di 1 secondo con una durata minima di fatturazione 10 volte inferiore poiché la latenza di avvio passerà da un massimo di 10 minuti a un massimo di 1 minuto.

  • Python 2.7 non è supportato con Spark 3.1.1.

  • Diversi aggiornamenti delle dipendenze, evidenziati in Appendice A: aggiornamenti notevoli delle dipendenze.

  • Scala viene inoltre aggiornato da 2.11 a 2.12 e Scala 2.12 non è compatibile con Scala 2.11.

  • Eventuali file jar supplementari forniti in processi esistenti AWS Glue 2.0 potrebbero causare conflitti di dipendenze, a causa dell'aggiornamento di diverse dipendenze in 3.0 da 2.0. È possibile evitare conflitti di dipendenze in AWS Glue 3.0 con il parametro --user-jars-first del processo AWS Glue.

  • AWS Glue 3.0 ha un parallelismo di processo Spark diverso per la configurazione del driver/esecutore, rispetto a AWS Glue 2.0, migliora le prestazioni e utilizza al meglio le risorse disponibili. Sia spark.driver.cores che spark.executor.cores sono configurati in base al numero di core su AWS Glue 3.0 (4 sullo standard e sul dipendente G.1X e 8 sul dipendente G.2X). Queste configurazioni non modificano il tipo di dipendente o l'hardware per il processo AWS Glue. È possibile utilizzare queste configurazioni per calcolare il numero di partizioni o divisioni che corrispondono al parallelismo delle attività Spark nell'applicazione Spark.

    In generale, i processi avranno prestazioni simili o migliorate rispetto ad AWS Glue versione 2.0. Se i processi vengono eseguiti più lentamente, è possibile incrementare il parallelismo delle attività trasmettendo il seguente argomento del processo:

    • chiave: --executor-cores valore: <numero desiderato di attività che possono essere eseguite in parallelo>

    • Il valore non deve superare il doppio del numero di vCPU del tipo di worker, ossia 8 su G.1X, 16 su G.2X, 32 su G.4X e 64 su G.8X. È necessario prestare attenzione durante l'aggiornamento di questa configurazione in quanto potrebbe influire sulle prestazioni del processo; l'incremento del parallelismo, infatti, esercita pressione sulla memoria e sul disco, oltre a limitare i sistemi di origine e destinazione.

  • AWS Glue 3.0 utilizza Spark 3.1, che modifica il comportamento di carico/salvataggio dei timestamp da/verso i file parquet. Per ulteriori dettagli, consulta Aggiornamento da Spark SQL 3.0 a 3.1.

    Noi suggeriamo di impostare i seguenti parametri durante la lettura/scrittura di dati del parquet che contengono colonne timestamp. L'impostazione di tali parametri può risolvere il problema di incompatibilità del calendario che si verifica durante l'aggiornamento da Spark 2 a Spark 3, sia per AWS Glue Dynamic Frame che per Spark Data Frame. Utilizzare l'opzione CORRECTED per leggere il valore datetime così com'è e l'opzione LEGACY per cambiare la base dei valori datetime in relazione alla differenza di calendario durante la lettura.

    - Key: --conf - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]

Consulta la documentazione relativa alla migrazione di Spark:

Appendice A: aggiornamenti notevoli delle dipendenze

Di seguito sono riportati gli aggiornamenti delle dipendenze:

Dipendenza Versione in AWS Glue 0.9 Versione in AWS Glue 1.0 Versione in AWS Glue 2.0 Versione in AWS Glue 3.0
Spark 2.2.1 2.4.3 2.4.3 3.1.1-amzn-0
Hadoop 2.7.3-amzn-6 2.8.5-amzn-1 2.8.5-amzn-5 3.2.1-amzn-3
Scala 2.11 2.11 2.11 2.12
Jackson 2.7.x 2.7.x 2.7.x 2.10.x
Hive 1.2 1.2 1.2 2.3.7-amzn-4
EMRFS 2.20.0 2.30.0 2.38.0 2.46.0
Json4s 3.2.x 3.5.x 3.5.x 3.6.6
Arrow N/D 0.10.0 0.10.0 2.0.0
Client del catalogo AWS Glue N/D N/D 1.10.0 3.0.0

Appendice B: aggiornamenti dei driver JDBC

Di seguito sono riportati gli aggiornamenti dei driver JDBC:

Driver Versione del driver JDBC nelle precedenti versioni di AWS Glue Versione del driver JDBC in AWS Glue 3.0
MySQL 5.1 8.0.23
Microsoft SQL Server 6.1.0 7.0.0
Database Oracle 11.2 21.1
PostgreSQL 42.1.0 42.2.18
MongoDB 2.0.0 4.0.0