Kyuubi dalam kluster E-MapReduce (EMR) menjalankan Spark 3.x di atas YARN. Setiap engine Spark 3.x dipetakan ke satu aplikasi Spark di YARN. Flink, Trino, dan Spark 2.x tidak didukung.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginstal YARN dan Spark 3.x di kluster EMR.
Mengotentikasi semua pengguna melalui Lightweight Directory Access Protocol (LDAP) atau Kerberos.
Tingkat berbagi
Tingkat berbagi menentukan jumlah pengguna yang berbagi satu engine Kyuubi. Atur kyuubi.engine.share.level pada tab kyuubi-defaults.conf di halaman layanan Kyuubi di Konsol EMR.
| Tingkat berbagi | Cakupan engine | Tingkat isolasi | Kemampuan berbagi | Kasus penggunaan |
|---|---|---|---|---|
| CONNECTION | Satu engine per session | Tinggi | Rendah | ETL skala besar, kueri ad hoc |
| USER | Satu engine per pengguna | Sedang | Sedang | — |
| GROUP | Satu engine per resource group | Rendah | Tinggi | — |
| SERVER | Satu engine per kluster | Tertinggi (kluster berkeamanan tinggi) / Terendah (kluster standar) | Kluster berkeamanan tinggi: hanya administrator | Administrator |
Kirim pekerjaan ke engine Kyuubi
Server Kyuubi secara otomatis memulai dan menghentikan engine. Ketika pengguna baru terhubung melalui kyuubi-beeline untuk pertama kalinya, server akan meluncurkan engine Spark 3.x baru—tanpa perlu pemulaian manual.
Contoh berikut menggunakan tingkat berbagi USER. Semua pengguna telah melewati autentikasi LDAP atau Kerberos.
Kirim pekerjaan sebagai pengguna baru
Saat user1 terhubung untuk pertama kalinya, server Kyuubi secara otomatis memulai engine Spark 3.x baru:
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \
-f query1.sqlKonfigurasikan resource executor Spark
Terdapat dua metode untuk mengonfigurasi resource yang digunakan oleh engine Spark 3.x.
Metode 1: Atur resource di URL JDBC
Kirim parameter Spark langsung melalui URL koneksi:
# Atur konfigurasi pengguna melalui URL koneksi JDBC
kyuubi-beeline -n user2 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000?spark.dynamicAllocation.enabled=false;spark.executor.cores=2;spark.executor.memory=4g;spark.executor.instances=4" \
-f query1.sqlMetode 2: Atur default per pengguna di kyuubi-defaults.conf
Tambahkan entri khusus pengguna dalam format ___username___.spark.param=value pada tab kyuubi-defaults.conf:
# Atur konfigurasi default pengguna di kyuubi-defaults.conf
# ___user2___.spark.dynamicAllocation.enabled=false
# ___user2___.spark.executor.memory=5g
# ___user2___.spark.executor.cores=2
# ___user2___.spark.executor.instances=10
kyuubi-beeline -n user2 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \
-f query1.sqlGunakan kembali engine yang sedang berjalan
Setelah pekerjaan selesai, engine Spark 3.x tetap aktif selama periode tertentu sebelum dimatikan. Mengirim pekerjaan lain dalam periode tersebut akan menggunakan kembali engine yang ada alih-alih meluncurkan aplikasi YARN baru, sehingga mengurangi waktu startup pekerjaan.
Timeout idle dikontrol oleh kyuubi.session.engine.idle.timeout (default: PT30M, 30 menit). Untuk mengubah timeout ini, perbarui parameter tersebut pada tab kyuubi-defaults.conf.
Kirim pekerjaan ke engine berbeda dari pengguna yang sama
Untuk menjalankan beban kerja di engine terpisah untuk lini bisnis berbeda, gunakan kyuubi.engine.share.level.subdomain di URL JDBC:
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \
-f query1.sql
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \
-f query2.sql
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \
-f query3.sqlSetiap subdomain dipetakan ke engine Spark yang berbeda, sehingga biz1, biz2, dan biz3 berjalan secara terisolasi.
Berbagi satu engine di beberapa session
Beberapa session dari pengguna yang sama berbagi satu engine Spark 3.x. Misalnya, jika user1 mengirim dua pekerjaan dari terminal terpisah secara bersamaan, kedua pekerjaan tersebut berjalan pada engine yang sama:
# Terminal 1
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/biz1" \
-f query1.sql
# Terminal 2
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/biz2" \
-f query2.sqlResource executor dialokasikan sesuai aturan penjadwalan default Spark.