Konfigurasi Docker - Amazon EMR

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

Konfigurasi Docker

Amazon EMR 6.x mendukung Hadoop 3, yang memungkinkan YARN NodeManager meluncurkan kontainer baik secara langsung di cluster EMR Amazon atau di dalam wadah Docker. kontainer Docker menyediakan lingkungan eksekusi kustom di mana kode aplikasi berjalan. Lingkungan eksekusi kustom diisolasi dari lingkungan eksekusi YARN NodeManager dan aplikasi lainnya.

Kontainer Docker dapat menyertakan pustaka khusus yang digunakan oleh aplikasi dan mereka dapat menyediakan berbagai versi alat dan pustaka asli, seperti R dan Python. Anda dapat menggunakan alat Docker yang sudah dikenal untuk menentukan pustaka dan dependensi waktu aktif untuk aplikasi Anda.

Klaster Amazon EMR 6.x dikonfigurasi secara default untuk mengizinkan aplikasi YARN, seperti Spark, berjalan menggunakan kontainer Docker. Untuk menyesuaikan konfigurasi kontainer Anda, edit opsi dukungan Docker yang ditetapkan dalam file yarn-site.xml dan container-executor.cfg yang tersedia di /etc/hadoop/conf direktori. Untuk rincian tentang setiap opsi konfigurasi dan bagaimana ia digunakan, lihat Meluncurkan aplikasi menggunakan kontainer Docker.

Anda dapat memilih untuk menggunakan Docker saat mengirimkan tugas. Gunakan variabel berikut untuk menentukan waktu aktif Docker dan gambar Docker.

  • YARN_CONTAINER_RUNTIME_TYPE=docker

  • YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={DOCKER_IMAGE_NAME}

Saat Anda menggunakan kontainer Docker untuk menjalankan aplikasi YARN Anda, YARN mengunduh gambar Docker yang Anda tentukan saat mengirimkan tugas. Agar YARN dapat menyelesaikan gambar Docker ini, gambar tersebut harus dikonfigurasi dengan registri Docker. Opsi konfigurasi untuk registri Docker bergantung pada apakah Anda men-deploy klaster menggunakan subnet publik atau pribadi.

Registri Docker

Registri Docker adalah suatu sistem penyimpanan dan distribusi untuk gambar Docker. Untuk Amazon EMR, kami menyarankan Anda menggunakan Amazon ECR, yang merupakan registri kontainer Docker yang dikelola sepenuhnya yang memungkinkan Anda membuat gambar khusus Anda sendiri dan menghostingnya dalam arsitektur yang sangat tersedia dan dapat diskalakan.

Pertimbangan penyebaran

Registri Docker memerlukan akses jaringan dari setiap host di klaster. Ini karena setiap host mengunduh gambar dari registri Docker saat aplikasi YARN Anda berjalan di klaster. Persyaratan konektivitas jaringan ini dapat membatasi pilihan akan registri Docker Anda, bergantung pada apakah Anda men-deploy klaster Amazon EMR ke dalam subnet publik atau privat.

Subnet publik

Ketika kluster EMR digunakan di subnet publik, node yang menjalankan YARN NodeManager dapat langsung mengakses registri apa pun yang tersedia melalui internet.

Subnet pribadi

Ketika kluster EMR diterapkan di subnet pribadi, node yang menjalankan YARN NodeManager tidak memiliki akses langsung ke internet. Gambar Docker dapat di-host di Amazon ECR dan diakses melalui. AWS PrivateLink

Untuk informasi selengkapnya tentang cara menggunakan AWS PrivateLink untuk mengizinkan akses ke Amazon ECR dalam skenario subnet pribadi, lihat Menyiapkan untuk AWS PrivateLink Amazon ECS, dan Amazon ECR.

Mengkonfigurasi registri Docker

Untuk menggunakan registri Docker dengan Amazon EMR, Anda harus mengonfigurasi Docker agar memercayai registri tertentu yang ingin Anda gunakan untuk menyelesaikan gambar Docker. Registrasi kepercayaan default adalah lokal (pribadi) dan centos. Untuk menggunakan repositori publik lain atau Amazon ECR, Anda dapat mengubah pengaturan docker.trusted.registries di /etc/hadoop/conf/container-executor.cfg menggunakan EMR Classification API dengan kunci klasifikasi container-executor.

Contoh berikut menunjukkan cara mengkonfigurasi klaster untuk mempercayai kedua repositori publik, bernama your-public-repo, dan titik akhir registri ECR,123456789123.dkr.ecr.us-east-1.amazonaws.com. Jika Anda menggunakan ECR, ganti titik akhir ini dengan titik akhir ECR khusus Anda.

[ { "Classification": "container-executor", "Configurations": [ { "Classification": "docker", "Properties": { "docker.trusted.registries": "local,centos,your-public-repo,123456789123.dkr.ecr.us-east-1.amazonaws.com", "docker.privileged-containers.registries": "local,centos,your-public-repo,123456789123.dkr.ecr.us-east-1.amazonaws.com" } } ] } ]

Untuk meluncurkan cluster Amazon EMR 6.0.0 dengan konfigurasi ini menggunakan AWS Command Line Interface (AWS CLI), buat file bernama container-executor.json dengan konten konfigurasi JSON ontainer-executor sebelumnya. Kemudian, gunakan perintah berikut untuk meluncurkan klaster.

export KEYPAIR=<Name of your Amazon EC2 key-pair> export SUBNET_ID=<ID of the subnet to which to deploy the cluster> export INSTANCE_TYPE=<Name of the instance type to use> export REGION=<Region to which to deploy the cluster> aws emr create-cluster \ --name "EMR-6.0.0" \ --region $REGION \ --release-label emr-6.0.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole \ --ec2-attributes KeyName=$KEYPAIR,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=$SUBNET_ID \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=$INSTANCE_TYPE InstanceGroupType=CORE,InstanceCount=2,InstanceType=$INSTANCE_TYPE \ --configuration file://container-executor.json

Mengonfigurasi YARN untuk mengakses Amazon ECR di EMR 6.0.0 dan yang lebih lama

Jika Anda baru mengenal Amazon ECR, ikuti petunjuk di Memulai dengan Amazon ECR dan memverifikasi bahwa Anda memiliki akses ke Amazon ECR dari setiap instans di klaster Amazon EMR Anda.

Pada EMR 6.0.0 dan yang lebih lama, untuk mengakses Amazon ECR menggunakan perintah Docker, Anda harus membuat kredensial terlebih dahulu. Untuk memverifikasi bahwa YARN dapat mengakses gambar dari Amazon ECR, gunakan variabel lingkungan kontainer YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG untuk meneruskan referensi ke kredensials yang Anda buat.

Jalankan perintah berikut pada salah satu simpul inti untuk mendapatkan baris login untuk akun ECR Anda.

aws ecr get-login --region us-east-1 --no-include-email

Perintah get-login menghasilkan perintah CLI Docker yang benar untuk dijalankan dalam pembuatan kredensial. Salin dan jalankan output dari get-login.

sudo docker login -u AWS -p <password> https://<account-id>.dkr.ecr.us-east-1.amazonaws.com

Perintah ini menghasilkan file config.json dalam folder /root/.docker. Salin file ini ke HDFS sehingga tugas yang dikirimkan ke klaster dapat menggunakannya untuk mengautentikasi ke Amazon ECR.

Jalankan perintah di bawah ini untuk menyalin file config.json ke direktori beranda Anda.

mkdir -p ~/.docker sudo cp /root/.docker/config.json ~/.docker/config.json sudo chmod 644 ~/.docker/config.json

Jalankan perintah di bawah ini untuk meletakkan config.json di HDFS sehingga dapat digunakan oleh tugas yang berjalan di klaster.

hadoop fs -put ~/.docker/config.json /user/hadoop/

YARN dapat mengakses ECR sebagai registri gambar Docker dan menarik kontainer selama eksekusi tugas.

Setelah mengonfigurasi registri Docker dan YARN, Anda dapat menjalankan aplikasi YARN menggunakan kontainer Docker. Untuk informasi selengkapnya, lihat Menjalankan aplikasi Spark dengan Docker menggunakan Amazon EMR 6.0.0.

Di EMR 6.1.0 dan yang lebih baru, Anda tidak harus mengatur autentikasi ke Amazon ECR secara manual. Jika registri Amazon ECR terdeteksi di kunci klasifikasi container-executor, fitur autentikasi otomatis Amazon ECR akan diaktifkan, dan YARN menangani proses autentikasi saat Anda mengirimkan tugas Spark dengan gambar ECR. Anda dapat mengonfirmasi apakah autentikasi otomatis diaktifkan dengan memeriksa yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled di situs yarn. Autentikasi otomatis diaktifkan dan pengaturan autentikasi YARN diatur ke true jika docker.trusted.registries mengandungi URL registri ECR.

Prasyarat untuk menggunakan otentikasi otomatis ke Amazon ECR

  • EMR versi 6.1.0 atau lebih baru

  • Registri ECR yang termasuk dalam konfigurasi berada di Wilayah yang sama dengan klaster

  • IAM role dengan izin untuk mendapatkan token otorisasi dan menarik citra apa pun

Lihat Menyiapkan Amazon ECR untuk informasi lebih lanjut.

Cara mengaktifkan otentikasi otomatis

Ikuti Mengkonfigurasi registri Docker untuk mengatur registri Amazon ECR sebagai registri terpercaya, dan pastikan repositori Amazon ECR dan klaster berada di Wilayah yang sama.

Untuk mengaktifkan fitur ini bahkan ketika registri ECR tidak diatur dalam registri terpercaya, gunakan klasifikasi konfigurasi ini untuk mengatur yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled ke true.

Cara menonaktifkan otentikasi otomatis

Secara default, autentikasi otomatis dinonaktifkan jika tidak ada registri Amazon ECR yang terdeteksi di registri yang tepercaya.

Untuk menonaktifkan autentikasi otomatis, bahkan ketika registri Amazon ECR diatur di registri tepercaya, gunakan klasifikasi konfigurasi ini untuk mengatur yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled ke false.

Cara memeriksa apakah otentikasi otomatis diaktifkan pada cluster

Pada simpul utama, gunakan editor teks seperti vi untuk meninjau isi file: vi /etc/hadoop/conf.empty/yarn-site.xml. Periksa nilai yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled.