全部产品
Search
文档中心

E-MapReduce:Integrasi Paimon dengan Spark

更新时间:Jul 02, 2025

Anda dapat menggunakan Apache Paimon untuk menyebarkan layanan penyimpanan data lake di Hadoop Distributed File System (HDFS) atau Alibaba Cloud Object Storage Service (OSS) secara efisien, serta menggunakan mesin komputasi Spark untuk analitik data lake. Topik ini menjelaskan cara menggunakan Spark SQL untuk membaca dan menulis data ke Paimon di EMR.

Prasyarat

Kluster DataLake atau kustom telah dibuat, dan layanan Spark serta Paimon dipilih saat pembuatan kluster. Untuk informasi lebih lanjut, lihat Buat kluster.

Batasan

  • Hanya kluster EMR V3.46.0, EMR V5.12.0, atau versi minor setelahnya yang mendukung penggunaan Spark SQL untuk membaca dan menulis data ke Paimon.

  • Hanya Spark SQL dari Spark 3 yang mendukung penggunaan katalog untuk membaca dan menulis data ke Paimon.

Prosedur

Langkah 1: Konfigurasikan katalog

Spark dapat membaca dan menulis data ke tabel Paimon menggunakan katalog. Katalog Paimon dan spark_catalog didukung. Pilih katalog berdasarkan skenario bisnis Anda.

  • Katalog Paimon: Digunakan untuk mengelola metadata dalam format Paimon. Dapat digunakan hanya untuk membaca dan menulis data ke tabel Paimon.

  • spark_catalog: Katalog bawaan default Spark. Biasanya digunakan untuk mengelola metadata tabel internal Spark SQL. Dapat digunakan untuk membaca dan menulis data ke tabel Paimon maupun non-Paimon.

Gunakan katalog Paimon

Metadata dapat disimpan di sistem file seperti HDFS atau sistem penyimpanan objek seperti OSS. Metadata juga dapat disinkronkan ke DLF dan Hive untuk memudahkan akses oleh layanan lain.

Root path untuk penyimpanan ditentukan oleh parameter spark.sql.catalog.paimon.warehouse. Jika root path tidak ada, itu akan dibuat secara otomatis. Jika sudah ada, katalog dapat digunakan untuk mengakses tabel yang ada di path tersebut.

  1. Masuk ke node master kluster dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.

  2. Pilih jenis katalog berdasarkan tipe penyimpanan metadata, lalu jalankan perintah yang diberikan untuk memulai Spark SQL.

    Konfigurasikan katalog sistem file

    Katalog sistem file menyimpan metadata di sistem file atau sistem penyimpanan objek.

    spark-sql --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \
    --conf spark.sql.catalog.paimon.metastore=filesystem \
    --conf spark.sql.catalog.paimon.warehouse=oss://<yourBucketName>/warehouse \
    --conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
    Catatan
    • spark.sql.catalog.paimon: Mendefinisikan katalog bernama paimon.

    • spark.sql.catalog.paimon.metastore: Menentukan tipe penyimpanan metadata. Jika diatur ke filesystem, metadata disimpan di sistem file lokal.

    • spark.sql.catalog.paimon.warehouse: Menentukan lokasi gudang data. Konfigurasikan sesuai kebutuhan bisnis Anda. Ganti <yourBucketName> dengan nama Bucket OSS. Untuk informasi lebih lanjut tentang pembuatan Bucket OSS, lihat Buat bucket.

    Konfigurasikan katalog DLF

    Katalog DLF dapat menyinkronkan metadata ke DLF.

    Penting

    Saat membuat kluster EMR, pilih DLF Unified Metadata untuk Metadata.

    spark-sql --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \
    --conf spark.sql.catalog.paimon.metastore=dlf \
    --conf spark.sql.catalog.paimon.warehouse=oss://<yourBucketName>/warehouse \
    --conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
    Catatan
    • spark.sql.catalog.paimon: Mendefinisikan katalog bernama paimon.

    • spark.sql.catalog.paimon.metastore: Menentukan tipe penyimpanan metadata. Jika diatur ke dlf, metadata disinkronkan ke DLF.

    • spark.sql.catalog.paimon.warehouse: Menentukan lokasi gudang data. Konfigurasikan sesuai kebutuhan bisnis Anda. Ganti <yourBucketName> dengan nama Bucket OSS. Untuk informasi lebih lanjut tentang pembuatan Bucket OSS, lihat Buat bucket.

    Konfigurasikan katalog Hive

    Katalog Hive dapat menyinkronkan metadata ke Hive Metastore. Hive memungkinkan Anda menanyakan data dalam tabel yang dibuat di katalog Hive. Untuk informasi tentang cara menanyakan data Paimon di Hive, lihat Integrasi Paimon dengan Hive.

    spark-sql --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \
    --conf spark.sql.catalog.paimon.metastore=hive \
    --conf spark.sql.catalog.paimon.uri=thrift://master-1-1:9083 \
    --conf spark.sql.catalog.paimon.warehouse=oss://<yourBucketName>/warehouse \
    --conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
    Catatan
    • spark.sql.catalog.paimon: Mendefinisikan katalog bernama paimon.

    • spark.sql.catalog.paimon.metastore: Menentukan tipe penyimpanan metadata. Jika diatur ke hive, metadata disinkronkan ke Hive Metastore.

    • spark.sql.catalog.paimon.uri: Menentukan alamat dan nomor port Hive Metastore. Jika diatur ke thrift://master-1-1:9083, klien Spark SQL terhubung ke Hive Metastore yang berjalan pada node master-1-1 dan port mendengarkan 9083 untuk mendapatkan informasi metadata.

    • spark.sql.catalog.paimon.warehouse: Menentukan lokasi gudang data. Konfigurasikan sesuai kebutuhan bisnis Anda. Ganti <yourBucketName> dengan nama Bucket OSS. Untuk informasi lebih lanjut tentang pembuatan Bucket OSS, lihat Buat bucket.

Gunakan spark_catalog

  1. Masuk ke node master kluster dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.

  2. Jalankan perintah berikut untuk mengonfigurasi katalog dan memulai Spark SQL:

    spark-sql --conf spark.sql.catalog.spark_catalog=org.apache.paimon.spark.SparkGenericCatalog \
    --conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
    Catatan
    • spark.sql.catalog.spark_catalog: Mendefinisikan katalog bernama spark_catalog.

    • Root path untuk penyimpanan di spark_catalog ditentukan oleh parameter spark.sql.warehouse.dir dan biasanya tidak perlu dimodifikasi.

Langkah 2: Baca data dari dan tulis data ke tabel Paimon

Eksekusi pernyataan Spark SQL berikut untuk membuat tabel Paimon di katalog yang dikonfigurasi, serta membaca dan menulis data ke tabel tersebut.

Gunakan katalog Paimon

Untuk mengakses tabel Paimon, tentukan nama tabel dalam format paimon.<db_name>.<tbl_name>, di mana <db_name> adalah nama database dan <tbl_name> adalah nama tabel.

-- Buat database.
CREATE DATABASE IF NOT EXISTS paimon.ss_paimon_db;

-- Buat tabel Paimon.
CREATE TABLE paimon.ss_paimon_db.paimon_tbl (id INT, name STRING) USING paimon;

-- Tulis data ke tabel Paimon.
INSERT INTO paimon.ss_paimon_db.paimon_tbl VALUES (1, "apple"), (2, "banana"), (3, "cherry");

-- Tanyakan data dari tabel Paimon.
SELECT * FROM paimon.ss_paimon_db.paimon_tbl ORDER BY id;

-- Hapus database.
DROP DATABASE paimon.ss_paimon_db CASCADE;
Catatan

Jika kesalahan metastore: Failed to connect to the MetaStore Server dilaporkan saat membuat database setelah mengonfigurasi katalog Hive, layanan Hive Metastore belum dimulai. Jalankan perintah berikut untuk memulai Hive Metastore, lalu konfigurasikan ulang katalog Hive.

hive --service metastore &

Jika Anda menetapkan Metadata ke DLF Unified Metadata saat membuat kluster, kami sarankan menyinkronkan metadata ke DLF dan mengonfigurasi katalog DLF.

Gunakan spark_catalog

Anda dapat menentukan nama tabel dalam format spark_catalog.<db_name>.<tbl_name>, baik untuk mengakses tabel Paimon maupun non-Paimon. Katalog bawaan default Spark adalah spark_catalog, sehingga Anda dapat menghilangkan spark_catalog dan langsung menentukan nama tabel dalam format <db_name>.<tbl_name>. Di sini, <db_name> menunjukkan nama database, dan <tbl_name> menunjukkan nama tabel.

-- Buat database.
CREATE DATABASE IF NOT EXISTS ss_paimon_db;
CREATE DATABASE IF NOT EXISTS ss_parquet_db;

-- Buat tabel Paimon dan tabel Parquet.
CREATE TABLE ss_paimon_db.paimon_tbl (id INT, name STRING) USING paimon;
CREATE TABLE ss_parquet_db.parquet_tbl USING parquet AS SELECT 3, "cherry";

-- Tulis data ke tabel Paimon.
INSERT INTO ss_paimon_db.paimon_tbl VALUES (1, "apple"), (2, "banana");
INSERT INTO ss_paimon_db.paimon_tbl SELECT * FROM ss_parquet_db.parquet_tbl;

-- Tanyakan data dari tabel Paimon.
SELECT * FROM ss_paimon_db.paimon_tbl ORDER BY id;

-- Hapus database.
DROP DATABASE ss_paimon_db CASCADE;
DROP DATABASE ss_parquet_db CASCADE;

Hasil berikut dikembalikan:

1       apple   
2       banana
3       cherry 

FAQ

Setelah saya menambahkan komponen Paimon ke kluster, apakah konfigurasi parameter spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions akan ditambahkan secara otomatis?

Ya, konfigurasi akan ditambahkan secara otomatis. Setelah komponen Paimon ditambahkan, Anda dapat melihat informasi konfigurasi dengan langkah-langkah berikut:

  1. Buka tab Services kluster.

  2. Lihat konfigurasi layanan Spark.

    1. Klik Configure untuk layanan Spark.

    2. Cari spark.sql.extensions berdasarkan configuration item name untuk melihat informasi konfigurasi.

      image

Bisakah saya menggunakan Spark Shell untuk membaca dan menulis data ke Paimon?

Ya, Anda bisa. Untuk membaca dan menulis data ke Paimon menggunakan Spark Shell, ikuti langkah-langkah berikut:

  1. Jalankan perintah berikut untuk memulai Spark Shell:

    spark-shell
  2. Jalankan kode Scala berikut di Spark Shell untuk menulis dan menanyakan data dari tabel Paimon:

    val dataset = spark.read.format("paimon").load("oss://<yourBucketName>/warehouse/test_db.db/test_tbl")
    dataset.createOrReplaceTempView("test_tbl")
    spark.sql("INSERT INTO test_tbl VALUES (4, 'apple1', 3.5), (5, 'banana1', 4.0), (6, 'cherry1', 20.5)")
    spark.sql("SELECT * FROM test_tbl").show()
    Catatan
    • paimon: Nilai tetap yang menunjukkan penggunaan Paimon sebagai format penyimpanan data.

    • oss://<yourBucketName>/warehouse/test_db.db/test_tbl: Path tempat tabel Paimon disimpan. Ganti path sesuai kebutuhan bisnis Anda. Ganti <yourBucketName> dengan nama Bucket OSS.

Referensi

Untuk informasi lebih lanjut tentang Paimon, lihat Apache Paimon.