Hologres Spark Connector memungkinkan EMR Serverless Spark terhubung ke Hologres dengan menambahkan konfigurasi yang diperlukan. Topik ini menjelaskan cara membaca dari dan menulis ke Hologres dalam lingkungan Serverless Spark.
Limitasi
Spark connector memerlukan Hologres versi 1.3 atau lebih baru. Anda dapat memeriksa versi instans Anda di halaman Instance Details di Hologres console. Jika instans Anda menggunakan versi sebelum 1.3, upgrade instans Anda atau bergabung dengan grup DingTalk Hologres (ID: 32314975) untuk meminta upgrade.
Metode akses
Anda dapat mengakses Hologres dengan dua cara. Pilih metode yang paling sesuai dengan kebutuhan Anda:
Metode akses | Deskripsi | Skenario | Referensi |
Metode 1: Konfigurasi tingkat task/session | Konfigurasikan informasi koneksi Hologres (JDBC URL, username, password, dan parameter lainnya) secara terpisah di setiap task atau session. |
| Topik ini |
Metode 2: Konfigurasi terpadu melalui data catalogs (direkomendasikan) | Tambahkan katalog data Hologres melalui fitur Data Catalogs EMR Serverless Spark. Setelah katalog ditambahkan, semua job dan session di ruang kerja dapat mengakses data yang telah diotorisasi secara default. Catatan Hanya didukung oleh engine versi esr-4.9.0 dan lebih baru. |
|
Jika ruang kerja Anda memerlukan akses jangka panjang dan sering ke data Hologres, kami merekomendasikan Metode 2 (data catalogs) untuk mengurangi konfigurasi berulang dan meningkatkan efisiensi pengembangan.
Prosedur
Langkah 1: Dapatkan dan unggah JAR hologres-connector-spark
EMR Serverless Spark versi esr-4.8.0 dan lebih baru sudah menyertakan connector Hologres bawaan. Langkah ini hanya diperlukan jika Anda menggunakan versi sebelum esr-4.8.0.
Untuk membaca dari dan menulis ke Hologres, Spark memerlukan file JAR connector. Anda dapat mengunduhnya dari Maven Central Repository. Topik ini menggunakan versi 1.5.6: hologres-connector-spark-3.x-1.5.6-jar-with-dependencies.jar.
Unggah file JAR hologres-connector-spark yang telah diunduh ke OSS. Untuk petunjuknya, lihat Simple upload.
Langkah 2: Tambahkan koneksi jaringan
Dapatkan informasi jaringan.
Buka halaman Hologres dan navigasikan ke detail instans Hologres target Anda untuk menemukan informasi VPC dan vSwitch-nya.
Tambahkan koneksi jaringan.
Serverless Spark memerlukan koneksi jaringan ke kluster Hologres untuk mengakses layanan. Untuk informasi selengkapnya tentang koneksi jaringan, lihat Konektivitas jaringan antara EMR Serverless Spark dan VPC lainnya.
Langkah 3: Buat database dan tabel Hologres
Hubungkan ke instans Hologres. Untuk detailnya, lihat Hubungkan ke instans.
Pada tab SQL Editor, masukkan pernyataan SQL berikut di kueri temporary baru dan jalankan.
-- Buat database. CREATE DATABASE testdb; -- Buat tabel. CREATE TABLE "public"."test" ( "id" text NULL, "name" text NULL); -- Masukkan data. INSERT INTO public.test VALUES ('1001','jack'),('1002','tony'),('1003','mike'); -- Kueri data. SELECT * FROM public.test
Langkah 4: Baca dari dan tulis ke Hologres
Contoh 1: Session SQL
Contoh ini menunjukkan cara membaca dari dan menulis ke Hologres menggunakan session SQL.
Buat session SQL. Untuk detailnya, lihat Kelola Session SQL.
Saat membuat session, pilih koneksi jaringan yang telah Anda buat pada langkah sebelumnya dari daftar koneksi jaringan. Di bagian Spark Configuration, tambahkan parameter berikut untuk memuat hologres-connector-spark.
# Tambahkan file JAR hologres-connector (hanya diperlukan untuk versi sebelum esr-4.8.0). spark.emr.serverless.user.defined.jars oss://<bucket>/hologres-connector-spark-3.x-<version>.jar # Konfigurasikan katalog Hologres. spark.sql.catalog.hologres_external_test_db com.alibaba.hologres.spark3.HoloTableCatalog spark.sql.catalog.hologres_external_test_db.username *** spark.sql.catalog.hologres_external_test_db.password *** spark.sql.catalog.hologres_external_test_db.jdbcurl jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdbTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Contoh
Deskripsi
spark.emr.serverless.user.defined.jarsoss://<bucket>/hologres-connector-spark-3.x-<version>.jarMenentukan path ke file JAR yang ditentukan pengguna.
spark.sql.catalog.hologres_external_test_dbcom.alibaba.hologres.spark3.HoloTableCatalogDi Spark 3.x, parameter ini digunakan untuk mengonfigurasi sumber data Hologres sebagai katalog eksternal. Ini adalah nilai tetap.
spark.sql.catalog.hologres_external_test_db.usernameLTAI******ID AccessKey Akun Alibaba Cloud Anda. Kami menyarankan Anda menggunakan secrets management untuk menangani informasi sensitif. Untuk detailnya, lihat Kelola informasi sensitif menggunakan secrets management.
spark.sql.catalog.hologres_external_test_db.passwordmXYV******Rahasia AccessKey Akun Alibaba Cloud Anda. Kami menyarankan Anda menggunakan secrets management untuk menangani informasi sensitif. Untuk detailnya, lihat Kelola informasi sensitif menggunakan secrets management.
spark.sql.catalog.hologres_external_test_db.jdbcurljdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdbURL koneksi JDBC instans Hologres.
Anda dapat menyesuaikan bagian
hologres_external_test_dbdalam nama parameter.Di halaman Data Development, buat job SparkSQL dan pilih session SQL yang telah Anda buat dari pojok kanan atas.
Untuk informasi selengkapnya, lihat Pengembangan SparkSQL.
Salin kode berikut ke tab SparkSQL baru dan klik Run.
-- Beralih ke database testdb. USE hologres_external_test_db; -- Tulis data. INSERT INTO `public`.test VALUES ('1004','tom'); -- Kueri data. SELECT * FROM `public`.test;
Contoh 2: Job streaming
Contoh PySpark ini menunjukkan cara membaca data dari Kafka dan menuliskannya ke Hologres sebagai job streaming.
Pastikan koneksi jaringan antara Kafka dan Hologres aktif. Kami menyarankan Anda men-deploy Kafka dan Hologres di VPC dan vSwitch yang sama.
Dalam contoh kode ini, ganti informasi Kafka dan tabel Hologres dengan nilai aktual Anda.
from pyspark.sql import SparkSession from pyspark.sql.functions import col # Konfigurasikan informasi Kafka Anda. servers = "alikafka-serverless-cn-xxxxx-vpc.alikafka.aliyuncs.com:9092" # Ganti dengan bootstrap servers Kafka Anda. topic = "topic-name" # Ganti dengan topik Kafka Anda. # Buat SparkSession. spark = SparkSession.builder \ .appName("test read kafka") \ .getOrCreate() # Baca stream Kafka. df = spark \ .readStream \ .format("kafka") \ .option("kafka.bootstrap.servers", servers) \ .option("subscribe", topic) \ .load() # Definisikan fungsi untuk menulis ke Hologres (dipanggil untuk setiap micro-batch). def write_to_hologres(batch_df, batch_id): print(f"Writing batch {batch_id} to Hologres...") batch_df.write \ .format("hologres") \ .mode("append") \ .insertInto("hologres_external_test_db.public.test") # Ganti dengan tabel Hologres Anda. # Konversi key dan value ke string dan tulis stream-nya. query = df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)") \ .writeStream \ .foreachBatch(write_to_hologres) \ .outputMode("append") \ .trigger(processingTime='30 seconds') \ .start() # Tunggu hingga kueri streaming berhenti (ini memblokir eksekusi cell di notebook). query.awaitTermination()Unggah file.
Di halaman Artifacts, klik Upload File.
Di kotak dialog Upload File, klik area unggah untuk memilih file Python dari langkah sebelumnya, atau seret file ke area unggah.
Buat dan jalankan job streaming.
Di halaman Development, klik ikon
(Create).Di kotak dialog yang muncul, masukkan Name, pilih PySpark dari daftar Application (Streaming), lalu klik OK.
Di tab pengembangan baru, konfigurasikan parameter berikut dan biarkan sisanya pada pengaturan default. Lalu, klik Publish.
Parameter
Deskripsi
Main Python Resources
Pilih file Python yang telah Anda unggah pada langkah sebelumnya.
Engine Version
Pilih versi Spark yang kompatibel. Contoh ini menggunakan
esr-4.6.0.Network Connection
Pilih koneksi jaringan yang telah Anda buat di Langkah 2.
Spark Configuration
# Tambahkan file JAR hologres-connector (hanya diperlukan untuk versi sebelum esr-4.8.0). spark.emr.serverless.user.defined.jars oss://<bucket>/test_script/hologres-connector-spark-3.x-1.5.6-jar-with-dependencies.jar # Konfigurasikan katalog Hologres. spark.sql.catalog.hologres_external_test_db com.alibaba.hologres.spark3.HoloTableCatalog spark.sql.catalog.hologres_external_test_db.username *** spark.sql.catalog.hologres_external_test_db.password *** spark.sql.catalog.hologres_external_test_db.jdbcurl jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdbUntuk deskripsi detail parameter, lihat Contoh 1: Session SQL.
Setelah Anda memublikasikan job, klik Go to O&M. Di halaman yang terbuka, klik Start.
Verifikasi hasilnya.
Kirim pesan ke Kafka.

Kueri data menggunakan Spark SQL.

Contoh 3: Session Notebook
Buat session Notebook. Untuk detailnya, lihat Kelola Session Notebook.
Saat membuat session, pilih koneksi jaringan yang telah Anda buat pada langkah sebelumnya dari daftar koneksi jaringan. Di bagian Spark Configuration, tambahkan parameter berikut untuk memuat hologres-connector-spark.
# Tambahkan file JAR hologres-connector (hanya diperlukan untuk versi sebelum esr-4.8.0). spark.emr.serverless.user.defined.jars oss://<bucket>/hologres-connector-spark-3.x-<version>.jarDi halaman Data Development, buat job Notebook dan pilih session Notebook yang telah Anda buat dari pojok kanan atas.
Salin kode berikut ke tab Notebook baru dan klik
.import pandas as pd from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StructField, StringType, IntegerType, LongType # 1. Siapkan DataFrame Pandas. pdf = pd.DataFrame({ "id": ["1006"], "name": ["sl"] }) # 2. Konversi ke DataFrame PySpark. # (Opsional: Definisikan skema secara eksplisit untuk memastikan tipe data yang benar) schema = StructType([ StructField("id", StringType(), True), StructField("name", StringType(), True) ]) df = spark.createDataFrame(pdf, schema=schema) # Tulis ke Hologres. df.write \ .format("hologres") \ .option("username", "LTAI******") \ .option("password", "mXYV******") \ .option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb") \ .option("table", "test") \ .mode("append") \ .save() # Baca data. readDf = spark.read\ .format("hologres") \ .option("username", "LTAI******") \ .option("password", "mXYV******") \ .option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb") \ .option("table", "test") \ .load() readDf.select("id", "name").show(10)Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Contoh
Deskripsi
usernameLTAI******ID AccessKey Akun Alibaba Cloud Anda. Kami menyarankan Anda menggunakan secrets management untuk menangani informasi sensitif. Untuk detailnya, lihat Kelola informasi sensitif menggunakan secrets management.
passwordmXYV******Rahasia AccessKey Akun Alibaba Cloud Anda. Kami menyarankan Anda menggunakan secrets management untuk menangani informasi sensitif. Untuk detailnya, lihat Kelola informasi sensitif menggunakan secrets management.
jdbcurljdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdbURL koneksi JDBC instans Hologres.
Verifikasi hasilnya.

Perintah katalog Hologres umum
Di Serverless Spark, Anda menggunakan katalog Hologres untuk menghubungkan database Hologres ke Spark SQL sebagai external catalog. Setiap katalog terikat secara ketat ke satu database Hologres, dan akses lintas database tidak didukung (Anda tidak dapat menggunakan katalog yang sama untuk mengakses beberapa database Hologres). Struktur logis di dalam katalog konsisten dengan Hologres:
Konsep Spark | Konsep Hologres | Deskripsi |
catalog | database | Misalnya, |
namespace | schema | Misalnya, |
table | table | Anda harus secara eksplisit menentukan |
Menggunakan katalog Hologres
Katalog Hologres di Spark dipetakan tepat ke satu database Hologres dan tidak dapat diubah setelah dibuat.
USE hologres_external_test_db;Menampilkan semua namespace
Di Spark, namespace berkorespondensi dengan schema di Hologres. Schema default adalah public. Anda dapat menggunakan perintah USE untuk mengubah schema default untuk session.
-- Lihat semua namespace di katalog Hologres, yang berkorespondensi dengan semua schema di Hologres.
SHOW NAMESPACES;Menampilkan tabel di namespace
Tampilkan semua tabel.
SHOW TABLES;Tampilkan tabel di namespace tertentu.
USE test_schema; SHOW TABLES; -- Atau gunakan: SHOW TABLES IN test_schema;
Dokumen terkait
Untuk informasi selengkapnya tentang penggunaan Spark untuk membaca dari dan menulis ke Hologres, lihat Baca data dari dan tulis data ke Hologres menggunakan Spark.