Menyesuaikan gambar Tanpa EMR Server - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyesuaikan gambar Tanpa EMR Server

Dimulai dengan Amazon EMR 6.9.0, Anda dapat menggunakan gambar khusus untuk mengemas dependensi aplikasi dan lingkungan runtime ke dalam satu wadah dengan Amazon Serverless. EMR Ini menyederhanakan cara Anda mengelola dependensi beban kerja dan membuat paket Anda lebih portabel. Saat Anda menyesuaikan gambar EMR Tanpa Server Anda, ini memberikan manfaat berikut:

  • Menginstal dan mengonfigurasi paket yang dioptimalkan untuk beban kerja Anda. Paket-paket ini mungkin tidak tersedia secara luas di distribusi publik lingkungan EMR runtime Amazon.

  • Mengintegrasikan EMR Tanpa Server dengan proses pembuatan, pengujian, dan penerapan yang sudah ada saat ini dalam organisasi Anda, termasuk pengembangan dan pengujian lokal.

  • Menerapkan proses keamanan yang telah ditetapkan, seperti pemindaian gambar, yang memenuhi persyaratan kepatuhan dan tata kelola dalam organisasi Anda.

  • Memungkinkan Anda menggunakan versi JDK dan Python Anda sendiri untuk aplikasi Anda.

EMRServerless menyediakan gambar yang dapat Anda gunakan sebagai basis Anda saat membuat gambar Anda sendiri. Gambar dasar menyediakan toples, konfigurasi, dan pustaka penting bagi gambar untuk berinteraksi dengan Tanpa EMR Server. Anda dapat menemukan gambar dasar di Galeri ECR Publik Amazon. Gunakan gambar yang cocok dengan jenis aplikasi Anda (Spark atau Hive) dan versi rilis. Misalnya, jika Anda membuat aplikasi di Amazon EMR rilis 6.9.0, gunakan gambar berikut.

Tipe Citra

Spark

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

Hive

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

Prasyarat

Sebelum Anda membuat gambar kustom EMR Tanpa Server, lengkapi prasyarat ini.

  1. Buat ECR repositori Amazon sama dengan Wilayah AWS yang Anda gunakan untuk meluncurkan aplikasi Tanpa EMR Server. Untuk membuat repositori ECR pribadi Amazon, lihat Membuat repositori pribadi.

  2. Untuk memberi pengguna akses ke ECR repositori Amazon Anda, tambahkan kebijakan berikut ke pengguna dan peran yang membuat atau memperbarui aplikasi EMR Tanpa Server dengan gambar dari repositori ini.

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

    Untuk lebih banyak contoh kebijakan berbasis ECR identitas Amazon, lihat contoh kebijakan berbasis identitas Amazon Elastic Container Registry.

Langkah 1: Buat gambar khusus dari gambar dasar EMR Tanpa Server

Pertama, buat Dockerfile yang dimulai dengan FROM instruksi yang menggunakan gambar dasar pilihan Anda. Setelah FROM instruksi, Anda dapat memasukkan modifikasi apa pun yang ingin Anda buat pada gambar. Gambar dasar secara otomatis menyetel USER kehadoop. Pengaturan ini mungkin tidak memiliki izin untuk semua modifikasi yang Anda sertakan. Sebagai solusinya, atur USER keroot, ubah gambar Anda, lalu atur kembali keUSER. hadoop:hadoop Untuk melihat sampel untuk kasus penggunaan umum, lihatMenggunakan gambar kustom dengan 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

Setelah Anda memiliki Dockerfile, buat gambar dengan perintah berikut.

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

Langkah 2: Validasi gambar secara lokal

EMRTanpa server menyediakan alat offline yang dapat memeriksa gambar kustom Anda secara statis untuk memvalidasi file dasar, variabel lingkungan, dan konfigurasi gambar yang benar. Untuk informasi tentang cara menginstal dan menjalankan alat, lihat Gambar EMRTanpa Server Amazon. CLI GitHub

Setelah Anda menginstal alat, jalankan perintah berikut untuk memvalidasi gambar:

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

Anda akan melihat output yang mirip dengan berikut ini.

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

Langkah 3: Unggah gambar ke ECR repositori Amazon Anda

Dorong ECR gambar Amazon Anda ke ECR repositori Amazon Anda dengan perintah berikut. Pastikan Anda memiliki IAM izin yang benar untuk mendorong gambar ke repositori Anda. Untuk informasi selengkapnya, lihat Mendorong gambar di Panduan ECR Pengguna Amazon.

# 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

Langkah 4: Buat atau perbarui aplikasi dengan gambar khusus

Pilih AWS Management Console tab atau AWS CLI tab sesuai dengan bagaimana Anda ingin meluncurkan aplikasi Anda, lalu selesaikan langkah-langkah berikut.

Console
  1. Masuk ke konsol EMR Studio di https://console.aws.amazon.com/emr. Arahkan ke aplikasi Anda, atau buat aplikasi baru dengan instruksi di Buat aplikasi.

  2. Untuk menentukan gambar kustom saat Anda membuat atau memperbarui aplikasi EMR Tanpa Server, pilih Pengaturan khusus di opsi pengaturan aplikasi.

  3. Di bagian Pengaturan gambar khusus, pilih kotak centang Gunakan gambar khusus dengan aplikasi ini.

  4. Tempelkan ECR gambar Amazon URI ke URI bidang Gambar. EMR Tanpa server menggunakan gambar ini untuk semua jenis pekerja untuk aplikasi. Atau, Anda dapat memilih Gambar kustom yang berbeda dan menempelkan ECR gambar Amazon yang berbeda URIs untuk setiap jenis pekerja.

CLI
  • Buat aplikasi dengan image-configuration parameter. EMR Tanpa server menerapkan pengaturan ini ke semua jenis pekerja.

    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" }'

    Untuk membuat aplikasi dengan pengaturan gambar yang berbeda untuk setiap jenis pekerja, gunakan worker-type-specifications parameter.

    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" } } }'

    Untuk memperbarui aplikasi, gunakan image-configuration parameter. EMR Tanpa server menerapkan pengaturan ini ke semua jenis pekerja.

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

Langkah 5: Izinkan EMR Tanpa Server untuk mengakses repositori gambar kustom

Tambahkan kebijakan sumber daya berikut ke ECR repositori Amazon untuk mengizinkan prinsipal layanan EMR Tanpa Server menggunakanget,describe, dan download permintaan dari repositori ini.

{ "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" } } } ] }

Sebagai praktik terbaik keamanan, tambahkan kunci aws:SourceArn kondisi ke kebijakan repositori. Kunci kondisi IAM global aws:SourceArn memastikan bahwa EMR Tanpa Server menggunakan repositori hanya untuk aplikasi. ARN Untuk informasi selengkapnya tentang kebijakan ECR repositori Amazon, lihat Membuat repositori pribadi.

Pertimbangan dan batasan

Saat Anda bekerja dengan gambar khusus, pertimbangkan hal berikut:

  • Gunakan gambar dasar yang benar yang cocok dengan jenis (Spark atau Hive) dan label rilis (misalnya,emr-6.9.0) untuk aplikasi Anda.

  • EMRTanpa server mengabaikan [CMD] atau [ENTRYPOINT] instruksi dalam file Docker. Gunakan instruksi umum dalam file Docker, seperti[COPY],[RUN], dan[WORKDIR].

  • Anda tidak harus memodifikasi variabel lingkungan JAVA_HOMESPARK_HOME,HIVE_HOME, TEZ_HOME ketika Anda membuat gambar kustom.

  • Gambar khusus tidak boleh melebihi 10 GB.

  • Jika Anda memodifikasi binari atau stoples di gambar EMR dasar Amazon, hal itu dapat menyebabkan kegagalan aplikasi atau peluncuran pekerjaan.

  • ECRRepositori Amazon harus sama dengan Wilayah AWS yang Anda gunakan untuk meluncurkan aplikasi Tanpa EMR Server.