Cara menyesuaikan gambar Docker - Amazon EMR

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

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:

  1. Pilih URI gambar dasar. URI gambar mengikuti format ini, ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag, seperti yang ditunjukkan contoh berikut.

    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.

  2. Masuk ke repositori Amazon ECR di mana gambar dasar disimpan. Ganti 895885662937 dan us-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-stdin 895885662937.dkr.ecr.us-west-2.amazonaws.com
  3. 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.

  1. Buat Dockerfile baru di Workspace lokal Anda.

  2. Edit Dockerfile yang baru saja Anda buat dan tambahkan konten berikut. Dockerfile ini menggunakan gambar kontainer yang telah Anda tarik dari 895885662937.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
  3. Tambahkan perintah di Dockerfile untuk menyesuaikan gambar dasar. Sebagai contoh, tambahkan perintah untuk menginstal pustaka Python, seperti yang ditunjukkan Dockerfile 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
  4. 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 untuk memeriksa apakah gambar Anda memiliki struktur file yang diperlukan dan konfigurasi yang benar untuk berjalan di Amazon EMR di 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.

  1. Unduh dan instal Amazon EMR pada CLI gambar khusus EKS. Untuk informasi selengkapnya, lihat Amazon EMR di Panduan Instalasi CLI gambar khusus EKS.

  2. 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
  3. Jalankan perintah berikut untuk memvalidasi gambar kustom Anda.

    emr-on-eks-custom-image validate-image -i image_name -r release_version [-t image_type]
    • -imenentukan URI gambar lokal yang perlu divalidasi. Ini bisa berupa URI gambar, nama atau tag apa pun yang Anda tentukan untuk gambar Anda.

    • -rmenentukan versi rilis yang tepat untuk gambar dasar, misalnya,emr-6.6.0-latest.

    • -tmenentukan jenis gambar. Jika ini adalah gambar Spark, masukanspark. Nilai default-nya adalah spark. 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.

  1. Jalankan perintah berikut untuk membuat repositori Amazon ECR untuk menyimpan gambar Docker Anda. Berikan nama untuk repositori Anda, misalnya,. emr6.6_custom_repo Ganti us-west-2 dengan Wilayah Anda.

    aws ecr create-repository \ --repository-name emr6.6_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region us-west-2

    Untuk informasi lebih lanjut, lihat Membuat repositori dalam Panduan Pengguna Amazon ECR.

  2. Jalankan perintah berikut untuk mengautentikasi ke registri default Anda.

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com

    Untuk informasi selengkapnya, lihat Autentikasi ke registri default Anda di Panduan Pengguna Amazon ECR.

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