Apache Spark secara native mendukung akses ke MySQL melalui JDBC Connector. Serverless Spark secara otomatis memuat driver JDBC MySQL (versi 8.0.33) saat startup. Anda dapat menghubungkan ke MySQL menggunakan session SQL, task batch, atau Notebook untuk membaca dan menulis data.
Prasyarat
-
Anda telah membuat ruang kerja Serverless Spark. Untuk informasi selengkapnya, lihat Create a workspace.
-
Anda telah membuat instans MySQL.
Anda dapat menggunakan instans MySQL yang dikelola sendiri atau layanan database Alibaba Cloud, seperti RDS for MySQL atau PolarDB for MySQL.
Topik ini menggunakan RDS for MySQL sebagai contoh. Untuk informasi selengkapnya, lihat Create and configure an RDS for MySQL instance.
Catatan penggunaan
Pastikan konektivitas jaringan antara Serverless Spark dan MySQL. Untuk detail konfigurasi, lihat Establish network connectivity between EMR Serverless Spark and other VPCs.
Saat mengonfigurasi aturan security group, buka hanya port yang diperlukan. Contoh ini memerlukan pembukaan port TCP 3306.
Prosedur
Metode 1: Menggunakan session SQL
-
Buat session SQL. Di Sessions, buat session SQL dan pilih Normal Network Connection yang telah dikonfigurasi sebelumnya. Untuk informasi selengkapnya, lihat Create an SQL session.
-
Buat task SQL. Di Development, buat task Spark SQL dan jalankan SQL berikut.
CREATE TEMPORARY VIEW test USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:mysql://<jdbc_url>/', dbtable '<db>.<table>', user '<username>', password '<password>' ); SELECT * FROM test;Tabel berikut menjelaskan parameter tersebut.
Parameter
Deskripsi
urlString koneksi JDBC. Formatnya adalah
jdbc:mysql://<jdbc_url>/. Ganti<jdbc_url>dengan nilai aktual.dbtableTabel database yang akan dibaca. Formatnya adalah
<db>.<table>. Topik ini menggunakantest_mysql_db.testsebagai contoh.userUsername untuk database MySQL.
CatatanUser harus memiliki izin baca pada tabel target.
passwordPassword untuk database MySQL.
Jika kueri mengembalikan konten tabel, koneksi berhasil.
-
Masukkan data. Jalankan perintah berikut untuk memasukkan data ke tabel MySQL.
INSERT INTO test VALUES(4, 'd'),(5, 'e'); SELECT * FROM test;Jika kueri mengembalikan data yang dimasukkan, operasi penulisan berhasil.
Metode 2: Menggunakan session Notebook
-
Buat session Notebook. Di Sessions, buat session Notebook dan pilih Normal Network Connection yang telah dikonfigurasi sebelumnya. Untuk informasi selengkapnya, lihat Create a Notebook session.
-
Buat task Notebook. Di Development, buat task jenis Interactive Development > Notebook dan jalankan kode Python berikut untuk pengujian.
df = spark.read \ .format("jdbc") \ .option("url", "jdbc:mysql://<jdbc_url>") \ .option("dbtable", "<db>.<table>") \ .option("user", "<username>") \ .option("password", "<password>") \ .load() df.show()Jika output menampilkan konten tabel, koneksi berhasil.
-
Masukkan data. Jalankan kode berikut untuk memasukkan data ke tabel MySQL.
df = spark.createDataFrame([(6, 'f'), (7, 'g')], ["id", "name"]) df.write \ .format("jdbc") \ .mode("append") \ .option("url", "jdbc:mysql://<jdbc_url>") \ .option("dbtable", "<db>.<table>") \ .option("user", "<username>") \ .option("password", "<password>") \ .save() df.show()Parameter
mode("append")mengatur mode penulisan menjadi append, yang menambahkan data ke tabel alih-alih menimpa data yang sudah ada.Jika output menampilkan data yang dimasukkan, operasi penulisan berhasil.
Metode 3: Menggunakan task batch Spark
-
Kompilasi dan paket kode uji Scala berikut ke dalam file JAR.
package spark.test import org.apache.spark.sql.SparkSession object Main { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("test") .getOrCreate() val newRows = spark.createDataFrame(Seq((6, "f"), (7, "g"))).toDF("id", "name") newRows.write.format("jdbc") .mode("append") .option("url", "jdbc:mysql://<jdbc_url>") .option("dbtable", "<db>.<table>") .option("user", "<username>") .option("password", "<password>") .save() spark.read.format("jdbc") .option("url", "jdbc:mysql://<jdbc_url>") .option("dbtable", "<db>.<table>") .option("user", "<username>") .option("password", "<password>") .load() .show() spark.stop() } } -
Buat task batch. Di Development, buat task jenis , dan konfigurasikan parameter berikut. Untuk informasi selengkapnya, lihat Develop a batch or streaming task.
-
Main JAR Resource: Pilih atau masukkan path ke file JAR yang telah dipaketkan.
-
Main Class:
spark.test.Main. -
Normal Network Connection: Pilih koneksi jaringan yang telah dikonfigurasi sebelumnya.
-
-
Verifikasi hasilnya. Setelah task dijalankan, klik Log Exploration di bagian Execution Records. Di tab Stdout pada Driver Log, Anda dapat melihat konten tabel dari database MySQL Anda.