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
Tipo | Immagine |
---|---|
Spark |
|
Hive |
|
Prerequisiti
Prima di creare un'immagine personalizzata EMR Serverless, completa questi prerequisiti.
-
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.
-
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 DockerfileFROM
istruzione che utilizza l'immagine di base preferita. Dopo l'FROM
istruzione, 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 pushaws-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.
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 get
describe
, 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 esempio
emr-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_HOME
SPARK_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.