DataWorks Data Integration mendukung sinkronisasi data berkinerja tinggi di berbagai sumber data menggunakan format penyimpanan kolom Apache Arrow. Solusi ini memanfaatkan teknologi passthrough dalam memori dan zero-copy untuk mengubah transfer data dari berbasis baris menjadi berbasis kolom, sehingga meningkatkan throughput sinkronisasi pada volume data besar. Dalam skenario pengujian, kinerja dapat meningkat hampir 10 kali lipat.
Kasus penggunaan
Saat memproses data dalam jumlah sangat besar, solusi sinkronisasi data berbasis row-store sering mengalami bottleneck kinerja akibat serialisasi, deserialisasi, dan konversi tipe data yang terlalu sering. Hal ini terutama terjadi selama migrasi gudang data—misalnya dari Hive ke MaxCompute—atau saat membangun arsitektur danau data terpadu (data lakehouse). Waktu sinkronisasi yang lama untuk data berskala terabyte dapat memengaruhi peluncuran layanan dan efisiensi analisis data. Solusi ini mengatasi ketidakefisienan penerusan data antar sumber data berbasis penyimpanan kolom berskala besar dan mampu mengurangi waktu sinkronisasi dari hitungan jam menjadi menit.
Skenario 1: Migrasi big data
Masalah: Migrasi ratusan terabyte data dari Hive ke MaxCompute memakan waktu lama dan mengganggu peluncuran layanan.
Solusi: Aktifkan sinkronisasi Arrow untuk transfer langsung berbasis penyimpanan kolom guna menghindari konversi format.
Hasil: Waktu migrasi berkurang dari hitungan jam menjadi menit, meningkatkan efisiensi sebesar lebih dari 10 kali.
Skenario 2: Integrasi sumber data yang berbeda dan arsitektur danau data terpadu
Data mengalir secara bebas dan efisien antara data lake (seperti ekosistem Hive) dan gudang data (Hologres/MaxCompute). Nilai utamanya adalah penggunaan satu salinan data untuk berbagai tujuan serta pemanfaatan sinergi antara danau data dan gudang data.
Arsitektur solusi
DataWorks Data Integration mengadopsi standar in-memory berbasis kolom Apache Arrow dan merefaktor metode transfer data antara Reader dan Writer, mengubah proses dari pemrosesan berbasis baris menjadi passthrough langsung berbasis kolom.
Arsitektur sinkronisasi tradisional berbasis row-store
Dalam arsitektur tradisional, data diproses baris demi baris. Bahkan jika sumber dan tujuan sama-sama menggunakan format penyimpanan kolom seperti Parquet atau ORC, data tetap dikonversi menjadi objek Record berbasis baris generik di dalam mesin sinkronisasi. Format ini dirancang untuk penyimpanan per baris, di mana setiap objek Record mendefinisikan beberapa Columns, dan setiap Column berisi Value untuk kolom tersebut pada baris saat ini. Sebagai contoh, pertimbangkan sinkronisasi data berbasis kolom dari MaxCompute (ODPS) ke MaxCompute (ODPS):
Proses ini mencakup langkah-langkah berikut dan menimbulkan overhead kinerja:
-
Decoding oleh Reader: Reader membaca data berbasis kolom dari sumber, seperti MaxCompute, lalu mendekode dan mengonversinya baris demi baris menjadi objek
Recordinternal framework. -
Transfer framework: Framework mentransfer sejumlah besar objek
Recordmelalui antrian memori. -
Encoding oleh Writer: Writer mengambil objek
Recorddari framework, mengencode-nya ke dalam format penyimpanan kolom yang dibutuhkan tujuan, lalu menuliskan data tersebut.
Proses ini melibatkan banyak konversi format data, serialisasi/deserialisasi, serta pembuatan objek yang berulang, sehingga menyebabkan konsumsi CPU dan memori yang tinggi, garbage collection (GC) yang sering, serta throughput keseluruhan yang terbatas.
Arsitektur sinkronisasi berbasis penyimpanan kolom Arrow
Arsitektur baru berbasis Arrow menerapkan aliran data berbasis kolom end-to-end, di mana data mempertahankan format penyimpanan kolomnya sepanjang pipeline sinkronisasi, sehingga menghindari overhead konversi berbasis baris.
Dengan memperkenalkan struktur data ArrowTabularRecord, proses sinkronisasi dioptimalkan sebagai berikut:
-
Pembacaan langsung oleh Reader: Reader menggunakan MaxCompute Tunnel Arrow API untuk membaca langsung data berbasis kolom dari sumber, lalu mengemasnya ke dalam objek
ArrowTabularRecorddan mengirimkannya ke framework secara batch. -
Transfer framework: Framework langsung meneruskan objek
ArrowTabularRecordyang berisi data biner berbasis kolom. -
Penulisan langsung oleh Writer: Writer menggunakan Tunnel Arrow API untuk mengambil data biner berformat Arrow langsung dari
ArrowTabularRecorddan memanfaatkan teknologi zero-copy untuk mentransfernya ke tujuan, seperti Tunnel Server, tanpa re-serialisasi.
Arsitektur ini menyediakan dukungan native untuk Arrow dan menghilangkan langkah konversi berbasis baris antara, sehingga mencapai "sinkronisasi short-circuit" end-to-end untuk penyimpanan kolom, yang secara signifikan meningkatkan throughput dan mengurangi latensi.
Langkah implementasi
Anda dapat menambahkan parameter tertentu ke tugas integrasi data DataWorks untuk mengaktifkan sinkronisasi Arrow berkinerja tinggi. Fitur ini saat ini didukung untuk tugas sinkronisasi offline database penuh dan tabel tunggal dengan sumber dan tujuan berupa MaxCompute, Hologres, atau Hive/OSS/Hadoop Distributed File System (HDFS) (Parquet/ORC).
Metode 1: Sinkronisasi offline database penuh
Gunakan fitur tugas sinkronisasi offline database penuh integrasi data. Misalnya, untuk sinkronisasi offline dari Hive ke MaxCompute, sistem secara otomatis mendeteksi tipe field tabel sumber dan tujuan serta mengaktifkan sinkronisasi Arrow berkinerja tinggi tanpa konfigurasi manual. Anda dapat melihat pengaturan ini di di pojok kanan atas editor tugas.
Di Runtime Config, temukan parameter Enable Arrow short-circuit transfer. Opsi yang tersedia adalah Auto (default), Force enable, dan Force disable.
Metode 2: Sinkronisasi offline tabel tunggal
Saat mengonfigurasi tugas sinkronisasi offline tabel tunggal, Anda dapat mengaktifkan fitur ini secara manual di editor kode. Untuk melakukannya, tambahkan "useArrow": true ke konfigurasi parameter baik Reader maupun Writer.
Prasyarat: Untuk mengaktifkan fitur ini, definisi tipe kolom tabel sumber dan tujuan harus identik karena mode ini melewati langkah konversi tipe dan mentransfer data langsung di memori.
Berikut adalah contoh konfigurasi untuk sinkronisasi data dari Hive (Reader) ke MaxCompute (Writer):
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
"useArrow": true,
"datasource": "my_datasource",
"column": [
"col1",
"col2"
],
"readMode": "hdfs",
"table": "table"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
"useArrow": true,
"truncate": false,
"datasource": "odps_test",
"column": [
"col1",
"col2"
],
"table": "table"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"speed": {
"concurrent": 3
}
}
}
Validasi kinerja
Bagian berikut menunjukkan peningkatan kinerja untuk beberapa kombinasi sumber data. Kondisi pengujian untuk validasi kinerja adalah sebagai berikut:
-
Kondisi uji stres: Spesifikasi server: 64 core, memori 256 GB. Kartu antarmuka jaringan: 25 Gbit/s.
-
Volume data uji: 42.045.700 catatan.
|
Sumber Data |
Fitur yang Didukung |
Peningkatan Kinerja Replikasi |
|
MaxCompute |
Membaca langsung data berbasis kolom melalui Tunnel Arrow API |
Kinerja replikasi meningkat sebesar 200% |
|
Hologres |
Mendukung ekspor format Arrow untuk menghindari bottleneck berbasis baris Java Database Connectivity (JDBC) |
Kinerja replikasi meningkat sebesar 95% |
|
Hive, OSS, HDFS, dan sistem file terdistribusi lainnya |
Membaca langsung data format Arrow dasar dari Parquet/ORC |
Kinerja sinkronisasi PARQUET meningkat sebesar 5,55 kali. Kinerja sinkronisasi ORC meningkat sebesar 9,85 kali. |
Skenario 1: Sinkronisasi short-circuit berbasis kolom MaxCompute (Arrow → Arrow)
|
Konkurensi |
Row Store Tradisional |
Penyimpanan Kolom Arrow |
Peningkatan Kinerja |
|
1 |
67,8 MB/s 3740 R/s |
212,6 MB/s 11462 R/s |
+206,5% |
|
3 |
185,6 MB/s 10226 R/s |
569,9 MB/s 30728 R/s |
+200,5% |
|
8 |
462,1 MB/s 25467 R/s |
1321,0 MB/s 71143 R/s |
+197,4% |
Skenario 2: Sinkronisasi Hologres → MaxCompute
|
Konkurensi |
Sinkronisasi Tradisional |
Sinkronisasi Panah |
Peningkatan Kinerja |
|
4 |
439,1 MB/s 216480 R/s |
906,1 MB/s 404270 R/s |
+87% |
|
8 |
773,3 MB/s 381300 R/s |
1669,1 MB/s 745654 R/s |
+95% |
Skenario 3: Sinkronisasi Parquet/ORC → MaxCompute
|
Format Penyimpanan Kolom |
Sinkronisasi Tradisional |
Arrow Synchronization |
Peningkatan Kinerja |
|
Parquet |
26,1 MB/s 35631 R/s |
1198,1 MB/s 233587 R/s |
5,55 kali |
|
ORC |
21,4 MB/s 27661 R/s |
3256,3 MB/s 300326 R/s |
9,85 kali |
Parquet dan ORC adalah format penyimpanan kolom yang digunakan dalam sistem file terdistribusi seperti HDFS dan OSS.