StarRocks mendukung berbagai model data untuk berbagai skenario bisnis, dan semua data harus diorganisasi sesuai dengan model tertentu. Pelajari konsep dasar, prinsip, konfigurasi sistem, kasus penggunaan, praktik terbaik, dan FAQ mengenai berbagai metode impor.
Informasi latar belakang
Impor data membersihkan, mentransformasi, dan memuat data mentah ke dalam StarRocks berdasarkan model data tertentu untuk kueri. StarRocks menyediakan berbagai metode impor yang dapat Anda pilih berdasarkan volume data, frekuensi impor, dan persyaratan bisnis lainnya.
Gambar berikut menunjukkan hubungan antara metode impor StarRocks dan berbagai sumber data.
Anda dapat memilih metode impor yang berbeda berdasarkan sumber data:
-
Impor data offline: Jika data sumber Anda berada di Hive atau HDFS, gunakan Broker Load. Untuk impor kompleks yang melibatkan banyak tabel data, Anda dapat menggunakan . Metode ini memiliki performa lebih rendah dibandingkan Broker Load tetapi menghindari migrasi data. Jika satu tabel memiliki volume data yang sangat besar atau digunakan sebagai kamus data global untuk deduplikasi presisi, pertimbangkan untuk menggunakan Spark Load.
-
Impor data real-time: Setelah Anda menyinkronkan data log dan binary logging (binlog) database ke Kafka, Anda dapat menggunakan Routine Load untuk mengimpor data tersebut ke StarRocks. Jika proses impor Anda melibatkan penggabungan tabel yang kompleks dan pra-pemrosesan extract, transform, and load (ETL), Anda dapat menggunakan Flink (Flink Connector) untuk memproses data terlebih dahulu, lalu menulis hasilnya ke StarRocks menggunakan Stream Load.
-
Menulis ke StarRocks dari program: Anda dapat menggunakan Stream Load. Contohnya tersedia dalam demo Java atau Python pada dokumentasi Stream Load.
-
Mengimpor file teks: Anda dapat menggunakan Stream Load.
-
Mengimpor data MySQL: Anda dapat menggunakan tabel eksternal MySQL. Untuk mengimpor data, jalankan perintah
insert into new_table select * from external_table. -
Impor internal dalam StarRocks: Anda dapat menggunakan metode Insert Into, yang bekerja dengan penjadwal eksternal untuk melakukan pemrosesan ETL sederhana.
Gambar dan beberapa konten dalam topik ini berasal dari dokumentasi Overview of data loading untuk StarRocks open source.
Perhatian
Saat mengimpor data ke StarRocks, biasanya Anda menggunakan program untuk membuat koneksi. Perhatikan hal-hal berikut:
-
Pilih metode impor yang sesuai berdasarkan volume data, frekuensi impor, dan lokasi sumber data.
Misalnya, jika data sumber berada di HDFS, Anda dapat menggunakan Broker Load.
-
Tentukan protokol untuk metode impor: Jika Anda memilih Broker Load, sistem eksternal harus mampu menggunakan protokol MySQL untuk secara berkala mengirimkan dan memeriksa pekerjaan impor.
-
Tentukan jenis metode impor: Metode impor bersifat sinkron atau asinkron. Untuk metode impor asinkron, setelah mengirimkan pekerjaan impor, Anda harus menjalankan perintah untuk memeriksa status pekerjaan tersebut. Hasil perintah ini menunjukkan apakah impor berhasil atau tidak.
-
Buat kebijakan pembuatan label: Kebijakan tersebut harus memastikan bahwa setiap label unik dan tetap untuk setiap batch data.
-
Jamin semantik Exactly-Once: Sistem eksternal harus menjamin impor data At-Least-Once. Mekanisme label StarRocks menjamin impor data At-Most-Once. Kedua mekanisme ini secara bersama-sama menjamin semantik Exactly-Once untuk seluruh proses impor data.
Istilah
|
Term |
Description |
|
Import job |
Membaca data sumber yang dikirimkan oleh pengguna, membersihkan dan mentransformasinya, lalu memuatnya ke dalam sistem StarRocks. Setelah impor selesai, data tersebut dapat dikueri. |
|
Label |
Mengidentifikasi suatu import job. Semua import job memiliki label. Label dapat ditentukan oleh pengguna atau dihasilkan sistem dan bersifat unik dalam satu database. Label hanya dapat digunakan untuk satu import job yang berhasil. Setelah import job dengan label tertentu berhasil, Anda tidak dapat menggunakan kembali label tersebut untuk mengirimkan import job lain. Jika import job gagal, label tersebut dapat digunakan kembali. Mekanisme ini menjamin semantik impor At-Most-Once. |
|
Atomicity |
Semua metode impor di StarRocks menyediakan atomicity. Artinya, untuk satu import job, baik semua data valid berhasil diimpor atau tidak sama sekali. Impor parsial tidak terjadi. Data valid di sini tidak mencakup data yang difilter karena masalah kualitas, seperti error konversi tipe. Untuk informasi lebih lanjut tentang masalah kualitas data, lihat FAQ tentang impor data. |
|
Protokol MySQL dan HTTP |
StarRocks menyediakan dua antarmuka protokol akses untuk mengirimkan pekerjaan: protokol MySQL dan protokol HTTP. |
|
Broker Load |
Membaca data dari sumber eksternal seperti HDFS melalui program broker yang dideploy dan mengimpornya ke StarRocks. Proses broker menggunakan sumber daya komputasinya sendiri untuk memproses data secara awal. |
|
Spark Load |
Menggunakan sumber daya Spark eksternal untuk memproses data secara awal dan menghasilkan file perantara yang dibaca oleh StarRocks untuk impor. Spark Load bersifat asinkron — buat import job menggunakan protokol MySQL dan periksa hasilnya dengan perintah SHOW LOAD. |
|
FE |
Frontend (FE). Node metadata dan penjadwalan StarRocks, bertanggung jawab untuk menghasilkan rencana eksekusi impor dan menjadwalkan tugas impor. |
|
BE |
Backend (BE). Node komputasi dan penyimpanan StarRocks, bertanggung jawab atas ETL dan penyimpanan data selama impor. |
|
Tablet |
Shard logis dari tabel StarRocks. Sebuah tabel dapat dibagi menjadi beberapa tablet sesuai aturan partisi dan bucketing. Untuk informasi lebih lanjut, lihat Data distribution. |
Prinsip dasar
Alur eksekusi impor ditunjukkan pada gambar berikut.
Sebuah import job terdiri dari lima tahap berikut.
|
Tahap |
Deskripsi |
|
PENDING |
Opsional. Pada tahap ini, import job telah dikirimkan dan sedang menunggu FE menjadwalkan eksekusinya. Broker Load dan Spark Load mencakup tahap ini. |
|
ETL |
Opsional. Tahap ini melakukan pra-pemrosesan data, termasuk pembersihan, partisi, pengurutan, dan agregasi. Spark Load mencakup tahap ini. Tahap ini menggunakan sumber daya komputasi eksternal Spark untuk menyelesaikan proses ETL. |
|
LOADING |
Pada tahap ini, data terlebih dahulu dibersihkan dan ditransformasi, lalu dikirim ke BE untuk diproses. Setelah semua data dimuat, pekerjaan memasuki status menunggu hingga data berlaku. Status import job saat ini masih LOADING. |
|
FINISHED |
Setelah semua data yang terlibat dalam import job berlaku, status pekerjaan berubah menjadi FINISHED. Data dari pekerjaan FINISHED dapat dikueri. FINISHED adalah status akhir dari import job yang berhasil. |
|
CANCELLED |
Sebelum status pekerjaan berubah menjadi FINISHED, pekerjaan tersebut dapat dibatalkan kapan saja dan memasuki status CANCELLED. Misalnya, Anda dapat membatalkannya secara manual, atau terjadi error selama impor. CANCELLED juga merupakan status akhir untuk import job. |
Format impor data tercantum dalam tabel berikut.
|
Tipe |
Deskripsi |
|
Tipe integer |
TINYINT, SMALLINT, INT, BIGINT, dan LARGEINT. Contoh: 1, 1000, 1234. |
|
Tipe floating-point |
FLOAT, DOUBLE, dan DECIMAL. Contoh: 1,1; 0,23; 0,356. |
|
Tipe tanggal |
DATE dan DATETIME. Contoh: 2017-10-03, 2017-06-13 12:34:03. |
|
Tipe string |
CHAR dan VARCHAR. Contoh: I am a student, a. |
Metode impor
StarRocks menyediakan lima metode impor untuk berbagai sumber data seperti HDFS, Kafka, dan file lokal. Metode-metode ini bersifat sinkron atau asinkron.
Semua metode impor mendukung format data CSV. Broker Load juga mendukung format data Parquet dan ORC.
Pengenalan metode impor
|
Metode impor |
Deskripsi |
Jenis impor |
|
Broker Load |
Membaca sumber data eksternal melalui proses broker dan membuat import job di StarRocks melalui protokol MySQL. Pekerjaan berjalan secara asinkron. Lihat hasilnya dengan perintah Cocok untuk data di sistem penyimpanan yang dapat diakses broker seperti HDFS, dengan volume data puluhan hingga ratusan gigabyte. Untuk informasi lebih lanjut, lihat Broker Load. |
Impor asinkron |
|
Spark Load |
Menggunakan sumber daya Spark eksternal untuk memproses data yang diimpor secara awal, meningkatkan performa untuk dataset besar dan mengurangi penggunaan sumber daya kluster StarRocks. Metode asinkron ini memerlukan pembuatan pekerjaan melalui protokol MySQL dan pemeriksaan hasil dengan perintah Spark Load cocok untuk migrasi data dalam jumlah besar (hingga tingkat terabyte) ke StarRocks untuk pertama kalinya. Data sumber harus berada di sistem penyimpanan yang dapat diakses Spark, seperti HDFS. Untuk informasi lebih lanjut, lihat Spark Load. |
Impor asinkron |
|
Stream Load |
Metode sinkron yang mengimpor file lokal atau aliran data ke StarRocks melalui protokol HTTP. Hasil impor dikembalikan langsung dalam respons. Cocok untuk mengimpor file lokal atau data streaming dari program. Untuk informasi lebih lanjut, lihat Stream Load. |
Impor sinkron |
|
Routine Load |
Mengimpor data secara otomatis dari sumber yang ditentukan dengan membuat thread persisten. Kirimkan pekerjaan routine load melalui protokol MySQL untuk terus-menerus membaca dan mengimpor data dari sumber seperti Kafka. Untuk informasi lebih lanjut, lihat Routine Load. |
Impor asinkron |
|
Insert Into |
Seperti pernyataan `Insert` di MySQL, StarRocks menyediakan metode |
Impor sinkron |
Jenis impor
Jika program eksternal menggunakan fitur impor data StarRocks, Anda harus terlebih dahulu menentukan jenis metode impor yang akan digunakan, lalu menentukan logika koneksi.
-
Impor sinkron
Dalam impor sinkron, StarRocks segera mengeksekusi tugas dan mengembalikan hasilnya, yang menunjukkan apakah impor berhasil atau tidak.
Prosedur:
-
Pengguna (sistem eksternal) membuat tugas impor.
-
StarRocks mengembalikan hasil impor.
-
Pengguna (sistem eksternal) memeriksa hasil impor. Jika impor gagal, pengguna dapat membuat ulang tugas impor.
-
-
Impor asinkron
Dalam impor asinkron, StarRocks segera mengembalikan pesan keberhasilan pembuatan, tetapi data belum diimpor. Anda harus melakukan polling status pekerjaan dengan menjalankan perintah. Jika pembuatan tugas gagal, Anda dapat mencoba lagi berdasarkan informasi kegagalannya.
Prosedur:
-
Pengguna (sistem eksternal) membuat tugas impor.
-
StarRocks mengembalikan hasil pembuatan tugas.
-
Pengguna (sistem eksternal) memeriksa hasil pembuatan tugas. Jika tugas berhasil dibuat, lanjutkan ke langkah 4. Jika tidak, kembali ke langkah 1 dan coba buat ulang tugas impor.
-
Pengguna (sistem eksternal) melakukan polling status tugas hingga statusnya menjadi FINISHED atau CANCELLED.
-
Skenario
|
Skenario |
Deskripsi |
|
Impor HDFS |
Jika data sumber disimpan di HDFS dan volumenya antara puluhan hingga ratusan gigabyte, Anda dapat menggunakan metode Broker Load untuk mengimpor data ke StarRocks. Proses broker yang dideploy harus dapat mengakses sumber data HDFS. Pekerjaan impor berjalan secara asinkron. Anda dapat melihat hasil impor menggunakan perintah Jika data sumber disimpan di HDFS dan volumenya mencapai tingkat terabyte, Anda dapat menggunakan metode Spark Load untuk mengimpor data ke StarRocks. Proses Spark yang dideploy harus dapat mengakses sumber data HDFS. Pekerjaan impor berjalan secara asinkron. Anda dapat melihat hasil impor menggunakan perintah Untuk sumber data eksternal lainnya, Anda juga dapat menggunakan Broker Load atau Spark Load untuk mengimpor data, selama proses broker atau Spark dapat membaca dari sumber data yang sesuai. |
|
Impor file lokal |
Untuk file lokal di bawah 10 GB, gunakan Stream Load. Buat pekerjaan impor melalui protokol HTTP — pekerjaan berjalan secara sinkron dan langsung mengembalikan hasilnya. |
|
Impor Kafka |
Untuk data real-time dari sumber streaming seperti Kafka, gunakan Routine Load. Buat pekerjaan routine load melalui protokol MySQL, dan StarRocks akan terus-menerus membaca dan mengimpor data. |
|
Insert Into import |
Untuk pengujian manual dan pemrosesan data sementara, Anda dapat menggunakan metode Pernyataan |
Batasan memori
Atur parameter untuk membatasi penggunaan memori per import job dan mencegah error kehabisan memori (OOM). Metode pembatasan memori berbeda-beda tergantung metode impornya—lihat dokumentasi masing-masing metode untuk detailnya.
Sebuah import job biasanya didistribusikan ke beberapa BE. Parameter batasan memori membatasi penggunaan memori satu import job pada satu BE, bukan total seluruh kluster. Setiap BE juga memiliki batas memori total untuk semua import job. Untuk informasi lebih lanjut, lihat Konfigurasi sistem umum.
Batasan memori yang kecil dapat mengurangi efisiensi impor karena menyebabkan seringnya penulisan ke disk, sedangkan batasan yang besar berisiko menyebabkan error OOM dalam kondisi konkurensi tinggi. Atur parameter memori berdasarkan kebutuhan workload Anda.
Konfigurasi sistem umum
Konfigurasi FE
Konfigurasikan parameter FE berikut dalam file fe.conf.
|
Parameter |
Deskripsi |
|
max_load_timeout_second |
Periode timeout maksimum dan minimum untuk import job, dalam detik. Timeout maksimum default adalah 3 hari, dan minimum default adalah 1 detik. Timeout kustom yang Anda atur untuk import job tidak boleh melebihi rentang ini. Parameter ini berlaku untuk semua jenis tugas impor. |
|
min_load_timeout_second |
|
|
desired_max_waiting_jobs |
Jumlah maksimum tugas impor yang dapat ditampung oleh antrian tunggu. Nilai default adalah 100. Misalnya, jika jumlah tugas impor dalam status PENDING (menunggu eksekusi) di FE mencapai nilai ini, permintaan impor baru akan ditolak. Konfigurasi ini hanya berlaku untuk impor yang dieksekusi secara asinkron. Jika jumlah tugas impor asinkron yang menunggu mencapai batas, permintaan berikutnya untuk membuat import job akan ditolak. |
|
max_running_txn_num_per_db |
Jumlah maksimum tugas impor yang sedang berjalan di setiap database. Ini dihitung untuk semua jenis impor. Nilai default adalah 100. Ketika jumlah tugas impor yang sedang berjalan di database melebihi nilai maksimum, tugas impor berikutnya tidak akan dieksekusi. Untuk pekerjaan sinkron, pekerjaan tersebut ditolak. Untuk pekerjaan asinkron, pekerjaan tersebut menunggu dalam antrian. |
|
label_keep_max_second |
Periode retensi untuk catatan tugas impor. Catatan tugas impor yang selesai (FINISHED atau CANCELLED) disimpan dalam sistem StarRocks selama periode waktu yang ditentukan oleh parameter ini. Nilai default adalah 3 hari. Parameter ini berlaku untuk semua jenis tugas impor. |
Konfigurasi BE
Konfigurasikan parameter BE berikut dalam file be.conf.
|
Parameter |
Deskripsi |
|
push_write_mbytes_per_sec |
Batas kecepatan penulisan untuk satu tablet pada BE. Nilai default adalah 10, artinya 10 MB/detik. Kecepatan penulisan maksimum untuk satu tablet pada BE biasanya antara 10 MB/detik hingga 30 MB/detik, tergantung skema dan sistem. Anda dapat menyesuaikan parameter ini untuk mengontrol kecepatan impor. |
|
write_buffer_size |
Selama impor data, data pertama-tama ditulis ke blok memori pada BE. Ketika blok memori ini mencapai ambang batas, data tersebut ditulis ke disk. Nilai default adalah 100 MB. Ambang batas yang kecil dapat menyebabkan banyak file kecil di BE. Anda dapat menaikkan ambang batas ini untuk mengurangi jumlah file. Namun, ambang batas yang besar dapat menyebabkan timeout RPC. Untuk informasi lebih lanjut, lihat parameter tablet_writer_rpc_timeout_sec. |
|
tablet_writer_rpc_timeout_sec |
Timeout RPC untuk mengirimkan satu batch (1024 baris) selama proses impor. Default adalah 600 detik. RPC ini mungkin melibatkan penulisan beberapa blok memori tablet ke disk. Oleh karena itu, timeout RPC dapat terjadi karena penulisan ke disk. Anda dapat menyesuaikan timeout untuk mengurangi error timeout, seperti send batch fail. Selain itu, jika Anda menaikkan parameter write_buffer_size, Anda juga harus menaikkan parameter tablet_writer_rpc_timeout_sec. |
|
streaming_load_rpc_max_alive_time_sec |
Selama proses impor, StarRocks memulai writer untuk setiap tablet guna menerima dan menulis data. Parameter ini menentukan timeout tunggu writer tersebut. Default adalah 600 detik. Jika writer tidak menerima data apa pun dalam waktu yang ditentukan, writer tersebut akan dihapus secara otomatis. Ketika kecepatan pemrosesan sistem lambat, writer mungkin tidak menerima batch data berikutnya dalam waktu lama, sehingga menyebabkan error impor: |
|
load_process_max_memory_limit_percent |
Parameter-parameter ini menentukan batas memori maksimum dan persentase memori maksimum, masing-masing. Keduanya membatasi total memori yang dapat digunakan untuk tugas impor pada satu BE. Sistem menggunakan nilai yang lebih kecil dari keduanya sebagai batas memori akhir untuk tugas impor pada BE tersebut.
|
|
load_process_max_memory_limit_bytes |