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à.
Come personalizzare le immagini Docker
Segui questi passaggi per personalizzare le immagini Docker per Amazon EMR suEKS. I passaggi mostrano come ottenere un'immagine di base, personalizzarla e pubblicarla e inviare un carico di lavoro utilizzando l'immagine.
Nota
Altre opzioni da prendere in considerazione quando si personalizzano le immagini Docker sono la personalizzazione per gli endpoint interattivi, cosa che si fa per assicurarsi di avere le dipendenze richieste, o l'utilizzo di immagini di contenitori multiarchitetturali:
Prerequisiti
-
Completa i Configurazione di Amazon EMR su EKS passaggi per Amazon EMR onEKS.
-
Installa Docker nel tuo ambiente. Per ulteriori informazioni, consulta Ottieni Docker
.
Fase 1: recuperare un'immagine di base da Amazon Elastic Container Registry (AmazonECR)
L'immagine di base contiene il EMR runtime di Amazon e i connettori utilizzati per accedere ad altri AWS servizi. Per Amazon EMR 6.9.0 e versioni successive, puoi ottenere le immagini di base dalla Amazon ECR Public Gallery. Sfoglia la galleria per trovare il collegamento all'immagine e trasferiscila nel tuo Workspace locale. Ad esempio, per la versione Amazon EMR 7.2.0, il docker pull
comando seguente consente di ottenere l'immagine di base standard più recente. Puoi sostituire emr-7.2.0:latest
con emr-7.2.0-spark-rapids:latest
per recuperare l'immagine con l'acceleratore Nvidia. RAPIDS Puoi anche sostituire emr-7.2.0:latest
con emr-7.2.0-java11:latest
per recuperare l'immagine con runtime Java 11.
docker pull public.ecr.aws/emr-on-eks/spark/
emr-7.2.0:latest
Se desideri recuperare l'immagine di base per Amazon EMR 6.9.0 o versioni precedenti, o se preferisci recuperarla dagli account del ECR registro Amazon in ogni regione, utilizza i seguenti passaggi:
-
Scegli un'immagine di base. URI L'immagine URI segue questo formato
, come dimostra l'esempio seguente.ECR-registry-account
.dkr.ecr.Region
.amazonaws.com/spark/container-image-tag
895885662937
.dkr.ecr.us-west-2
.amazonaws.com/spark/emr-6.6.0:latest
Per scegliere un'immagine di base nella tua Regione, consulta Dettagli per la selezione di un'immagine di base URI.
-
Accedi al ECR repository Amazon in cui è archiviata l'immagine di base. Replace (Sostituisci)
895885662937
eus-west-2
con l'account ECR del registro Amazon e la AWS regione che hai selezionato.aws ecr get-login-password --region
us-west-2
| docker login --username AWS --password-stdin895885662937
.dkr.ecr.us-west-2
.amazonaws.com -
Estrai l'immagine di base nel Workspace locale. Replace (Sostituisci)
emr-6.6.0:latest
con il tag dell'immagine del contenitore che hai selezionato.docker pull
895885662937
.dkr.ecr.us-west-2
.amazonaws.com/spark/emr-6.6.0:latest
Fase 2: personalizzazione di un'immagine di base
Segui questi passaggi per personalizzare l'immagine di base che hai estratto da AmazonECR.
-
Crea un nuovo
Dockerfile
nel Workspace locale. -
Modifica il
Dockerfile
appena creato e aggiungi i seguenti contenuti. QuestoDockerfile
usa l'immagine di container estratto da895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
-
Aggiungi comandi in
Dockerfile
per personalizzare l'immagine di base. Ad esempio, aggiungi un comando per installare le librerie Python, come mostrato qui di seguito inDockerfile
.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
-
Dalla stessa directory in cui viene creato
Dockerfile
, esegui il comando seguente per generare l'immagine Docker. Fornisci un nome per l'immagine Docker, ad esempioemr6.6_custom
.docker build -t
emr6.6_custom
.
Fase 3: (facoltativo ma consigliato) convalida di un'immagine personalizzata
Si consiglia di testare la compatibilità dell'immagine personalizzata prima di pubblicarla. Puoi utilizzare Amazon EMR on EKS custom image CLI per verificare se l'immagine
Nota
Amazon EMR on EKS custom image CLI non può confermare che la tua immagine sia priva di errori. Prestare attenzione quando si rimuovono le dipendenze dalle immagini di base.
Seguire i seguenti fasi per convalidare l'immagine personalizzata.
-
Scarica e installa Amazon EMR su un'immagine EKS personalizzataCLI. Per ulteriori informazioni, consulta Amazon EMR on EKS Custom Image CLI Installation Guide
. -
Eseguire il comando seguente per testare l'installazione.
emr-on-eks-custom-image --version
Di seguito è illustrato un esempio di output.
Amazon EMR on EKS Custom Image CLI Version: x.xx
-
Eseguire il comando seguente per convalidare l'immagine personalizzata.
emr-on-eks-custom-image validate-image -i
image_name
-rrelease_version
[-timage_type
]-
-i
specifica l'immagine locale URI che deve essere convalidata. Può essere l'immagineURI, qualsiasi nome o tag che hai definito per l'immagine. -
-r
specifica la versione di rilascio esatta per l'immagine di base, ad esempioemr-6.6.0-latest
. -
-t
specifica il tipo di immagine. Se si tratta di un'immagine Spark, inseriscispark
. Il valore predefinito èspark
. L'attuale CLI versione di Amazon EMR on EKS custom image supporta solo immagini di runtime Spark.
Se si esegue correttamente il comando e l'immagine personalizzata soddisfa tutte le configurazioni e le strutture di file richieste, l'output restituito visualizza i risultati di tutti i test, come dimostra l'esempio seguente.
Amazon EMR on EKS Custom Image Test Version: x.xx ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: xxx [INFO] Created On: 2021-05-17T20:50:07.986662904Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to /home/hadoop : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] SPARK_HOME is set with value: /usr/lib/spark : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] File Structure Test for spark-jars in /usr/lib/spark/jars: 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 bin-files in /usr/bin: PASS ... Start Running Sample Spark Job [INFO] Sample Spark Job Test with local:///usr/lib/spark/examples/jars/spark-examples.jar : PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------
Se l'immagine personalizzata non soddisfa le configurazioni o le strutture di file richieste, si verificano messaggi di errore. L'output restituito fornisce informazioni sulle configurazioni o sulle strutture di file errate.
-
Fase 4: Pubblicazione di un'immagine personalizzata
Pubblica la nuova immagine Docker nel tuo ECR registro Amazon.
-
Esegui il comando seguente per creare un ECR repository Amazon per archiviare la tua immagine Docker. Fornisci un nome per il tuo repository, ad esempio
emr6.6_custom_repo
. Sostituiscius-west-2
con la tua regione.aws ecr create-repository \ --repository-name
emr6.6_custom_repo
\ --image-scanning-configuration scanOnPush=true \ --regionus-west-2
Per ulteriori informazioni, consulta Creare un repository nella Amazon ECR User Guide.
-
Esegui il comando seguente per autenticarti nel registro di default.
aws ecr get-login-password --region
us-west-2
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.us-west-2
.amazonaws.com.rproxy.goskope.comPer ulteriori informazioni, consulta Autenticazione al registro predefinito nella Amazon ECR User Guide.
-
Etichetta e pubblica un'immagine nel ECR repository Amazon che hai creato.
Tagga l'immagine.
docker tag
emr6.6_custom
aws_account_id
.dkr.ecr.us-west-2
.amazonaws.com/emr6.6_custom_repo
Invia l'immagine.
docker push
aws_account_id
.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
Per ulteriori informazioni, consulta Push an image to Amazon ECR nella Amazon ECR User Guide.
Passaggio 5: invia un carico di lavoro Spark in Amazon EMR utilizzando un'immagine personalizzata
Dopo aver creato e pubblicato un'immagine personalizzata, puoi inviare un Amazon EMR on EKS job utilizzando un'immagine personalizzata.
Innanzitutto, crea un file start-job-run -request.json e specifica il spark.kubernetes.container.image
parametro per fare riferimento all'immagine personalizzata, come dimostra il seguente file di esempio. JSON
Nota
È possibile utilizzare local://
lo schema per fare riferimento ai file disponibili nell'immagine personalizzata, come mostrato con l'entryPoint
argomento nello snippet di seguito. JSON È possibile utilizzare anche la schema local://
per fare riferimento alle dipendenze dell'applicazione. Tutti i file e le dipendenze a cui si fa riferimento utilizzando lo schema local://
devono essere già presenti nel percorso specificato nell'immagine personalizzata.
{ "name": "spark-custom-image", "virtualClusterId": "
virtual-cluster-id
", "executionRoleArn": "execution-role-arn
", "releaseLabel": "emr-6.6.0-latest
", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
" } } }
Puoi fare riferimento all'immagine personalizzata con le proprietà applicationConfiguration
come illustrato nell'esempio seguente.
{ "name": "spark-custom-image", "virtualClusterId": "
virtual-cluster-id
", "executionRoleArn": "execution-role-arn
", "releaseLabel": "emr-6.6.0-latest
", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
" } } ] } }
Successivamente, esegui il comando start-job-run
per inviare il processo.
aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json
Negli JSON esempi precedenti, sostituisci emr-6.6.0-latest
con la tua versione di EMR rilascio di Amazon. Consigliamo vivamente di utilizzare la versione -latest
per garantire che la versione selezionata contenga gli aggiornamenti di sicurezza più recenti. Per ulteriori informazioni sulle versioni di EMR rilascio di Amazon e sui relativi tag di immagine, consultaDettagli per la selezione di un'immagine di base URI.
Nota
È possibile utilizzare spark.kubernetes.driver.container.image
e spark.kubernetes.executor.container.image
per specificare un'immagine diversa per i pod di driver ed executor.