Personalizzazione di un'immagine EMR Serverless - Amazon EMR

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

Personalizzazione di un'immagine EMR Serverless

A partire da Amazon EMR 6.9.0, puoi utilizzare immagini personalizzate per impacchettare le dipendenze delle applicazioni e gli ambienti di runtime in un unico contenitore con Amazon Serverless. EMR Ciò semplifica la gestione delle dipendenze del carico di lavoro e rende i pacchetti più portabili. La personalizzazione dell'immagine EMR Serverless offre i seguenti vantaggi:

  • Installa e configura pacchetti ottimizzati per i carichi di lavoro. Questi pacchetti potrebbero non essere ampiamente disponibili nella distribuzione pubblica degli ambienti di EMR runtime Amazon.

  • Integra EMR Serverless con gli attuali processi di compilazione, test e distribuzione stabiliti all'interno dell'organizzazione, inclusi sviluppo e test locali.

  • Applica processi di sicurezza consolidati, come la scansione delle immagini, che soddisfano i requisiti di conformità e governance all'interno dell'organizzazione.

  • Consente di utilizzare le proprie versioni di Python JDK e Python per le applicazioni.

EMRServerless fornisce immagini che è possibile utilizzare come base per creare immagini personalizzate. L'immagine di base fornisce i jar, la configurazione e le librerie essenziali per l'interazione dell'immagine con EMR Serverless. Puoi trovare l'immagine di base nella Amazon ECR Public Gallery. Usa l'immagine che corrisponde al tipo di applicazione (Spark o Hive) e alla versione di rilascio. Ad esempio, se crei un'applicazione sulla EMR versione 6.9.0 di Amazon, utilizza le seguenti immagini.

Tipo Immagine

Spark

public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest

Hive

public.ecr.aws/emr-serverless/hive/emr-6.9.0:latest

Prerequisiti

Prima di creare un'immagine personalizzata EMR Serverless, completa questi prerequisiti.

  1. Crea un ECR repository Amazon nello stesso Regione AWS che usi per avviare applicazioni EMR Serverless. Per creare un archivio ECR privato Amazon, consulta Creazione di un repository privato.

  2. Per concedere agli utenti l'accesso al tuo ECR repository Amazon, aggiungi le seguenti politiche agli utenti e ai ruoli che creano o aggiornano applicazioni EMR Serverless con immagini da questo repository.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "ecr-repository-arn" } ] }

    Per ulteriori esempi di policy basate sull'ECRidentità di Amazon, consulta Esempi di policy basate sull'identità di Amazon Elastic Container Registry.

Passaggio 1: crea un'immagine personalizzata da immagini di base Serverless EMR

Innanzitutto, crea un Dockerfile che inizi con un'FROMistruzione che utilizza l'immagine di base preferita. Dopo l'FROMistruzione, puoi includere qualsiasi modifica che desideri apportare all'immagine. L'immagine di base imposta automaticamente USER suhadoop. Questa impostazione potrebbe non disporre delle autorizzazioni per tutte le modifiche incluse. Come soluzione alternativa, imposta suroot, modifica USER l'immagine e quindi reimpostala su. USER hadoop:hadoop Per visualizzare esempi di casi d'uso comuni, consultaUtilizzo di immagini personalizzate con EMR Serverless.

# Dockerfile FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # MODIFICATIONS GO HERE # EMRS will run the image as hadoop USER hadoop:hadoop

Dopo aver creato il Dockerfile, crea l'immagine con il seguente comando.

# build the docker image docker build . -t aws-account-id.dkr.ecr.region.amazonaws.com/my-repository[:tag]or[@digest]

Passaggio 2: convalida l'immagine localmente

EMRServerless fornisce uno strumento offline in grado di controllare staticamente l'immagine personalizzata per convalidare file di base, variabili di ambiente e correggere le configurazioni dell'immagine. Per informazioni su come installare ed eseguire lo strumento, consulta Amazon EMR Serverless Image CLI GitHub.

Dopo aver installato lo strumento, esegui il seguente comando per convalidare un'immagine:

amazon-emr-serverless-image \ validate-image -r emr-6.9.0 -t spark \ -i aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest

Dovresti vedere un output simile al seguente.

Amazon EMR Serverless - Image CLI Version: 0.0.1 ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: 9e2f4359cf5beb466a8a2ed047ab61c9d37786c555655fc122272758f761b41a [INFO] Created On: 2022-12-02T07:46:42.586249984Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] HADOOP_HOME is set with value: /usr/lib/hadoop : PASS [INFO] HADOOP_LIBEXEC_DIR is set with value: /usr/lib/hadoop/libexec : PASS [INFO] HADOOP_USER_HOME is set with value: /home/hadoop : PASS [INFO] HADOOP_YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] HIVE_HOME is set with value: /usr/lib/hive : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] TEZ_HOME is set with value: /usr/lib/tez : PASS [INFO] YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] File Structure Test for hadoop-files in /usr/lib/hadoop: PASS [INFO] File Structure Test for hadoop-jars in /usr/lib/hadoop/lib: PASS [INFO] File Structure Test for hadoop-yarn-jars in /usr/lib/hadoop-yarn: PASS [INFO] File Structure Test for hive-bin-files in /usr/bin: PASS [INFO] File Structure Test for hive-jars in /usr/lib/hive/lib: PASS [INFO] File Structure Test for java-bin in /etc/alternatives/jre/bin: PASS [INFO] File Structure Test for tez-jars in /usr/lib/tez: PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------

Passaggio 3: carica l'immagine nel tuo ECR repository Amazon

Invia la tua ECR immagine Amazon al tuo ECR repository Amazon con i seguenti comandi. Assicurati di disporre delle IAM autorizzazioni corrette per inviare l'immagine al tuo repository. Per ulteriori informazioni, consulta Pushing an image nella Amazon ECR User Guide.

# login to ECR repo aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws-account-id.dkr.ecr.region.amazonaws.com # push the docker image docker push aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest

Passaggio 4: creare o aggiornare un'applicazione con immagini personalizzate

Scegli la AWS Management Console scheda o la AWS CLI scheda in base al modo in cui desideri avviare l'applicazione, quindi completa i seguenti passaggi.

Console
  1. Accedi alla console EMR Studio all'indirizzo https://console.aws.amazon.com/emr. Accedi alla tua applicazione o crea una nuova applicazione seguendo le istruzioni riportate in Creare un'applicazione.

  2. Per specificare immagini personalizzate quando crei o aggiorni un'applicazione EMR Serverless, seleziona Impostazioni personalizzate nelle opzioni di configurazione dell'applicazione.

  3. Nella sezione Impostazioni dell'immagine personalizzata, seleziona la casella di controllo Usa l'immagine personalizzata con questa applicazione.

  4. Incolla l'ECRimmagine Amazon URI nel URI campo Immagine. EMRServerless utilizza questa immagine per tutti i tipi di lavoratori dell'applicazione. In alternativa, puoi scegliere Immagini personalizzate diverse e incollare ECR immagini Amazon diverse URIs per ogni tipo di lavoratore.

CLI
  • Crea un'applicazione con il image-configuration parametro. EMRServerless applica questa impostazione a tutti i tipi di lavoratore.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

    Per creare un'applicazione con impostazioni di immagine diverse per ogni tipo di lavoratore, utilizzate il worker-type-specifications parametro.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --worker-type-specifications '{ "Driver": { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } }, "Executor" : { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } } }'

    Per aggiornare un'applicazione, utilizzate il image-configuration parametro. EMRServerless applica questa impostazione a tutti i tipi di lavoratore.

    aws emr-serverless update-application \ --application-id application-id \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

Passaggio 5: consentire a EMR Serverless di accedere all'archivio di immagini personalizzato

Aggiungi la seguente politica sulle risorse al ECR repository Amazon per consentire al responsabile del servizio EMR Serverless di utilizzare getdescribe, e le download richieste provenienti da questo repository.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Emr Serverless Custom Image Support", "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:GetDownloadUrlForLayer" ], "Condition":{ "StringEquals":{ "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id" } } } ] }

Come best practice di sicurezza, aggiungi una chiave di aws:SourceArn condizione alla policy del repository. La chiave di condizione IAM globale aws:SourceArn garantisce che EMR Serverless utilizzi il repository solo per un'applicazione. ARN Per ulteriori informazioni sulle politiche relative ai ECR repository di Amazon, consulta Creazione di un repository privato.

Considerazioni e limitazioni

Quando lavori con immagini personalizzate, considera quanto segue:

  • Usa l'immagine di base corretta che corrisponda al tipo (Spark o Hive) e all'etichetta di rilascio (ad esempioemr-6.9.0) dell'applicazione.

  • EMRServerless ignora le [ENTRYPOINT] istruzioni [CMD] o le istruzioni contenute nel file Docker. Usa istruzioni comuni nel file Docker, ad esempio, e[COPY]. [RUN] [WORKDIR]

  • Non è necessario modificare le variabili di ambiente JAVA_HOMESPARK_HOME,HIVE_HOME, TEZ_HOME quando si crea un'immagine personalizzata.

  • Le immagini personalizzate non possono superare le dimensioni di 5 GB.

  • Se modifichi i file binari o i jar nelle immagini di EMR base di Amazon, ciò potrebbe causare errori nell'avvio dell'applicazione o del processo.

  • Il ECR repository Amazon dovrebbe trovarsi nello stesso Regione AWS che usi per avviare le applicazioni EMR Serverless.