DataWorks Data Integration mendukung sinkronisasi data berkinerja tinggi lintas sumber data yang berbeda 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 untuk 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 menghadapi bottleneck kinerja akibat serialisasi, deserialisasi, dan konversi tipe yang terlalu sering. Hal ini terutama terjadi selama migrasi gudang data—misalnya dari Hive ke MaxCompute—atau saat membangun arsitektur 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 column-store berskala besar dan mampu mengurangi waktu sinkronisasi dari hitungan jam menjadi menit.
Skenario 1: Migrasi big data
Tantangan: Migrasi ratusan terabyte data dari Hive ke MaxCompute memakan waktu lama dan menunda peluncuran layanan.
Solusi: Aktifkan sinkronisasi berkinerja tinggi dengan Apache Arrow untuk mentransfer data langsung dalam format kolomnya, sehingga menghindari overhead konversi.
Hasil: Waktu migrasi berkurang dari jam menjadi menit, menghasilkan peningkatan kinerja lebih dari 10x.
Skenario 2: Integrasi sumber data yang berbeda dan arsitektur data lakehouse
Data mengalir secara bebas dan efisien antara data lake (seperti ekosistem Hive) dan gudang data (Hologres/MaxCompute). Nilai utamanya adalah menggunakan satu salinan data untuk berbagai tujuan dan memungkinkan sinergi antara lake dan warehouse.
Arsitektur solusi
DataWorks Data Integration memperkenalkan standar in-memory berbasis kolom Apache Arrow. Solusi ini 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 column-store, seperti Parquet atau ORC, data dikonversi menjadi objek Record berbasis baris generik di dalam mesin sinkronisasi. Format ini dirancang untuk penyimpanan per baris. Setiap objek Record mendefinisikan beberapa Columns, dan setiap Column berisi Value untuk kolom tersebut pada baris saat ini. Sebagai contoh, pertimbangkan sinkronisasi data column-store dari MaxCompute (ODPS) ke MaxCompute (ODPS):
Proses ini mencakup langkah-langkah berikut dan menimbulkan overhead kinerja sebagai berikut:
-
Decoding Reader: Reader membaca data 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 dalam memori. -
Encoding Writer: Writer mengambil objek
Recorddari framework dan mengenkodenya ke dalam format kolom yang dibutuhkan tujuan sebelum menulis.
Proses ini melibatkan banyak konversi format data, serialisasi/deserialisasi, serta pembuatan objek yang sering, sehingga menyebabkan konsumsi sumber daya 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 kolom end-to-end. Data mempertahankan format column-store-nya sepanjang pipeline sinkronisasi, sehingga menghindari overhead konversi berbasis baris.
Dengan memperkenalkan struktur data ArrowTabularRecord, proses sinkronisasi dioptimalkan sebagai berikut:
-
Baca langsung: Reader menggunakan MaxCompute Tunnel Arrow API untuk membaca langsung data kolom dari sumber dan mengemasnya ke dalam objek
ArrowTabularRecordguna dikirimkan secara batch ke framework. -
Transfer framework: Framework langsung mentransfer
ArrowTabularRecord, yang berisi data biner kolom. -
Tulis langsung: Writer menggunakan Tunnel Arrow API untuk langsung mengambil data biner berformat Arrow dari
ArrowTabularRecord. Data tersebut kemudian ditransfer ke tujuan, seperti Tunnel Server, menggunakan teknologi zero-copy tanpa re-serialisasi.
Arsitektur ini menyediakan dukungan native untuk Arrow dan menghilangkan langkah konversi berbasis baris perantara, sehingga mencapai "sinkronisasi short-circuit" end-to-end untuk column store 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
Saat Anda menggunakan tugas sinkronisasi offline database penuh, seperti untuk migrasi Hive ke MaxCompute, sistem secara otomatis mendeteksi tipe field tabel sumber dan tujuan serta mengaktifkan sinkronisasi berkinerja tinggi dengan Apache Arrow tanpa perlu konfigurasi manual. Anda dapat melihat pengaturan ini di editor tugas dengan menavigasi ke .
Dalam pengaturan Runtime Config, temukan parameter Enable Arrow short-circuit transfer. Opsi yang tersedia meliputi Auto (default), Force enable, dan Force disable.
Metode 2: Sinkronisasi offline tabel tunggal
Saat Anda mengonfigurasi tugas single-table offline synchronization, Anda dapat mengaktifkan fitur ini secara manual di editor kode dengan menambahkan "useArrow": true ke konfigurasi parameter keduanya, 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 dalam 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 column-store 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 column-store MaxCompute (Arrow → Arrow)
Konkurensi | Row Store Tradisional | Arrow Column Store | 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 | Sinkronisasi Arrow | 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 |
10,86x |
Parquet dan ORC adalah format column-store yang digunakan dalam sistem file terdistribusi seperti HDFS dan OSS.