Hologres adalah mesin gudang data real-time satu atap yang kompatibel dengan protokol PostgreSQL. Layanan ini mendukung penulisan, pembaruan, dan kueri volume data besar dalam skenario real-time maupun offline. Berdasarkan hasil pengujian kinerja penulisan batch Spark ke Hologres, topik ini membantu Anda memilih mode penulisan optimal untuk berbagai skenario.
Untuk penulisan dan pembaruan data real-time, lihat Pengujian stres penulisan data, pembaruan, dan kueri titik.
Perbandingan mode penulisan batch
Hologres mendukung beberapa mode penulisan batch, termasuk mode COPY tradisional, mode impor streaming FIXED COPY yang dibangun di atas protokol COPY, serta mode INSERT INTO VALUES yang mengonversi impor batch menjadi penulisan streaming.
Tabel berikut membandingkan ketiga mode penulisan tersebut secara rinci.
|
Fitur |
COPY |
FIXED COPY |
INSERT INTO VALUES |
|
|
Deskripsi |
Impor batch ke tabel tanpa primary key |
Impor batch ke tabel dengan primary key |
Mode impor streaming yang dibangun di atas protokol COPY |
Mode impor streaming dasar |
|
Kasus penggunaan |
|
|
|
|
|
Granularitas kunci |
row lock |
table lock |
row lock |
row lock |
|
Visibilitas data |
Tampak setelah operasi COPY selesai |
Tampak setelah operasi COPY selesai |
Tampak secara real time |
Tampak secara real time |
|
Kinerja |
Tinggi |
Tinggi |
Sedang |
Sedang |
|
Konsumsi resource Hologres |
Rendah |
Rendah |
Tinggi |
Tinggi |
|
Konsumsi resource klien |
Rendah |
Tinggi |
Rendah |
Sedang |
|
Kebijakan konflik primary key yang didukung |
Tidak berlaku |
|
|
|
Pemilihan mode penulisan batch
Dalam skenario penulisan batch, ketiga mode tersebut memiliki karakteristik sebagai berikut:
-
Mode COPY: Mode COPY tradisional menawarkan kinerja penulisan terbaik sekaligus mengonsumsi sumber daya Hologres paling sedikit.
-
Mode FIXED COPY: Mode impor streaming yang dibangun di atas protokol COPY. Mode ini hanya menghasilkan row lock dan menyediakan visibilitas data real time.
-
Mode INSERT INTO VALUES: Mode ini mengonversi impor batch menjadi penulisan streaming tradisional dan tidak memberikan keunggulan signifikan dalam skenario penulisan batch.
CatatanMode INSERT INTO VALUES tidak memiliki keunggulan khas dalam skenario penulisan batch. Namun, mode ini merupakan satu-satunya mode yang mendukung retraksi data (penghapusan) dan diperlukan untuk kasus penggunaan seperti penulisan data log biner.
Kecuali jika Anda memiliki persyaratan khusus terkait visibilitas data real time, granularitas kunci (table lock mencegah tugas penulisan konkuren), atau beban sumber data, kami merekomendasikan penggunaan mode COPY untuk penulisan batch.
-
Untuk penulisan batch dari Spark: Kami merekomendasikan meningkatkan instans Hologres Anda ke V2.2.25 atau versi lebih baru dan mengatur parameter write
write.modeuntuk konektor keauto(nilai default). Sistem kemudian akan secara otomatis memilih mode penulisan batch optimal. -
Untuk penulisan batch dari Flink: Pertama, gunakan pohon keputusan di bawah ini untuk memilih antara mode COPY atau mode FIXED COPY. Kemudian, konfigurasikan parameter berikut:
-
jdbccopywritemode: Atur ke
TRUE. Ini mencegah penggunaan mode INSERT INTO VALUES. -
bulkload: Atur ke
TRUEuntuk mode COPY atauFALSEuntuk mode FIXED COPY sesuai kebutuhan Anda.
-
Gunakan pohon keputusan berikut untuk memilih mode penulisan batch yang sesuai dengan skenario Anda.
Pengujian kinerja penulisan batch
Pengujian ini menggunakan open-source Hologres-Spark-Connector milik Hologres.
Prasyarat
Persiapan lingkungan
Sebelum memulai, pastikan Anda telah menyiapkan lingkungan berikut:
Instans Hologres dan kluster EMR Spark harus berada di wilayah yang sama dan menggunakan VPC yang sama.
-
Siapkan instans Hologres versi V2.2.25 atau lebih baru dan buat database.
-
Buat kluster EMR Spark yang menjalankan Spark 3.3.0 atau versi lebih baru. Untuk informasi lebih lanjut, lihat Buat kluster.
-
Unduh paket Spark-Connector.
Untuk mengaktifkan Spark agar dapat membaca dari dan menulis ke Hologres, unduh file JAR
hologres-connector-spark-3.xdari Maven Central Repository.
Tabel berikut menjelaskan lingkungan yang digunakan untuk pengujian kinerja.
|
Layanan |
Versi |
Spesifikasi |
|
Hologres |
V3.0.30 |
64 core, 256 GB (1 CU = 1 core, 4 GB) |
|
EMR Spark |
EMR-5.18.1, Spark-3.5.3 |
8 core, 32 GB × 8 (1 node master, 7 node core) Penting
Anda harus mengaktifkan layanan OSS-HDFS. |
|
Spark-Connector |
1.5.2 |
N/A |
Persiapan data uji
-
Siapkan data sumber.
-
Login ke node master kluster EMR Spark. Untuk informasi lebih lanjut, lihat Hubung ke instans ECS.
-
Unduh paket tool TPC-H_Tools_v3.0.0.zip. Lalu, salin paket tersebut ke instans ECS node master, ekstrak, dan masuk ke direktori
TPC-H_Tools_v3.0.0/TPC-H_Tools_v3.0.0/dbgen. -
Jalankan perintah berikut di direktori
dbgenuntuk menghasilkan filecustomer.tbluntuk set data uji 1 TB../dbgen -s 1000 -T cTabel berikut menjelaskan tabel customer dalam dataset TPC-H 1 TB.
Item
Deskripsi
Jumlah bidang
8
Tipe bidang
INT, BIGINT, TEXT, DECIMAL
Jumlah baris
150.000.000
Jumlah shard
40
-
-
Impor data uji ke Spark.
Jalankan perintah berikut untuk mengunggah file customer.tbl ke kluster Spark.
hadoop fs -put customer.tbl <spark_resource>Dalam perintah tersebut, spark_resource mengacu pada Root Storage Directory of Cluster yang Anda atur saat membuat kluster EMR Spark.
-
Penyimpanan hibrida baris-kolom
CREATE TABLE test_table_mixed ( C_CUSTKEY BIGINT PRIMARY KEY, C_NAME TEXT, C_ADDRESS TEXT, C_NATIONKEY INT, C_PHONE TEXT, C_ACCTBAL DECIMAL(15, 2), C_MKTSEGMENT TEXT, C_COMMENT TEXT ) WITH ( orientation = 'column,row' );Penyimpanan berorientasi kolom (dengan primary key)
CREATE TABLE test_table_column ( C_CUSTKEY BIGINT PRIMARY KEY, C_NAME TEXT, C_ADDRESS TEXT, C_NATIONKEY INT, C_PHONE TEXT, C_ACCTBAL DECIMAL(15, 2), C_MKTSEGMENT TEXT, C_COMMENT TEXT ) WITH ( orientation = 'column' );Penyimpanan berorientasi kolom (tanpa primary key)
CREATE TABLE test_table_column_no_pk ( C_CUSTKEY BIGINT, C_NAME TEXT, C_ADDRESS TEXT, C_NATIONKEY INT, C_PHONE TEXT, C_ACCTBAL DECIMAL(15, 2), C_MKTSEGMENT TEXT, C_COMMENT TEXT ) WITH ( orientation = 'column' );Penyimpanan berorientasi baris (dengan primary key)
CREATE TABLE test_table_row ( C_CUSTKEY BIGINT PRIMARY KEY, C_NAME TEXT, C_ADDRESS TEXT, C_NATIONKEY INT, C_PHONE TEXT, C_ACCTBAL DECIMAL(15, 2), C_MKTSEGMENT TEXT, C_COMMENT TEXT ) WITH ( orientation = 'row' );Penyimpanan berorientasi baris (tanpa primary key)
CREATE TABLE test_table_row_no_pk ( C_CUSTKEY BIGINT, C_NAME TEXT, C_ADDRESS TEXT, C_NATIONKEY INT, C_PHONE TEXT, C_ACCTBAL DECIMAL(15, 2), C_MKTSEGMENT TEXT, C_COMMENT TEXT ) WITH ( orientation = 'row' );
Pengujian kinerja
Konfigurasi pengujian
Topik ini menguji kinerja impor berbagai mode.
-
Login ke node master kluster EMR Spark. Untuk informasi lebih lanjut, lihat Hubung ke instans ECS. Unggah paket Spark-Connector yang telah diunduh, lalu jalankan perintah berikut untuk masuk ke shell interaktif Spark SQL.
CatatanAnda dapat menyesuaikan nilai parameter
spark.sql.files.maxPartitionBytesuntuk mengontrol konkurensi pembacaan file HDFS di Spark. Dalam contoh ini, konkurensi diatur ke 40.# Masuk ke shell interaktif Spark SQL. spark-sql --jars <path>/hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \ --conf spark.executor.instances=40 \ --conf spark.executor.cores=1 \ --conf spark.executor.memory=4g \ --conf spark.sql.files.maxPartitionBytes=644245094Dalam perintah tersebut, path adalah direktori yang berisi file
hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar. -
Di shell interaktif Spark SQL, jalankan pernyataan SQL berikut untuk membuat tampilan sementara dan menulis data.
Tabel sementara digunakan dalam pengujian ini untuk memudahkan penyesuaian parameter saat mengevaluasi kinerja penulisan berbagai mode.
CatatanDalam praktiknya, Anda juga dapat menggunakan catalog untuk memuat tabel Hologres secara langsung.
-- Buat tabel sementara dalam format CSV. CREATE TEMPORARY VIEW csvtable ( c_custkey BIGINT, c_name STRING, c_address STRING, c_nationkey INT, c_phone STRING, c_acctbal DECIMAL(15, 2), c_mktsegment STRING, c_comment STRING) USING csv OPTIONS ( path "<spark_resources>/customer.tbl", sep "|" ); CREATE TEMPORARY VIEW hologresTable ( c_custkey BIGINT, c_name STRING, c_address STRING, c_nationkey INT, c_phone STRING, c_acctbal DECIMAL(15, 2), c_mktsegment STRING, c_comment STRING) USING hologres OPTIONS ( jdbcurl "jdbc:postgresql://<hologres_vpc_endpoint>/<database_name>", username "<accesskey_id>", password "<accesskey_secret>", table "<table_name>", direct_connect "false", write.mode "auto", write.insert.thread_size "3", write.insert.batch_size "2048" ); INSERT INTO hologresTable SELECT * FROM csvTable;Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
spark_resources
cluster root storage path yang Anda konfigurasi saat membuat kluster EMR Spark.
Anda dapat menemukan path ini di bagian Cluster Information pada halaman Basic Information kluster Anda di Konsol EMR on ECS.
hologres_vpc_endpoint
Domain Name VPC dari instans Hologres.
Anda dapat login ke Konsol Hologres, klik ID instans target, lalu temukan endpoint untuk VPC yang ditentukan di bagian informasi jaringan pada halaman detail instans. Contohnya, endpoint VPC di wilayah China (Hangzhou) memiliki format
<Instance ID>-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80.database_name
Nama database di instans Hologres.
accesskey_id
ID AccessKey dengan izin baca pada database Hologres yang ditentukan.
accesskey_secret
Rahasia AccessKey dengan izin baca pada database Hologres yang ditentukan.
table_name
Nama tabel Hologres tujuan.
write.mode
Mode penulisan. Nilai yang valid:
-
auto: Nilai default. Konektor secara otomatis memilih mode optimal. -
insert: Menulis data menggunakan pernyataan INSERT INTO VALUES. -
stream: Melakukan penulisan streaming menggunakan FIXED COPY. -
bulk_load: Melakukan impor batch ke tabel tanpa primary key menggunakan COPY. -
bulk_load_on_conflict: Melakukan impor batch ke tabel dengan primary key menggunakan COPY.
write.insert.thread_size
Konkurensi penulisan. Parameter ini hanya berlaku untuk mode
insert.write.insert.batch_size
Ukuran batch penulisan. Parameter ini hanya berlaku untuk mode
insert.write.on_conflict_action
INSERT_OR_REPLACE(default): Jika terjadi konflik primary key, data diperbarui.INSERT_OR_IGNORE: Jika terjadi konflik primary key, data diabaikan.Untuk informasi lebih lanjut tentang parameter, lihat Parameter.
-
Skenario pengujian
|
Skenario pengujian |
Opsi |
|
Format penyimpanan tabel |
|
|
Metode pembaruan data |
|
|
Mode penulisan |
|
Hasil pengujian
Hasil pengujian mencakup bidang-bidang berikut:
|
Bidang |
Deskripsi |
|
Durasi total pekerjaan |
Waktu total eksekusi pekerjaan Spark. Nilai ini adalah waktu yang dibutuhkan untuk mengeksekusi operasi INSERT di shell interaktif Spark SQL pada node kluster EMR Spark. Durasi ini muncul di baris
|
|
Durasi rata-rata penulisan data |
Durasi rata-rata pekerjaan penulisan itu sendiri, tidak termasuk waktu yang dihabiskan untuk penjadwalan kluster Spark, pembacaan data, atau pengacakan data. Di halaman HoloWeb pada Konsol Hologres, jalankan pernyataan SQL berikut untuk mendapatkan konkurensi shard (nilai dari
Tabel berikut menjelaskan parameter-parameter tersebut.
|
|
Beban Hologres |
Pemanfaatan CPU instans Hologres. Anda dapat memperoleh pemanfaatan CPU di halaman Monitoring Information instans di Konsol Hologres. |
|
Beban Spark |
Beban pada node EMR. Di Konsol EMR on ECS, buka tab Monitoring and Diagnostics > Metric Monitoring untuk kluster Anda dan konfigurasikan pengaturan berikut:
Kemudian, kueri metrik CPU utilization untuk melihat beban Spark. |
Tabel berikut menunjukkan hasil pengujian lengkap.
|
Format penyimpanan |
Primary key |
Mode penulisan |
Durasi total pekerjaan |
Durasi rata-rata penulisan |
Pemuatan Hologres |
Pemuatan Spark |
|
Penyimpanan berorientasi kolom |
Tanpa primary key |
insert |
241,61 dtk |
232,70 dtk |
92% |
15% |
|
stream |
228,11 dtk |
222,34 dtk |
100% |
36% |
||
|
bulk_load |
88,72 dtk |
57,16 dtk |
97% |
47% |
||
|
Dengan primary key ignore |
insert |
190,96 dtk |
172,60 dtk |
90% |
14% |
|
|
stream |
149,60 dtk |
142,16 dtk |
100% |
14% |
||
|
bulk_load_on_conflict |
115,96 dtk |
42,92 dtk |
60% |
75% |
||
|
Dengan primary key replace |
insert |
600,40 dtk |
574,31 dtk |
91% |
5% |
|
|
stream |
550,29 dtk |
540,32 dtk |
100% |
5% |
||
|
bulk_load_on_conflict |
188,05 dtk |
109,77 dtk |
93% |
78% |
||
|
Penyimpanan berorientasi baris |
Tanpa primary key |
insert |
132,38 dtk |
123,79 dtk |
94% |
22% |
|
stream |
114,41 dtk |
103,81 dtk |
100% |
17% |
||
|
bulk_load |
68,20 dtk |
41,22 dtk |
98% |
32% |
||
|
Dengan primary key ignore |
insert |
190,48 dtk |
170,49 dtk |
89% |
15% |
|
|
stream |
185,46 dtk |
172,48 dtk |
85% |
14% |
||
|
bulk_load_on_conflict |
117,81 dtk |
47,69 dtk |
58% |
75% |
||
|
Dengan primary key replace |
insert |
177,97 dtk |
170,78 dtk |
93% |
15% |
|
|
stream |
142,44 dtk |
130,16 dtk |
100% |
20% |
||
|
bulk_load_on_conflict |
137,69 dtk |
65,18 dtk |
92% |
78% |
||
|
Penyimpanan hibrida baris-kolom |
Dengan primary key ignore |
insert |
172,19 dtk |
158,74 dtk |
86% |
16% |
|
stream |
150,63 dtk |
149,76 dtk |
100% |
12% |
||
|
bulk_load_on_conflict |
128,83 dtk |
42,09 dtk |
59% |
79% |
||
|
Dengan primary key replace |
insert |
690,37 dtk |
662,00 dtk |
92% |
5% |
|
|
stream |
625,84 dtk |
623,08 dtk |
100% |
4% |
||
|
bulk_load_on_conflict |
202,07 dtk |
121,58 dtk |
93% |
80% |
Mode penulisan tersebut berkorespondensi dengan operasi berikut:
-
insert: INSERT INTO VALUES -
stream: FIXED COPY -
bulk_load: Impor COPY ke tabel tanpa primary key -
bulk_load_on_conflict: Impor COPY ke tabel dengan primary key