Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Cara menyesuaikan gambar Docker
Ikuti langkah-langkah ini untuk menyesuaikan gambar Docker untuk Amazon EMR di EKS. Langkah-langkah menunjukkan cara mendapatkan gambar dasar, menyesuaikan dan mempublikasikannya, dan mengirimkan beban kerja menggunakan gambar.
catatan
Opsi lain yang mungkin ingin Anda pertimbangkan saat menyesuaikan gambar Docker adalah menyesuaikan untuk titik akhir interaktif, yang Anda lakukan untuk memastikan Anda memiliki dependensi yang diperlukan, atau menggunakan gambar wadah multi-arsitektur:
Prasyarat
-
Selesaikan Menyiapkan Amazon EMR di EKS langkah-langkah untuk Amazon EMR di EKS.
-
Instal Docker di lingkungan Anda. Untuk informasi lebih lanjut, lihat Get Docker
.
Langkah 1: Ambil gambar dasar dari Amazon Elastic Container Registry (Amazon ECR)
Gambar dasar berisi runtime Amazon EMR dan konektor yang digunakan untuk mengakses layanan lain. AWS Untuk Amazon EMR 6.9.0 dan yang lebih tinggi, Anda bisa mendapatkan gambar dasar dari Galeri Publik Amazon ECR. Jelajahi galeri untuk menemukan tautan gambar dan tarik gambar ke ruang kerja lokal Anda. Misalnya, untuk rilis Amazon EMR 7.6.0, docker pull
perintah berikut memberi Anda gambar dasar standar terbaru. Anda dapat mengganti emr-7.6.0:latest
dengan emr-7.6.0-spark-rapids:latest
untuk mengambil gambar yang memiliki akselerator Nvidia RAPIDS. Anda juga dapat mengganti emr-7.6.0:latest
dengan emr-7.6.0-java11:latest
untuk mengambil gambar dengan runtime Java 11.
docker pull public.ecr.aws/emr-on-eks/spark/
emr-7.6.0:latest
Jika Anda ingin mengambil gambar dasar untuk Amazon EMR 6.9.0 atau rilis ealier, atau jika Anda lebih suka mengambil dari akun registri Amazon ECR di setiap Wilayah, gunakan langkah-langkah berikut:
-
Pilih URI gambar dasar. URI gambar mengikuti format ini,
, seperti yang ditunjukkan contoh berikut.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
Untuk memilih gambar dasar di Wilayah Anda, lihat Detail untuk memilih URI gambar dasar.
-
Masuk ke repositori Amazon ECR di mana gambar dasar disimpan. Ganti
895885662937
danus-west-2
dengan akun registri Amazon ECR dan AWS Wilayah yang telah Anda pilih.aws ecr get-login-password --region
us-west-2
| docker login --username AWS --password-stdin895885662937
.dkr.ecr.us-west-2
.amazonaws.com -
Tarik gambar dasar ke Workspace lokal Anda. Ganti
emr-6.6.0:latest
dengan tag gambar kontainer yang telah Anda pilih.docker pull
895885662937
.dkr.ecr.us-west-2
.amazonaws.com/spark/emr-6.6.0:latest
Langkah 2: Sesuaikan gambar dasar
Ikuti langkah-langkah ini untuk menyesuaikan gambar dasar yang telah Anda tarik dari Amazon ECR.
-
Buat
Dockerfile
baru di Workspace lokal Anda. -
Edit
Dockerfile
yang baru saja Anda buat dan tambahkan konten berikut.Dockerfile
ini menggunakan gambar kontainer yang telah Anda tarik dari895885662937.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
-
Tambahkan perintah di
Dockerfile
untuk menyesuaikan gambar dasar. Sebagai contoh, tambahkan perintah untuk menginstal pustaka Python, seperti yang ditunjukkanDockerfile
berikut.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
-
Dari direktori yang sama di mana
Dockerfile
dibuat, jalankan perintah berikut untuk membangun gambar Docker. Berikan nama untuk image Docker, misalnya,emr6.6_custom
.docker build -t
emr6.6_custom
.
Langkah 3: (Opsional tapi disarankan) Validasi gambar kustom
Kami menyarankan Anda menguji kompatibilitas gambar kustom Anda sebelum menerbitkannya. Anda dapat menggunakan EMR Amazon pada CLI gambar khusus EKS
catatan
Amazon EMR pada CLI gambar khusus EKS tidak dapat mengonfirmasi bahwa gambar Anda bebas dari kesalahan. Berhati-hatilah saat menghapus dependensi dari gambar dasar.
Ambil langkah-langkah berikut untuk memvalidasi gambar kustom Anda.
-
Unduh dan instal Amazon EMR pada CLI gambar khusus EKS. Untuk informasi selengkapnya, lihat Amazon EMR di Panduan Instalasi CLI gambar khusus EKS
. -
Jalankan perintah berikut untuk menguji instalasi.
emr-on-eks-custom-image --version
Berikut ini menunjukkan contoh output.
Amazon EMR on EKS Custom Image CLI Version: x.xx
-
Jalankan perintah berikut untuk memvalidasi gambar kustom Anda.
emr-on-eks-custom-image validate-image -i
image_name
-rrelease_version
[-timage_type
]-
-i
menentukan URI gambar lokal yang perlu divalidasi. Ini bisa berupa URI gambar, nama atau tag apa pun yang Anda tentukan untuk gambar Anda. -
-r
menentukan versi rilis yang tepat untuk gambar dasar, misalnya,emr-6.6.0-latest
. -
-t
menentukan jenis gambar. Jika ini adalah gambar Spark, masukanspark
. Nilai default-nya adalahspark
. EMR Amazon saat ini pada versi CLI gambar khusus EKS hanya mendukung gambar runtime Spark.
Jika Anda menjalankan perintah dengan sukses dan gambar kustom memenuhi semua konfigurasi dan struktur file yang diperlukan, output yang dikembalikan menampilkan hasil dari semua pengujian, seperti contoh berikut menunjukkan.
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. -----------------------------------------------------------------
Jika gambar kustom tidak memenuhi konfigurasi atau struktur file yang diperlukan, pesan kesalahan akan terjadi. Output yang dikembalikan memberikan informasi tentang konfigurasi atau struktur file yang salah.
-
Langkah 4: Publikasikan gambar khusus
Publikasikan gambar Docker baru ke registri Amazon ECR Anda.
-
Jalankan perintah berikut untuk membuat repositori Amazon ECR untuk menyimpan gambar Docker Anda. Berikan nama untuk repositori Anda, misalnya,.
emr6.6_custom_repo
Gantius-west-2
dengan Wilayah Anda.aws ecr create-repository \ --repository-name
emr6.6_custom_repo
\ --image-scanning-configuration scanOnPush=true \ --regionus-west-2
Untuk informasi lebih lanjut, lihat Membuat repositori dalam Panduan Pengguna Amazon ECR.
-
Jalankan perintah berikut untuk mengautentikasi ke registri default Anda.
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.comUntuk informasi selengkapnya, lihat Autentikasi ke registri default Anda di Panduan Pengguna Amazon ECR.
-
Tandai dan publikasikan gambar ke repositori Amazon ECR yang Anda buat.
Tandai gambar.
docker tag
emr6.6_custom
aws_account_id
.dkr.ecr.us-west-2
.amazonaws.com/emr6.6_custom_repo
Tekan gambar.
docker push
aws_account_id
.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
Untuk informasi selengkapnya, lihat Menekan gambar ke Amazon ECR di Panduan Pengguna Amazon ECR.
Langkah 5: Kirim beban kerja Spark di Amazon EMR menggunakan gambar khusus
Setelah gambar kustom dibangun dan diterbitkan, Anda dapat mengirimkan tugas Amazon EMR di EKS menggunakan gambar kustom.
Pertama, buat start-job-run-request file.json dan tentukan spark.kubernetes.container.image
parameter untuk referensi gambar kustom, seperti contoh file JSON berikut menunjukkan.
catatan
Anda dapat menggunakan local://
skema untuk merujuk ke file yang tersedia dalam gambar kustom seperti yang ditunjukkan dengan entryPoint
argumen dalam cuplikan JSON di bawah ini. Anda juga dapat menggunakan local://
skema untuk merujuk ke dependensi aplikasi. Semua file dan dependensi yang dirujuk menggunakan local://
skema harus sudah ada di jalur yang ditentukan dalam gambar kustom.
{ "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
" } } }
Anda juga dapat mereferensikan gambar kustom dengan applicationConfiguration
properti seperti contoh berikut menunjukkan.
{ "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
" } } ] } }
Kemudian jalankan perintah start-job-run
untuk mengirimkan tugas.
aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json
Dalam contoh JSON di atas, ganti emr-6.6.0-latest
dengan versi rilis Amazon EMR Anda. Kami sangat menyarankan Anda menggunakan versi -latest
rilis untuk memastikan bahwa versi yang dipilih berisi pembaruan keamanan terbaru. Untuk informasi selengkapnya tentang versi rilis Amazon EMR dan tag gambarnya, lihat. Detail untuk memilih URI gambar dasar
catatan
Anda dapat menggunakan spark.kubernetes.driver.container.image
dan spark.kubernetes.executor.container.image
untuk menentukan gambar yang berbeda untuk driver dan pod eksekutor.