Aggiornamenti generativi dell'intelligenza artificiale per Apache Spark in Glue AWS - 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à.

Aggiornamenti generativi dell'intelligenza artificiale per Apache Spark in Glue AWS

Gli aggiornamenti generativi dell'intelligenza artificiale per l'anteprima di Apache Spark sono disponibili per AWS Glue AWS nelle seguenti regioni: Stati Uniti orientali (Ohio), Stati Uniti orientali (Virginia settentrionale), Stati Uniti occidentali (Oregon), Asia Pacifico (Tokyo) e Asia Pacifico (Sydney). Le funzionalità di anteprima sono soggette a modifiche.

Spark Upgrades in AWS Glue consente ai data engineer e agli sviluppatori di aggiornare e migrare i job AWS Glue Spark esistenti alle ultime release di Spark utilizzando l'intelligenza artificiale generativa. I data engineer possono utilizzarlo per AWS scansionare i lavori di Glue Spark, generare piani di aggiornamento, eseguire piani e convalidare gli output. Riduce i tempi e i costi degli aggiornamenti di Spark automatizzando il lavoro indifferenziato di identificazione e aggiornamento degli script, delle configurazioni, delle dipendenze, dei metodi e delle funzionalità di Spark.

GIFMostra un'implementazione completa di un esempio di workflow di analisi degli aggiornamenti.

Come funziona

Quando utilizzi l'analisi degli aggiornamenti, AWS Glue identifica le differenze tra le versioni e le configurazioni nel codice del lavoro per generare un piano di aggiornamento. Il piano di aggiornamento descrive tutte le modifiche al codice e le fasi di migrazione richieste. Successivamente, AWS Glue crea ed esegue l'applicazione aggiornata in un ambiente sandbox per convalidare le modifiche e genera un elenco di modifiche al codice per la migrazione del lavoro. È possibile visualizzare lo script aggiornato insieme al riepilogo che descrive in dettaglio le modifiche proposte. Dopo aver eseguito i tuoi test, accetta le modifiche e il lavoro AWS Glue verrà aggiornato automaticamente alla versione più recente con il nuovo script.

Il completamento del processo di analisi dell'aggiornamento può richiedere del tempo, a seconda della complessità del lavoro e del carico di lavoro. I risultati dell'analisi dell'aggiornamento verranno archiviati nel percorso Amazon S3 specificato, che può essere esaminato per comprendere l'aggiornamento e eventuali problemi di compatibilità. Dopo aver esaminato i risultati dell'analisi dell'aggiornamento, puoi decidere se procedere con l'aggiornamento effettivo o apportare le modifiche necessarie al lavoro prima dell'aggiornamento.

Prerequisiti

I seguenti prerequisiti sono necessari per utilizzare l'intelligenza artificiale generativa per aggiornare i lavori in AWS Glue:

  • AWS Glue 2 PySpark jobs: solo i lavori AWS Glue 2 possono essere aggiornati a AWS Glue 4.

  • IAMsono necessarie le autorizzazioni per avviare l'analisi, rivedere i risultati e aggiornare il lavoro. Per ulteriori informazioni, consulta gli esempi nella Autorizzazioni sezione seguente.

  • Se si utilizza AWS KMS per crittografare gli artefatti di analisi o un servizio per crittografare i dati utilizzati per l'analisi, sono necessarie autorizzazioni aggiuntive AWS KMS . Per ulteriori informazioni, consulta gli esempi nella sezione seguente. AWS KMS politica

Autorizzazioni

  1. Aggiorna la IAM politica del chiamante con la seguente autorizzazione:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:StartJobUpgradeAnalysis", "glue:StartJobRun", "glue:GetJobRun", "glue:GetJob", "glue:BatchStopJobRun" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] }, { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "<s3 script location associated with the job>" ] }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": [ "<result s3 path provided on API>" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey", ], "Resource": "<key-arn-passed in the API>" } ] }
    Nota

    Se utilizzi due AWS KMS chiavi diverse, una per la crittografia degli artefatti dei risultati e l'altra per la crittografia dei metadati del servizio, la politica deve includere criteri simili per entrambe le chiavi.

  2. Aggiorna il ruolo di esecuzione del job che stai aggiornando per includere la seguente politica in linea:

    { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "ARN of the Amazon S3 path provided on API", "ARN of the Amazon S3 path provided on API/*" ] }

    Ad esempio, se utilizzi il percorso Amazon S3s3://amzn-s3-demo-bucket/upgraded-result, la policy sarà:

    { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/upgraded-result/", "arn:aws:s3:::amzn-s3-demo-bucket/upgraded-result/*" ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:GetJobUpgradeAnalysis"], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:StopJobUpgradeAnalysis", "glue:BatchStopJobRun" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:ListJobUpgradeAnalyses"], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:UpdateJob", "glue:UpgradeJob" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] }, { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": [ "<Role arn associated with the job>" ] } ] }

AWS KMS politica

Per passare la tua AWS KMS chiave personalizzata all'avvio di un'analisi, consulta la sezione seguente per configurare le autorizzazioni appropriate sulle AWS KMS chiavi.

È necessaria l'autorizzazione (crittografia/decrittografia) per passare la chiave. Nell'esempio di policy riportato di seguito, l' AWS account o il ruolo specificato da <IAM Customer caller ARN> è autorizzato a eseguire le azioni consentite:

  • KMS:Decrypt consente la decrittografia utilizzando la chiave specificata. AWS KMS

  • kms: GenerateDataKey consente di generare una chiave dati utilizzando la chiave specificata. AWS KMS

{ "Effect": "Allow", "Principal":{ "AWS": "<IAM Customer caller ARN>" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", ], "Resource": "<key-arn-passed-on-start-api>" }

È necessario autorizzare AWS Glue a utilizzare la AWS KMS chiave sia per la crittografia che per la decrittografia della chiave.

{ "Effect": "Allow", "Principal":{ "Service": "glue.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", ], "Resource": "<key-arn>", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:glue:<region>:<aws_account_id>:job/job-name" } } }

Questa politica garantisce di disporre sia delle autorizzazioni di crittografia che di decrittografia sulla chiave. AWS KMS

{ "Effect": "Allow", "Principal":{ "AWS": "<IAM Customer caller ARN>" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", ], "Resource": "<key-arn-passed-on-start-api>" }

Esecuzione di un'analisi di aggiornamento e applicazione dello script di aggiornamento

È possibile eseguire un'analisi di aggiornamento, che genererà un piano di aggiornamento per un lavoro selezionato dalla vista Processi.

  1. Da Jobs, selezionate un job AWS Glue 2.0, quindi scegliete Esegui analisi di aggiornamento dal menu Azioni.

    La schermata mostra l'analisi Upgrade with AI dal menu delle azioni.
  2. Nella modalità modale, seleziona un percorso per memorizzare il piano di upgrade generato nel percorso dei risultati. Deve essere un bucket Amazon S3 a cui puoi accedere e scrivere.

    La schermata mostra l'analisi dell'aggiornamento completata. Il pulsante per Applica lo script aggiornato è visibile.
  3. Configura opzioni aggiuntive, se necessario:

    • Configurazione di esecuzione: facoltativa: la configurazione di esecuzione è un'impostazione opzionale che consente di personalizzare vari aspetti delle esecuzioni di convalida eseguite durante l'analisi di aggiornamento. Questa configurazione viene utilizzata per eseguire lo script aggiornato e consente di selezionare le proprietà dell'ambiente di calcolo (tipo di lavoratore, numero di lavoratori, ecc.). Nota: è necessario utilizzare gli account di sviluppatore non di produzione per eseguire le convalide su set di dati di esempio prima di esaminare, accettare le modifiche e applicarle agli ambienti di produzione. La configurazione di esecuzione include i seguenti parametri personalizzabili:

      • Tipo di lavoratore: è possibile specificare il tipo di lavoratore da utilizzare per le esecuzioni di convalida, in modo da scegliere le risorse di elaborazione appropriate in base ai requisiti.

      • Numero di lavoratori: è possibile definire il numero di lavoratori da assegnare per le esecuzioni di convalida, in modo da scalare le risorse in base alle esigenze del carico di lavoro.

      • Job timeout (in minuti): questo parametro consente di impostare un limite di tempo per le esecuzioni di convalida, assicurando che i job terminino dopo una durata specificata per evitare un consumo eccessivo di risorse.

      • Configurazione della sicurezza: è possibile configurare le impostazioni di sicurezza, come la crittografia e il controllo degli accessi, per garantire la protezione dei dati e delle risorse durante le operazioni di convalida.

      • Parametri di lavoro aggiuntivi: se necessario, è possibile aggiungere nuovi parametri di lavoro per personalizzare ulteriormente l'ambiente di esecuzione per le esecuzioni di convalida.

      Sfruttando la configurazione di esecuzione, è possibile personalizzare le esecuzioni di convalida in base ai requisiti specifici. Ad esempio, è possibile configurare le esecuzioni di convalida per utilizzare un set di dati più piccolo, che consente di completare l'analisi più rapidamente e ottimizzare i costi. Questo approccio garantisce che l'analisi dell'aggiornamento venga eseguita in modo efficiente, riducendo al minimo l'utilizzo delle risorse e i costi associati durante la fase di convalida.

    • Configurazione della crittografia: opzionale:

      • Abilita la crittografia degli artefatti di aggiornamento: abilita la crittografia a riposo durante la scrittura dei dati nel percorso dei risultati. Se non desideri crittografare gli artefatti di aggiornamento, lascia questa opzione deselezionata.

      • Personalizza la crittografia dei metadati del servizio: i metadati del servizio sono crittografati per impostazione predefinita utilizzando chiavi proprietarie. AWS Scegli questa opzione se desideri utilizzare la tua chiave per la crittografia.

  4. Scegli Esegui per avviare l'analisi dell'aggiornamento. Mentre l'analisi è in esecuzione, puoi visualizzare i risultati nella scheda Analisi dell'aggiornamento. La finestra dei dettagli dell'analisi mostrerà informazioni sull'analisi e collegamenti agli artefatti di aggiornamento.

    • Percorso dei risultati: è qui che vengono archiviati il riepilogo dei risultati e lo script di aggiornamento.

    • Script aggiornato in Amazon S3: la posizione dello script di aggiornamento in Amazon S3. Puoi visualizzare lo script prima di applicare l'aggiornamento.

    • Riepilogo dell'aggiornamento in Amazon S3: la posizione del riepilogo dell'aggiornamento in Amazon S3. È possibile visualizzare il riepilogo dell'aggiornamento prima di applicarlo.

  5. Una volta completata con successo l'analisi dell'aggiornamento, è possibile applicare lo script di aggiornamento per aggiornare automaticamente il lavoro scegliendo Applica script aggiornato.

    Una volta applicata, la versione AWS Glue verrà aggiornata alla 4.0. È possibile visualizzare il nuovo script nella scheda Script.

    La schermata mostra l'analisi dell'aggiornamento completata. Il pulsante per Applica lo script aggiornato è visibile.

Comprendere il riepilogo dell'aggiornamento

Questo esempio dimostra il processo di aggiornamento di un lavoro AWS Glue dalla versione 2.0 alla versione 4.0. Il job di esempio legge i dati di prodotto da un bucket Amazon S3, applica diverse trasformazioni ai dati utilizzando SQL Spark e quindi salva i risultati trasformati in un bucket Amazon S3.

from awsglue.transforms import * from pyspark.context import SparkContext from awsglue.context import GlueContext from pyspark.sql.types import * from pyspark.sql.functions import * from awsglue.job import Job import json from pyspark.sql.types import StructType sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) gdc_database = "s3://aws-glue-scripts-us-east-1-gamma/demo-database/" schema_location = ( "s3://aws-glue-scripts-us-east-1-gamma/DataFiles/" ) products_schema_string = spark.read.text( f"{schema_location}schemas/products_schema" ).first()[0] product_schema = StructType.fromJson(json.loads(products_schema_string)) products_source_df = ( spark.read.option("header", "true") .schema(product_schema) .option( "path", f"{gdc_database}products/", ) .csv(f"{gdc_database}products/") ) products_source_df.show() products_temp_view_name = "spark_upgrade_demo_product_view" products_source_df.createOrReplaceTempView(products_temp_view_name) query = f"select {products_temp_view_name}.*, format_string('%0$s-%0$s', category, subcategory) as unique_category from {products_temp_view_name}" products_with_combination_df = spark.sql(query) products_with_combination_df.show() products_with_combination_df.createOrReplaceTempView(products_temp_view_name) product_df_attribution = spark.sql( f""" SELECT *, unbase64(split(product_name, ' ')[0]) as product_name_decoded, unbase64(split(unique_category, '-')[1]) as subcategory_decoded FROM {products_temp_view_name} """ ) product_df_attribution.show() product_df_attribution.write.mode("overwrite").option("header", "true").option( "path", f"{gdc_database}spark_upgrade_demo_product_agg/" ).saveAsTable("spark_upgrade_demo_product_agg", external=True) spark_upgrade_demo_product_agg_table_df = spark.sql( f"SHOW TABLE EXTENDED in default like 'spark_upgrade_demo_product_agg'" ) spark_upgrade_demo_product_agg_table_df.show() job.commit()
from awsglue.transforms import * from pyspark.context import SparkContext from awsglue.context import GlueContext from pyspark.sql.types import * from pyspark.sql.functions import * from awsglue.job import Job import json from pyspark.sql.types import StructType sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) spark = glueContext.spark_session # change 1 spark.conf.set("spark.sql.adaptive.enabled", "false") # change 2 spark.conf.set("spark.sql.legacy.pathOptionBehavior.enabled", "true") job = Job(glueContext) gdc_database = "s3://aws-glue-scripts-us-east-1-gamma/demo-database/" schema_location = ( "s3://aws-glue-scripts-us-east-1-gamma/DataFiles/" ) products_schema_string = spark.read.text( f"{schema_location}schemas/products_schema" ).first()[0] product_schema = StructType.fromJson(json.loads(products_schema_string)) products_source_df = ( spark.read.option("header", "true") .schema(product_schema) .option( "path", f"{gdc_database}products/", ) .csv(f"{gdc_database}products/") ) products_source_df.show() products_temp_view_name = "spark_upgrade_demo_product_view" products_source_df.createOrReplaceTempView(products_temp_view_name) # change 3 query = f"select {products_temp_view_name}.*, format_string('%1$s-%1$s', category, subcategory) as unique_category from {products_temp_view_name}" products_with_combination_df = spark.sql(query) products_with_combination_df.show() products_with_combination_df.createOrReplaceTempView(products_temp_view_name) # change 4 product_df_attribution = spark.sql( f""" SELECT *, try_to_binary(split(product_name, ' ')[0], 'base64') as product_name_decoded, try_to_binary(split(unique_category, '-')[1], 'base64') as subcategory_decoded FROM {products_temp_view_name} """ ) product_df_attribution.show() product_df_attribution.write.mode("overwrite").option("header", "true").option( "path", f"{gdc_database}spark_upgrade_demo_product_agg/" ).saveAsTable("spark_upgrade_demo_product_agg", external=True) spark_upgrade_demo_product_agg_table_df = spark.sql( f"SHOW TABLE EXTENDED in default like 'spark_upgrade_demo_product_agg'" ) spark_upgrade_demo_product_agg_table_df.show() job.commit()
La schermata mostra il riepilogo dell'analisi dell'aggiornamento.

In base al riepilogo, ci sono quattro modifiche proposte da AWS Glue per aggiornare correttamente lo script da AWS Glue 2.0 a AWS Glue 4.0:

  1. SQLConfigurazione Spark (spark.sql.adaptive.enabled): questa modifica serve a ripristinare il comportamento dell'applicazione poiché una nuova funzionalità per l'esecuzione adattiva delle query di Spark viene introdotta a partire da Spark 3.2SQL. Puoi controllare questa modifica alla configurazione e abilitarla o disabilitarla ulteriormente secondo le loro preferenze.

  2. DataFrame APImodifica: L'opzione path non può coesistere con altre DataFrameReader operazioni come. load() Per mantenere il comportamento precedente, AWS Glue ha aggiornato lo script per aggiungere una nuova SQL configurazione (spark.sql.legacy). pathOptionBehavior.abilitato).

  3. SQLAPIModifica Spark: il comportamento di strfmt in format_string(strfmt, obj, ...) è stato aggiornato in modo da disallow 0$ come primo argomento. Per garantire la compatibilità, AWS Glue ha modificato lo script da utilizzare invece 1$ come primo argomento.

  4. Spark SQL API change: la unbase64 funzione non consente input di stringhe in formato errato. Per mantenere il comportamento precedente, AWS Glue ha aggiornato lo script per utilizzare la try_to_binary funzione.

Interruzione di un'analisi di aggiornamento in corso

È possibile annullare un'analisi di aggiornamento in corso o semplicemente interrompere l'analisi.

  1. Scegliete la scheda Upgrade Analysis.

  2. Seleziona il lavoro in esecuzione, quindi scegli Stop. Ciò interromperà l'analisi. È quindi possibile eseguire un'altra analisi di aggiornamento sullo stesso lavoro.

    La schermata mostra la scheda di analisi dell'aggiornamento con un lavoro selezionato. Il processo è ancora in esecuzione.

Considerazioni

Quando inizi a utilizzare Spark Upgrades durante il periodo di anteprima, ci sono diversi aspetti importanti da considerare per un utilizzo ottimale del servizio.

  • Ambito e limitazioni del servizio: la versione di anteprima si concentra sugli aggiornamenti PySpark del codice dalle versioni 2.0 alla versione 4.0 di AWS Glue. Al momento, il servizio gestisce PySpark codice che non si basa su dipendenze di libreria aggiuntive. È possibile eseguire aggiornamenti automatici per un massimo di 10 processi contemporaneamente in un AWS account, in modo da aggiornare in modo efficiente più processi mantenendo al contempo la stabilità del sistema.

    • Sono supportati solo i PySpark lavori.

    • L'analisi degli aggiornamenti scadrà dopo 24 ore.

    • È possibile eseguire solo un'analisi di aggiornamento attiva alla volta per un processo. A livello di account, è possibile eseguire fino a 10 analisi di aggiornamento attive contemporaneamente.

  • Ottimizzazione dei costi durante il processo di aggiornamento: poiché Spark Upgrades utilizza l'intelligenza artificiale generativa per convalidare il piano di aggiornamento attraverso più iterazioni, con ogni iterazione eseguita come processo AWS Glue nel tuo account, è essenziale ottimizzare le configurazioni di esecuzione del processo di convalida per ridurre i costi. A tal fine, consigliamo di specificare una configurazione di esecuzione all'avvio di un'analisi di aggiornamento come segue:

    • Usa account di sviluppo non di produzione e seleziona esempi di set di dati fittizi che rappresentino i tuoi dati di produzione ma di dimensioni più piccole per la convalida con Spark Upgrades.

    • Utilizza risorse di calcolo della giusta dimensione, come i worker G.1X, e selezionando un numero appropriato di worker per l'elaborazione dei dati di esempio.

    • Attivazione dell'auto-scaling dei job di AWS Glue, se applicabile, per regolare automaticamente le risorse in base al carico di lavoro.

    Ad esempio, se il processo di produzione elabora terabyte di dati con 20 worker G.2X, è possibile configurare il processo di aggiornamento per elaborare alcuni gigabyte di dati rappresentativi con 2 worker G.2X e l'auto-scaling abilitato per la convalida.

  • Anteprima delle best practice: durante il periodo di anteprima, consigliamo vivamente di iniziare il percorso di aggiornamento con lavori non di produzione. Questo approccio ti consente di acquisire familiarità con il flusso di lavoro di aggiornamento e di comprendere come il servizio gestisce i diversi tipi di modelli di codice Spark.

  • Allarmi e notifiche: quando utilizzi la funzionalità di aggiornamento dell'intelligenza artificiale generativa su un lavoro, assicurati che gli allarmi/le notifiche per le esecuzioni di job non riuscite siano disattivati. Durante il processo di aggiornamento, potrebbero verificarsi fino a 10 esecuzioni di job non riusciti nel tuo account prima che vengano forniti gli artefatti aggiornati.

  • Regole di rilevamento delle anomalie: disattivate anche le regole di rilevamento delle anomalie sul Job che viene aggiornato, poiché i dati scritti nelle cartelle di output durante le esecuzioni intermedie dei job potrebbero non essere nel formato previsto durante la convalida dell'aggiornamento.

Inferenza tra regioni in Spark Upgrades

Spark Upgrades è basato Amazon Bedrock e sfrutta l'inferenza interregionale (). CRIS ConCRIS, Spark Upgrades selezionerà automaticamente la regione ottimale all'interno della tua area geografica (come descritto più dettagliatamente qui) per elaborare la tua richiesta di inferenza, massimizzare le risorse di calcolo disponibili e la disponibilità del modello e fornire la migliore esperienza al cliente. Non ci sono costi aggiuntivi per l'utilizzo dell'inferenza interregionale.

Le richieste di inferenza tra regioni vengono conservate all'interno delle AWS regioni che fanno parte della geografia in cui risiedono originariamente i dati. Ad esempio, una richiesta effettuata negli Stati Uniti viene conservata nelle AWS regioni degli Stati Uniti. Sebbene i dati rimangano archiviati solo nella regione principale, quando si utilizza l'inferenza interregionale, le istruzioni di input e i risultati di output potrebbero spostarsi al di fuori della regione principale. Tutti i dati verranno trasmessi crittografati attraverso la rete sicura di Amazon.