Elastic Remote Direct Memory Access (eRDMA) memungkinkan pemrosesan permintaan dengan latensi ultra-rendah. Topik ini menjelaskan cara membuat cluster Spark menggunakan instance Elastic Compute Service (ECS) yang ditingkatkan dengan eRDMA sebagai node dan menguji kinerja pemrosesan beban menggunakan Benchmark.
Informasi latar belakang
Benchmark adalah alat pengujian kinerja yang digunakan untuk mengevaluasi waktu eksekusi beban, laju transmisi, throughput, dan pemanfaatan sumber daya.
Langkah 1: Persiapan awal
Sebelum menguji kinerja pemrosesan beban cluster Spark, siapkan lingkungan yang diperlukan, termasuk mesin Hadoop dan Spark, instalasi Hadoop, serta konfigurasi eRDMA.
Siapkan lingkungan Hadoop. Jika cluster Hadoop sudah tersedia, lewati langkah ini.
Persyaratan Perangkat Keras dan Perangkat Lunak:
Gunakan versi Hadoop, Spark, dan instance ECS berikut:
Versi Hadoop: Hadoop 3.2.1.
Versi Spark: Spark 3.2.1.
Instance ECS:
Tipe Instance ECS: Lihat Ikhtisar.
Jumlah vCPU per Instance ECS: 16.
Jumlah Instance ECS: Empat. Satu instance ECS berfungsi sebagai node master, dan tiga instance lainnya sebagai node pekerja dalam cluster Hadoop.
Prosedur Instalasi:
Masuk ke instance ECS yang bertindak sebagai node master.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.
Konfigurasikan eRDMA.
Instal driver yang diperlukan.
Untuk detail lebih lanjut, lihat Aktifkan eRDMA pada instance tingkat perusahaan.
Konfigurasikan pengaturan jaringan.
Jalankan perintah berikut untuk membuka file
hosts:vim /etc/hostsTekan tombol I untuk masuk ke mode Sisipkan dan modifikasi konten berikut dalam file:
192.168.201.83 poc-t5m0 master1 192.168.201.84 poc-t5w0 192.168.201.86 poc-t5w1 192.168.201.85 poc-t5w2CatatanGanti alamat IP dengan alamat IP antarmuka eRDMA (ERI) aktual.
Tekan tombol Esc untuk keluar dari mode Sisipkan. Masukkan
:wqdan tekan tombol Enter untuk menyimpan dan keluar dari file.
Konfigurasikan Yet Another Resource Negotiator (YARN).
CatatanJika Network Interface Controller (NIC) default instance ECS mendukung eRDMA, Anda tidak perlu mengonfigurasi YARN.
Jalankan perintah berikut untuk membuka file yarn-env.sh:
cd /opt/hadoop-3.2.1/etc/hadoop vim yarn-env.shTekan tombol I untuk masuk ke mode Sisipkan dan tambahkan konten berikut ke dalam file:
RDMA_IP=`ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1` export YARN_NODEMANAGER_OPTS="-Dyarn.nodemanager.hostname=$RDMA_IP"CatatanGanti eth1 dengan nama ERI aktual.
Tekan tombol Esc untuk keluar dari mode Sisipkan. Masukkan
:wqdan tekan tombol Enter untuk menyimpan dan keluar dari file.
Konfigurasikan Spark.
CatatanJika NIC default instance ECS mendukung eRDMA, Anda tidak perlu mengonfigurasi Spark.
Jalankan perintah berikut untuk membuka file spark-env.sh:
cd /opt/spark-3.2.1-bin-hadoop3.2/conf vim spark-env.shTekan tombol I untuk masuk ke mode Sisipkan dan tambahkan konten berikut ke dalam file:
export SPARK_LOCAL_IP=`/sbin/ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1`CatatanGanti eth1 dengan nama ERI aktual.
Tekan tombol Esc untuk keluar dari mode Sisipkan. Masukkan
:wqdan tekan tombol Enter untuk menyimpan dan keluar dari file.
Jalankan perintah berikut untuk memulai Hadoop Distributed File System (HDFS) dan YARN:
$HADOOP_HOME/sbin/start-all.sh
Langkah 2: Unduh paket instalasi Benchmark
Bagian ini menjelaskan cara mengunduh paket instalasi Benchmark.
Jalankan perintah berikut untuk mengunduh paket instalasi Benchmark:
wget https://mracc-release.oss-cn-beijing.aliyuncs.com/erdma-spark/spark-erdma-jverbs.tar.gzJalankan perintah berikut untuk mengekstrak paket instalasi
spark-erdma-jverbs.tar.gz:tar -zxvf spark-erdma-jverbs.tar.gzKomponen berikut termasuk dalam paket instalasi:
erdmalib: library native yang diperlukan untuk menjalankan plugin spark-erdma. Library ini sesuai dengan file libdisni.so.
plugin-sparkrdma: plugin dan library dependensi yang mendukung Spark RDMA, yang sesuai dengan file spark-eRDMA-1.0-for-spark-3.2.1.jar dan disni-2.1-jar-with-dependencies.jar.
Langkah 3: Jalankan uji coba Benchmark
Bagian ini menjelaskan cara menggunakan Benchmark untuk menguji kinerja pemrosesan beban cluster Spark.
Jalankan perintah berikut untuk memodifikasi rute IP.
CatatanJika NIC default instance ECS Anda mendukung eRDMA, lewati langkah ini.
route del -net 192.168.201.0 netmask 255.255.255.0 metric 0 dev eth0 && \ route add -net 192.168.201.0 netmask 255.255.255.0 metric 1000 dev eth0CatatanGanti alamat IP dengan alamat gateway IP dari ERI aktual.
Konfigurasikan Spark.
Jalankan perintah berikut untuk membuka file konfigurasi spark-jverbs-erdma.conf:
vim /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.confTekan tombol I untuk masuk ke mode Sisipkan dan modifikasi konten berikut dalam file:
spark.master yarn spark.deploy-mode client #driver spark.driver.cores 4 spark.driver.memory 19g #executor spark.executor.instances 12 spark.executor.memory 10g spark.executor.cores 4 spark.executor.heartbeatInterval 60s #shuffle spark.task.maxFailures 4 spark.default.parallelism 36 spark.sql.shuffle.partitions 192 spark.shuffle.compress true spark.shuffle.spill.compress true #other spark.network.timeout 3600 spark.sql.broadcastTimeout 3600 spark.eventLog.enabled false spark.eventLog.dir hdfs://master1:9000/sparklogs spark.eventLog.compress true spark.yarn.historyServer.address master1:18080 spark.serializer org.apache.spark.serializer.KryoSerializer #eRDMA spark.driver.extraLibraryPath /path/erdmalib spark.executor.extraLibraryPath /path/erdmalib spark.driver.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.executor.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.shuffle.manager org.apache.spark.shuffle.sort.RdmaShuffleManager spark.shuffle.sort.io.plugin.class org.apache.spark.shuffle.rdma.RdmaLocalDiskShuffleDataIO spark.shuffle.rdma.recvQueueDepth 128CatatanAtur parameter
spark.shuffle.compressmenjadifalseuntuk mencapai rasio akselerasi yang lebih baik.Dalam contoh kode sebelumnya, pengaturan sumber daya Spark seperti parameter
spark.executor.instances,spark.executor.memory,spark.executor.cores, danspark.sql.shuffle.partitionsdari instance ECS yang memiliki 32 vCPU dan 128 GB memori digunakan. Modifikasi pengaturan sumber daya Spark berdasarkan skala cluster atau spesifikasi instance aktual.
Tekan tombol Esc untuk keluar dari mode Sisipkan. Masukkan
:wqdan tekan tombol Enter untuk menyimpan dan keluar dari file.
Jalankan perintah berikut secara berurutan untuk menghasilkan data:
cd /opt/spark-3.2.1-bin-hadoop3.2/conf spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-normal.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_DataGen spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar hdfs://master1:9000/tmp/tpcds_400 tpcds_400 400 parquetCatatan400menunjukkan jumlah data yang dihasilkan. Unit: GB. Ubah nilai berdasarkan skala cluster.Jalankan perintah berikut untuk menjalankan uji coba Benchmark:
spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_RunAllQuery spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar all hdfs://master1:9000/tmp/tpcds_400 tpcds_400 /tmp/tpcds_400_resultKeluaran perintah berikut menunjukkan bahwa pengujian telah selesai. Anda dapat melihat waktu eksekusi beban cluster Spark dalam hasil pengujian.
CatatanAnda dapat menghapus konfigurasi plugin spark-erdma dari file di direktori conf Spark atau masuk ke cluster Spark lain yang tidak mendukung eRDMA, dan gunakan metode sebelumnya untuk melakukan pengujian Benchmark lainnya. Kemudian, Anda dapat membandingkan dua hasil pengujian untuk mengetahui perbedaan kinerja antara cluster Spark yang mendukung eRDMA dan cluster Spark yang tidak mendukung eRDMA.