Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jalankan aplikasi Spark dengan Docker di Amazon 6.x EMR
Dengan Amazon EMR 6.0.0, aplikasi Spark dapat menggunakan kontainer Docker untuk menentukan dependensi pustaka mereka, alih-alih menginstal dependensi pada instance Amazon individual di cluster. EC2 Untuk menjalankan Spark dengan Docker, Anda harus terlebih dahulu mengkonfigurasi registri Docker dan menentukan parameter tambahan saat mengirimkan aplikasi Spark. Untuk informasi lebih lanjut, lihat Mengkonfigurasi integrasi Docker.
Saat aplikasi dikirimkan, YARN memanggil Docker untuk menarik gambar Docker yang ditentukan dan menjalankan aplikasi Spark di dalam wadah Docker. Hal ini memungkinkan Anda untuk dengan mudah menentukan dan mengisolasi dependensi. Ini mengurangi waktu untuk bootstrap atau menyiapkan instance di EMR cluster Amazon dengan pustaka yang diperlukan untuk eksekusi pekerjaan.
Pertimbangan saat menjalankan Spark dengan Docker
Saat Anda menjalankan Spark dengan Docker, pastikan prasyarat berikut terpenuhi:
-
docker
Paket dan CLI hanya diinstal pada node inti dan tugas. -
Di Amazon EMR 6.1.0 dan yang lebih baru, Anda dapat menginstal Docker pada node utama dengan menggunakan perintah berikut.
-
sudo yum install -y docker sudo systemctl start docker
-
-
spark-submit
Perintah harus selalu dijalankan dari instance utama di EMR cluster Amazon. -
Registri Docker yang digunakan untuk menyelesaikan gambar Docker harus ditentukan menggunakan Klasifikasi API dengan kunci
container-executor
klasifikasi untuk menentukan parameter tambahan saat meluncurkan cluster:-
docker.trusted.registries
-
docker.privileged-containers.registries
-
-
Untuk menjalankan aplikasi Spark dalam wadah Docker, pilihan konfigurasi berikut diperlukan:
-
YARN_CONTAINER_RUNTIME_TYPE=docker
-
YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={DOCKER_IMAGE_NAME}
-
-
Saat menggunakan Amazon ECR untuk mengambil gambar Docker, Anda harus mengonfigurasi cluster untuk mengautentikasi dirinya sendiri. Untuk melakukannya, Anda harus menggunakan opsi konfigurasi berikut:
-
YARN_ _ _ CONTAINER _ _ = {RUNTIME_ _ DOCKER _ _ CLIENT _ _ _ _ _ DOCKER _ _ _ _ _ CONFIG = {CLIENT_ CONFIG _ _ _ PATH _ HDFS _ _ _
-
-
Di Amazon EMR 6.1.0 dan yang lebih baru, Anda tidak diharuskan menggunakan perintah yang terdaftar
YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG={DOCKER_CLIENT_CONFIG_PATH_ON_HDFS}
saat fitur autentikasi ECR otomatis diaktifkan. -
Setiap gambar Docker digunakan dengan Spark harus memiliki Java diinstal pada gambar Docker.
Untuk informasi selengkapnya tentang prasyarat, lihat prasyarat, lihat. Mengkonfigurasi integrasi Docker.
Membuat gambar Docker
Docker gambar dibuat menggunakan Dockerfile, yang mendefinisikan paket dan konfigurasi untuk memasukkan dalam gambar. Berikut dua contoh penggunaan Dockerfiles dan PySpark SparkR.
PySpark Dockerfile
Gambar Docker yang dibuat dari Dockerfile ini termasuk Python 3 dan paket Python. NumPy Dockerfile ini menggunakan Amazon Linux 2 dan Amazon Corretto 8. JDK
FROM amazoncorretto:8 RUN yum -y update RUN yum -y install yum-utils RUN yum -y groupinstall development RUN yum list python3* RUN yum -y install python3 python3-dev python3-pip python3-virtualenv RUN python -V RUN python3 -V ENV PYSPARK_DRIVER_PYTHON python3 ENV PYSPARK_PYTHON python3 RUN pip3 install --upgrade pip RUN pip3 install numpy pandas RUN python3 -c "import numpy as np"
SparkR Dockerfile
Gambar Docker yang dibuat dari Dockerfile ini termasuk R dan paketnya. randomForest CRAN Dockerfile ini mencakup Amazon Linux 2 dan Amazon Corretto 8. JDK
FROM amazoncorretto:8 RUN java -version RUN yum -y update RUN amazon-linux-extras install R4 RUN yum -y install curl hostname #setup R configs RUN echo "r <- getOption('repos'); r['CRAN'] <- 'http://cran.us.r-project.org'; options(repos = r);" > ~/.Rprofile RUN Rscript -e "install.packages('randomForest')"
Untuk informasi selengkapnya tentang sintaks Dockerfile, lihat bagian Dokumentasi referensi berkas docker
Menggunakan gambar Docker dari Amazon ECR
Amazon Elastic Container Registry (AmazonECR) adalah registri kontainer Docker yang dikelola sepenuhnya, yang memudahkan untuk menyimpan, mengelola, dan menyebarkan gambar kontainer Docker. Saat menggunakan AmazonECR, cluster harus dikonfigurasi untuk mempercayai instance AndaECR, dan Anda harus mengonfigurasi autentikasi agar cluster dapat menggunakan gambar Docker dari Amazon. ECR Untuk informasi selengkapnya, lihat Mengonfigurasi YARN untuk mengakses Amazon ECR.
Untuk memastikan bahwa EMR host Amazon dapat mengakses gambar yang disimpan di AmazonECR, klaster Anda harus memiliki izin dari AmazonEC2ContainerRegistryReadOnly
kebijakan yang terkait dengan profil instance. Untuk informasi selengkapnya, lihat Kebijakan AmazonEC2ContainerRegistryReadOnly
.
Dalam contoh ini, cluster harus dibuat dengan konfigurasi tambahan berikut untuk memastikan bahwa ECR registri Amazon dipercaya. Ganti titik 123456789123.dkr.ecr.us-east-1.amazonaws.com
akhir dengan titik ECR akhir Amazon Anda.
[ { "Classification": "container-executor", "Configurations": [ { "Classification": "docker", "Properties": { "docker.privileged-containers.registries": "local,centos,123456789123.dkr.ecr.us-east-1.amazonaws.com", "docker.trusted.registries": "local,centos,123456789123.dkr.ecr.us-east-1.amazonaws.com" } } ], "Properties": {} } ]
Menggunakan PySpark dengan Amazon ECR
Contoh berikut menggunakan PySpark Dockerfile, yang akan ditandai dan diunggah ke Amazon. ECR Setelah Anda mengunggah Dockerfile, Anda dapat menjalankan PySpark pekerjaan dan merujuk ke gambar Docker dari Amazon. ECR
Setelah Anda meluncurkan cluster, gunakan SSH untuk terhubung ke node inti dan jalankan perintah berikut untuk membangun image Docker lokal dari contoh PySpark Dockerfile.
Pertama, membuat direktori dan Dockerfile.
mkdir pyspark vi pyspark/Dockerfile
Rekatkan konten PySpark Dockerfile dan jalankan perintah berikut untuk membuat image Docker.
sudo docker build -t local/pyspark-example pyspark/
Buat emr-docker-examples
ECR repositori untuk contoh.
aws ecr create-repository --repository-name emr-docker-examples
Tandai dan unggah gambar yang dibuat secara lokal keECR, ganti 123456789123.dkr.ecr.us-east-1.amazonaws.com
dengan titik ECR akhir Anda.
sudo docker tag local/pyspark-example 123456789123.dkr.ecr.us-east-1.amazonaws.com/emr-docker-examples:pyspark-example sudo docker push
123456789123.dkr.ecr.us-east-1.amazonaws.com
/emr-docker-examples:pyspark-example
Gunakan SSH untuk terhubung ke node utama dan menyiapkan skrip Python dengan nama file. main.py
Tempelkan konten berikut ke file main.py
dan simpan.
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("docker-numpy").getOrCreate() sc = spark.sparkContext import numpy as np a = np.arange(15).reshape(3, 5) print(a)
Di Amazon EMR 6.0.0, untuk mengirimkan pekerjaan, rujuk nama gambar Docker. Tentukan parameter konfigurasi tambahan untuk memastikan bahwa eksekusi pekerjaan menggunakan Docker sebagai runtime. Saat menggunakan AmazonECR, YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG
harus mereferensikan config.json
file yang berisi kredensil yang digunakan untuk mengautentikasi ke Amazon. ECR
DOCKER_IMAGE_NAME=123456789123.dkr.ecr.us-east-1.amazonaws.com/emr-docker-examples:pyspark-example DOCKER_CLIENT_CONFIG=hdfs:///user/hadoop/config.json spark-submit --master yarn \ --deploy-mode cluster \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=$DOCKER_CLIENT_CONFIG \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=$DOCKER_CLIENT_CONFIG \ --num-executors 2 \ main.py -v
Di Amazon EMR 6.1.0 dan yang lebih baru, untuk mengirimkan pekerjaan, rujuk nama gambar Docker. Saat autentikasi ECR otomatis diaktifkan, jalankan perintah berikut.
DOCKER_IMAGE_NAME=123456789123.dkr.ecr.us-east-1.amazonaws.com/emr-docker-examples:pyspark-example spark-submit --master yarn \ --deploy-mode cluster \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --num-executors 2 \ main.py -v
Ketika pekerjaan selesai, perhatikan ID YARN aplikasi, dan gunakan perintah berikut untuk mendapatkan output dari PySpark pekerjaan.
yarn logs --applicationId application_id | grep -C2 '\[\[' LogLength:55 LogContents: [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
Menggunakan SparkR dengan Amazon ECR
Contoh berikut menggunakan SparkR Dockerfile, yang akan ditandai dan diunggah ke. ECR Setelah Dockerfile diunggah, Anda dapat menjalankan pekerjaan SparkR dan merujuk ke gambar Docker dari Amazon. ECR
Setelah Anda meluncurkan cluster, gunakan SSH untuk terhubung ke node inti dan jalankan perintah berikut untuk membangun image Docker lokal dari contoh SparkR Dockerfile.
Pertama, buat direktori dan Dockerfile.
mkdir sparkr vi sparkr/Dockerfile
Paste isi dari SparkR Dockerfile dan jalankan perintah berikut untuk membangun gambar Docker.
sudo docker build -t local/sparkr-example sparkr/
Beri tag dan unggah gambar yang dibuat secara lokal ke AmazonECR, ganti 123456789123.dkr.ecr.us-east-1.amazonaws.com
dengan titik ECR akhir Amazon Anda.
sudo docker tag local/sparkr-example
123456789123.dkr.ecr.us-east-1.amazonaws.com
/emr-docker-examples:sparkr-example sudo docker push123456789123.dkr.ecr.us-east-1.amazonaws.com
/emr-docker-examples:sparkr-example
Gunakan SSH untuk terhubung ke node utama dan siapkan skrip R dengan namasparkR.R
. Tambahkan konten berikut ini ke file sparkR.R
.
library(SparkR) sparkR.session(appName = "R with Spark example", sparkConfig = list(spark.some.config.option = "some-value")) sqlContext <- sparkRSQL.init(spark.sparkContext) library(randomForest) # check release notes of randomForest rfNews() sparkR.session.stop()
Di Amazon EMR 6.0.0, untuk mengirimkan pekerjaan, lihat nama gambar Docker. Tentukan parameter konfigurasi tambahan untuk memastikan bahwa eksekusi pekerjaan menggunakan Docker sebagai runtime. Saat menggunakan AmazonECR, YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG
harus merujuk ke config.json
file yang berisi kredensil yang digunakan untuk mengautentikasi. ECR
DOCKER_IMAGE_NAME=123456789123.dkr.ecr.us-east-1.amazonaws.com/emr-docker-examples:sparkr-example DOCKER_CLIENT_CONFIG=hdfs:///user/hadoop/config.json spark-submit --master yarn \ --deploy-mode cluster \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=$DOCKER_CLIENT_CONFIG \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=$DOCKER_CLIENT_CONFIG \ sparkR.R
Di Amazon EMR 6.1.0 dan yang lebih baru, untuk mengirimkan pekerjaan, rujuk nama gambar Docker. Saat autentikasi ECR otomatis diaktifkan, jalankan perintah berikut.
DOCKER_IMAGE_NAME=123456789123.dkr.ecr.us-east-1.amazonaws.com/emr-docker-examples:sparkr-example spark-submit --master yarn \ --deploy-mode cluster \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \ sparkR.R
Ketika pekerjaan telah selesai, catat ID YARN aplikasi, dan gunakan perintah berikut untuk mendapatkan output dari pekerjaan SparkR. Contoh ini mencakup pengujian untuk memastikan bahwa randomForest pustaka, versi yang diinstal, dan catatan rilis tersedia.
yarn logs --applicationId application_id | grep -B4 -A10 "Type rfNews" randomForest 4.6-14 Type rfNews() to see new features/changes/bug fixes. Wishlist (formerly TODO): * Implement the new scheme of handling classwt in classification. * Use more compact storage of proximity matrix. * Allow case weights by using the weights in sampling? ======================================================================== Changes in 4.6-14: