Gerbang Kyuubi menyediakan antarmuka Java Database Connectivity (JDBC) dan ODBC untuk menghubungkan EMR Serverless Spark secara mulus dengan kueri SQL dan alat business intelligence (BI), seperti Tableau dan Power BI, sehingga memungkinkan akses dan analisis data yang efisien. Gerbang ini juga mendukung multitenancy dan isolasi resource guna memenuhi kebutuhan aplikasi enterprise.
Buat Gerbang Kyuubi
Buka halaman Gateway.
Login ke Konsol EMR.
Pada panel navigasi di sebelah kiri, pilih .
Pada halaman Spark, klik nama ruang kerja yang ingin Anda kelola.
Pada halaman EMR Serverless Spark, pada panel navigasi di sebelah kiri, klik .
Pada halaman Kyuubi Gateway, klik Create Kyuubi Gateway.
Pada halaman Create Kyuubi Gateway, konfigurasikan parameter berikut lalu klik Create.
Parameter
Deskripsi
Name
Nama gerbang baru. Nama hanya boleh terdiri dari huruf kecil, angka, dan tanda hubung (-). Nama harus dimulai dan diakhiri dengan huruf atau angka.
Kyuubi Gateway Resource
Nilai default adalah
2 CPU, 8 GB.Spesifikasi yang didukung beserta jumlah maksimum koneksi bersamaan yang direkomendasikan adalah sebagai berikut:
1 CPU, 4 GB: 102 CPU, 8 GB: 204 CPU, 16 GB: 308 CPU, 32 GB: 4516 CPU, 64 GB: 8532 CPU, 128 GB: 135
CatatanJika terlalu banyak item konfigurasi Spark, konkurensi instan untuk pengiriman pekerjaan Spark akan menurun.
Kyuubi Version
Versi Kyuubi yang digunakan oleh gerbang.
CatatanJika Anda menggunakan DLF (sebelumnya DLF 2.5) pada tab Data Catalog, Anda harus mengatur Kyuubi Version ke versi 1.9.2-0.0.1 atau lebih baru.
Engine Version
Versi engine yang digunakan oleh gerbang. Untuk informasi selengkapnya mengenai nomor versi engine, lihat Engine versions.
Associated Queue
Gerbang dideploy di antrian yang dipilih. Saat Anda mengirim pekerjaan Spark melalui gerbang, pekerjaan tersebut dikirim menggunakan identitas pembuat gerbang.
Authentication Method
Hanya autentikasi berbasis token yang didukung.
Setelah membuat gerbang, Anda harus menghasilkan token otentikasi unik untuk gerbang tersebut. Token ini digunakan untuk verifikasi identitas dan kontrol akses dalam permintaan selanjutnya. Untuk informasi selengkapnya tentang cara membuat token, lihat Manage gateways.
Service High Availability
Jika Anda mengaktifkan ketersediaan tinggi layanan, tiga atau lebih server Kyuubi akan dideploy untuk mencapai high availability.
Setelah mengaktifkan fitur ini, konfigurasikan parameter berikut:
Number Of Kyuubi Server Deployments: Jumlah server Kyuubi.
Zookeeper Cluster Endpoint: Gerbang Kyuubi dengan ketersediaan tinggi bergantung pada kluster Zookeeper. Masukkan titik akhir kluster Zookeeper. Jika terdapat beberapa node, pisahkan dengan koma (,). Pastikan jaringan terhubung. Contohnya:
zk1:2181,zk2:2181,zk3:2181.
Network Connectivity
Public Endpoint
Fitur ini dinonaktifkan secara default. Jika Anda mengaktifkan fitur ini, sistem akan mengakses Kyuubi melalui titik akhir publik. Jika tidak, Kyuubi diakses melalui titik akhir internal secara default.
Kyuubi Configuration
Masukkan informasi konfigurasi Kyuubi. Pisahkan setiap item dengan spasi. Contoh:
kyuubi.engine.pool.size 1.Hanya konfigurasi Kyuubi berikut yang didukung.
kyuubi.engine.pool.size kyuubi.engine.pool.size.threshold kyuubi.engine.share.level kyuubi.engine.single.spark.session kyuubi.session.engine.idle.timeout kyuubi.session.engine.initialize.timeout kyuubi.engine.security.token.max.lifetime kyuubi.session.engine.check.interval kyuubi.session.idle.timeout kyuubi.session.engine.request.timeout kyuubi.session.engine.login.timeout kyuubi.backend.engine.exec.pool.shutdown.timeout kyuubi.backend.server.exec.pool.shutdown.timeout kyuubi.backend.server.exec.pool.keepalive.time kyuubi.frontend.thrift.login.timeout kyuubi.operation.status.polling.timeout kyuubi.engine.pool.selectPolicy kyuubi.authentication kyuubi.kinit.principal kyuubi.kinit.keytab kyuubi.authentication.ldap.* kyuubi.hadoop.proxyuser.hive.hosts kyuubi.hadoop.proxyuser.hive.groups kyuubi.hadoop.proxyuser.kyuubi.hosts kyuubi.hadoop.proxyuser.kyuubi.groups kyuubi.ha.*Spark Configuration
Masukkan informasi konfigurasi Spark. Pisahkan setiap item dengan spasi. Semua parameter didukung kecuali parameter bertipe
spark.kubernetes.*. Contoh:spark.sql.catalog.paimon.metastore dlf.Pada halaman Kyuubi Gateway, temukan gerbang yang telah Anda buat lalu klik Start pada kolom Actions.
Kelola token
Pada halaman Kyuubi Gateway, temukan gerbang target lalu klik Token Management pada kolom Actions.
Klik Create Token.
Pada kotak dialog Create Token, konfigurasikan parameter, lalu klik OK.
Parameter
Deskripsi
Name
Nama token baru.
Expiration Time
Tetapkan waktu kedaluwarsa token. Jumlah hari harus 1 atau lebih. Secara default, fitur ini diaktifkan dan token kedaluwarsa setelah 365 hari.
Assign Object
CatatanJika Anda menggunakan DLF (sebelumnya DLF 2.5) secara default pada tab Data Catalog, Anda harus mengonfigurasi parameter ini.
Pastikan Pengguna RAM atau Peran RAM yang dikonfigurasi memiliki izin untuk mengakses DLF. Untuk informasi selengkapnya tentang cara memberikan izin, lihat Add an authorization.
Dari daftar drop-down, pilih Pengguna RAM atau Peran RAM yang telah Anda tambahkan di Resource Access Management.
Tentukan Pengguna RAM atau Peran RAM yang akan ditugaskan ke token tersebut. Ini digunakan untuk mengakses DLF saat Anda terhubung ke Gerbang Kyuubi untuk mengirim pekerjaan Spark.
Salin informasi token.
PentingAnda harus segera menyalin informasi token setelah token dibuat karena informasi tersebut tidak dapat diambil kembali nanti. Jika token kedaluwarsa atau hilang, Anda harus membuat token baru atau mereset token tersebut.
Hubungkan ke Gerbang Kyuubi
Saat menghubungkan ke Gerbang Kyuubi, ganti placeholder pada URL JDBC:
<endpoint>: Informasi titik akhir yang dapat Anda peroleh dari tab Overview.<port>: Nomor port. Nomor port adalah 443 untuk titik akhir publik dan 80 untuk titik akhir internal dalam wilayah yang sama.<token>: Informasi token yang telah Anda salin dari halaman Token Management.<tokenname>: Nama token. Anda dapat memperolehnya dari halaman Token Management.<UserName/RoleName>: Pengguna RAM atau Peran RAM yang telah Anda tambahkan ke Resource Access Management.
Hubungkan menggunakan Beeline
Sebelum menghubungkan ke Gerbang Kyuubi, pastikan versi Beeline Anda kompatibel dengan versi server Kyuubi. Jika belum menginstal Beeline, lihat Getting Started - Apache Kyuubi.
Pilih salah satu metode berikut berdasarkan katalog default yang dikonfigurasi pada halaman Data Catalog.
Gunakan DLF (sebelumnya DLF 2.5)
beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<UserName/RoleName>;httpPath=cliservice/token/<token>"Gunakan katalog lain
beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>"Saat menghubungkan menggunakan Beeline, Anda dapat memodifikasi parameter sesi. Contoh: beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>;#spark.sql.shuffle.partitions=100;spark.executor.instances=2;".
Hubungkan menggunakan Java
Perbarui file pom.xml.
Ganti
hadoop-commondanhive-jdbcdengan versi dependensi yang sesuai.<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.9</version> </dependency> </dependencies>Tulis kode Java untuk menghubungkan ke Gerbang Kyuubi.
Pilih salah satu metode berikut berdasarkan katalog default yang dikonfigurasi di halaman Data Catalog.
Gunakan DLF (sebelumnya DLF 2.5)
import org.apache.hive.jdbc.HiveStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class Main { public static void main(String[] args) throws Exception { String url = "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>;user=<UserName/RoleName>"; Class.forName("org.apache.hive.jdbc.HiveDriver"); Connection conn = DriverManager.getConnection(url); HiveStatement stmt = (HiveStatement) conn.createStatement(); String sql = "select * from students;"; System.out.println("Running " + sql); ResultSet res = stmt.executeQuery(sql); ResultSetMetaData md = res.getMetaData(); String[] columns = new String[md.getColumnCount()]; for (int i = 0; i < columns.length; i++) { columns[i] = md.getColumnName(i + 1); } while (res.next()) { System.out.print("Row " + res.getRow() + "=["); for (int i = 0; i < columns.length; i++) { if (i != 0) { System.out.print(", "); } System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'"); } System.out.println(")]"); } conn.close(); } }Gunakan katalog lain
import org.apache.hive.jdbc.HiveStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class Main { public static void main(String[] args) throws Exception { String url = "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>"; Class.forName("org.apache.hive.jdbc.HiveDriver"); Connection conn = DriverManager.getConnection(url); HiveStatement stmt = (HiveStatement) conn.createStatement(); String sql = "select * from students;"; System.out.println("Running " + sql); ResultSet res = stmt.executeQuery(sql); ResultSetMetaData md = res.getMetaData(); String[] columns = new String[md.getColumnCount()]; for (int i = 0; i < columns.length; i++) { columns[i] = md.getColumnName(i + 1); } while (res.next()) { System.out.print("Row " + res.getRow() + "=["); for (int i = 0; i < columns.length; i++) { if (i != 0) { System.out.print(", "); } System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'"); } System.out.println(")]"); } conn.close(); } }
Hubungkan menggunakan Python
Jalankan perintah berikut untuk menginstal paket PyHive dan Thrift.
pip3 install pyhive thriftTulis skrip Python untuk menghubungkan ke Gerbang Kyuubi.
Skrip Python berikut merupakan contoh cara menghubungkan ke Gerbang Kyuubi dan menampilkan daftar database.
Pilih salah satu metode berikut berdasarkan katalog default yang dikonfigurasi di halaman Data Catalog.
Gunakan DLF (sebelumnya DLF 2.5)
from pyhive import hive if __name__ == '__main__': cursor = hive.connect('<endpoint>', port="<port>", scheme='http', username='<UserName/RoleName>', password='<token>').cursor() cursor.execute('show databases') print(cursor.fetchall()) cursor.close()Gunakan katalog lain
from pyhive import hive if __name__ == '__main__': cursor = hive.connect('<endpoint>', port="<port>", scheme='http', username='<tokenname>', password='<token>').cursor() cursor.execute('show databases') print(cursor.fetchall()) cursor.close()
Hubungkan menggunakan REST API
Gerbang Kyuubi menyediakan Representational State Transfer (REST) API yang kompatibel dengan open source untuk mendukung interaksi dengan layanan Kyuubi melalui HTTP. Saat ini, hanya path API berikut yang didukung:
/api/v1/sessions/*/api/v1/operations/*/api/v1/batches/*
Contoh berikut menunjukkan cara menghubungkan ke Gerbang Kyuubi menggunakan REST API.
Contoh 1: Mulai sesi dan jalankan kueri SQL.
Buat sesi dan tentukan konfigurasi Spark.
Pilih salah satu metode berikut berdasarkan katalog default yang dikonfigurasi di halaman Data Catalog.
Catatanspark.emr.serverless.kyuubi.engine.queuemenentukan antrian yang digunakan oleh pekerjaan Spark saat runtime. Ganti<dev_queue>dengan nama antrian aktual.<UserName/Rolename>: Ganti dengan nama pengguna atau nama peran aktual.<password>: Ini adalah placeholder. Anda dapat memasukkan nilai apa pun.
Gunakan DLF (sebelumnya DLF 2.5)
curl -X 'POST' \ 'http://<endpoint>:<port>/api/v1/sessions/token/<token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -u '<UserName/Rolename>:<password>' \ -d '{ "configs": { "set:hivevar:spark.emr.serverless.kyuubi.engine.queue": "<dev_queue>" } }'Gunakan katalog lain
curl -X 'POST' \ 'http://<endpoint>:<port>/api/v1/sessions/token/<token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "configs": { "set:hivevar:spark.emr.serverless.kyuubi.engine.queue": "<dev_queue>" } }'Pesan yang mirip dengan berikut akan dikembalikan. Pada pesan tersebut,
identifiermenunjukkan handle sesi Kyuubi, yang secara unik mengidentifikasi sebuah sesi. Dalam topik ini, nilai ini disebut sebagai<sessionHandle>.{"identifier":"619e6ded-xxxx-xxxx-xxxx-c2a43f6fac46","kyuubiInstance":"0.0.0.0:10099"}Buat statement.
Gunakan DLF (sebelumnya DLF 2.5)
curl -X 'POST' \ 'http://<endpoint>:<port>/api/v1/sessions/<sessionHandle>/operations/statement/token/<token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -u '<UserName/RoleName>:<password>' \ -d '{ "statement": "select * from test;", "runAsync": true, "queryTimeout": 0, "confOverlay": { "additionalProp1": "string", "additionalProp2": "string" } }'Gunakan katalog lain
curl -X 'POST' \ 'http://<endpoint>:<port>/api/v1/sessions/<sessionHandle>/operations/statement/token/<token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "statement": "select * from test;", "runAsync": true, "queryTimeout": 0, "confOverlay": { "additionalProp1": "string", "additionalProp2": "string" } }'Pesan yang mirip dengan berikut akan dikembalikan. Di sini,
identifiermenunjukkan handle operasi Kyuubi, yang secara unik mengidentifikasi operasi tertentu. Dalam topik ini, nilai ini disebut sebagai<operationHandle>.{"identifier":"a743e8ff-xxxx-xxxx-xxxx-a66fec66cfa4"}Ambil status statement.
Gunakan DLF (sebelumnya DLF 2.5)
curl --location -X 'GET' \ 'http://<endpoint>:<port>/api/v1/operations/<operationHandle>/event/token/<token>' \ -H 'accept: application/json' \ -u '<UserName/RoleName>:<password>'Gunakan katalog lain
curl --location -X 'GET' \ 'http://<endpoint>:<port>/api/v1/operations/<operationHandle>/event/token/<token>' \ -H 'accept: application/json'Ambil hasil statement.
Gunakan DLF (sebelumnya DLF 2.5)
curl --location -X 'GET' \ 'http://<endpoint>:<port>/api/v1/operations/<operationHandle>/rowset/token/<token>/?maxrows=100&fetchorientation=FETCH_NEXT' \ -H 'accept: application/json' \ -u '<UserName/RoleName>:<password>'Gunakan katalog lain
curl --location -X 'GET' \ 'http://<endpoint>:<port>/api/v1/operations/<operationHandle>/rowset/token/<token>/?maxrows=100&fetchorientation=FETCH_NEXT' \ -H 'accept: application/json'
Contoh 2: Gunakan API batches untuk mengirim pekerjaan batch.
Anda dapat mengirim pekerjaan pemrosesan batch Spark ke Gerbang Kyuubi menggunakan REST API. Gerbang Kyuubi akan memulai aplikasi Spark dan menjalankan tugas yang ditentukan berdasarkan parameter dalam permintaan.
Pada contoh ini, selain mengganti informasi seperti
<endpoint>,<port>, dan<token>, Anda juga harus mengunduh paket JAR uji dengan mengklik spark-examples_2.12-3.3.1.jar.CatatanPaket JAR ini merupakan contoh sederhana yang disertakan dengan Spark. Paket ini digunakan untuk menghitung nilai Pi (π).
Gunakan DLF (sebelumnya DLF 2.5)
curl --location \ --request POST 'http://<endpoint>:<port>/api/v1/batches/token/<token>' \ --user '<UserName/RoleName>:<password>' \ --form 'batchRequest="{ \"batchType\": \"SPARK\", \"className\": \"org.apache.spark.examples.SparkPi\", \"name\": \"kyuubi-spark-pi\", \"resource\": \"oss://bucket/path/to/spark-examples_2.12-3.3.1.jar\" }";type=application/json'Gunakan katalog lain
curl --location \ --request POST 'http://<endpoint>:<port>/api/v1/batches/token/<token>' \ --form 'batchRequest="{ \"batchType\": \"SPARK\", \"className\": \"org.apache.spark.examples.SparkPi\", \"name\": \"kyuubi-spark-pi\", \"resource\": \"oss://bucket/path/to/spark-examples_2.12-3.3.1.jar\" }";type=application/json'
Konfigurasi dan hubungkan ke Gerbang Kyuubi dengan ketersediaan tinggi
Buat konektivitas jaringan.
Untuk informasi selengkapnya, lihat Establish network connectivity between EMR Serverless Spark and other VPCs. Pastikan klien Anda dapat mengakses kluster Zookeeper di VPC target. Misalnya, Anda dapat menggunakan komponen Zookeeper dari Alibaba Cloud MSE atau EMR on ECS.
Aktifkan ketersediaan tinggi untuk Gerbang Kyuubi.
Saat membuat atau mengedit Gerbang Kyuubi, aktifkan Service High Availability, konfigurasikan parameter terkait, dan pilih koneksi jaringan yang telah dibuat untuk Network Connectivity.
Hubungkan ke Gerbang Kyuubi dengan ketersediaan tinggi.
Setelah menyelesaikan konfigurasi di atas, Gerbang Kyuubi dikonfigurasi untuk ketersediaan tinggi melalui Zookeeper. Anda dapat memverifikasi ketersediaannya dengan menghubungkannya melalui REST API atau JDBC.
Saat menghubungkan ke Gerbang Kyuubi, ganti placeholder pada URL JDBC:
<endpoint>: Informasi titik akhir yang dapat Anda peroleh dari tab Overview.<port>: Nomor port. Nomor port adalah 443 untuk titik akhir publik dan 80 untuk titik akhir internal dalam wilayah yang sama.<token>: Informasi token yang telah Anda salin dari halaman Token Management.<tokenname>: Nama token. Anda dapat memperolehnya dari halaman Token Management.<UserName/RoleName>: Pengguna RAM atau Peran RAM yang telah Anda tambahkan ke Resource Access Management.
Contoh berikut menunjukkan cara menghubungkan ke Gerbang Kyuubi dengan ketersediaan tinggi.
Hubungkan menggunakan Beeline
Unduh file JAR JDBC Driver dengan mengklik kyuubi-hive-jdbc-1.9.2.jar.
Ganti file JAR JDBC Driver.
Cadangkan dan pindahkan file JAR JDBC Driver asli.
mv /your_path/apache-kyuubi-1.9.2-bin/beeline-jars /bak_pathCatatanJika Anda menggunakan EMR on ECS, path default untuk Kyuubi adalah
/opt/apps/KYUUBI/kyuubi-1.9.2-1.0.0/beeline-jars. Jika Anda tidak mengetahui path instalasi Kyuubi, Anda dapat menemukannya dengan menjalankan perintahenv | grep KYUUBI_HOME.Ganti dengan file JAR JDBC Driver baru.
cp /download/serverless-spark-kyuubi-hive-jdbc-1.9.2.jar /your_path/apache-kyuubi-1.9.2-bin/beeline-jars
Hubungkan menggunakan Beeline.
/your_path/apache-kyuubi-1.9.2-bin/bin/beeline -u 'jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>'
Hubungkan menggunakan Java
Unduh paket shaded dengan mengklik serverless-spark-kyuubi-hive-jdbc-shaded-1.9.2.jar.
Instal JDBC Driver ke repositori Maven.
Jalankan perintah berikut untuk menginstal JDBC Driver yang disediakan oleh Serverless Spark ke repositori Maven lokal Anda.
mvn install:install-file \ -Dfile=/download/serverless-spark-kyuubi-hive-jdbc-shaded-1.9.2.jar \ -DgroupId=org.apache.kyuubi \ -DartifactId=kyuubi-hive-jdbc-shaded \ -Dversion=1.9.2-ss \ -Dpackaging=jarModifikasi file
pom.xml.Tambahkan dependensi berikut ke file
pom.xmlproyek Anda.<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.kyuubi</groupId> <artifactId>kyuubi-hive-jdbc-shaded</artifactId> <version>1.9.2-ss</version> </dependency> </dependencies>Tulis kode Java contoh.
import org.apache.kyuubi.jdbc.hive.KyuubiStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class Main { public static void main(String[] args) throws Exception { String url = "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>"; Class.forName("org.apache.kyuubi.jdbc.KyuubiHiveDriver"); Connection conn = DriverManager.getConnection(url); KyuubiStatement stmt = (KyuubiStatement) conn.createStatement(); String sql = "select * from test;"; ResultSet res = stmt.executeQuery(sql); ResultSetMetaData md = res.getMetaData(); String[] columns = new String[md.getColumnCount()]; for (int i = 0; i < columns.length; i++) { columns[i] = md.getColumnName(i + 1); } while (res.next()) { System.out.print("Row " + res.getRow() + "=["); for (int i = 0; i < columns.length; i++) { if (i != 0) { System.out.print(", "); } System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'"); } System.out.println(")]"); } conn.close(); } }
Lihat daftar pekerjaan Spark yang dikirim oleh Kyuubi
Untuk pekerjaan Spark yang dikirim melalui Kyuubi, Anda dapat melihat informasi detail pekerjaan pada tab Kyuubi Application di halaman Job History. Informasi ini mencakup Application ID, Application Name, Application Status, dan Start Time, yang membantu Anda memahami dan mengelola pekerjaan Spark yang dikirim oleh Kyuubi.
Pada halaman Kyuubi Gateway, klik Gerbang Kyuubi target.
Di pojok kanan atas, klik Application List.

Pada halaman ini, Anda dapat melihat detail semua pekerjaan Spark yang dikirim melalui Gerbang Kyuubi ini. Application ID (spark-xxxx) dihasilkan oleh engine Spark dan identik dengan Application ID yang dikembalikan saat Anda terhubung dengan klien Kyuubi. ID ini secara unik mengidentifikasi instans tugas.
