全部产品
Search
文档中心

E-MapReduce:FAQ

更新时间:Jul 02, 2025

Bagian ini menjawab beberapa pertanyaan umum terkait impor data ke StarRocks.

Apa yang harus saya lakukan jika terjadi kesalahan "close index channel failed" atau "too many tablet versions"?

  • Penyebab

    Data tidak digabungkan secara tepat waktu karena frekuensi impor data yang tinggi. Akibatnya, jumlah versi untuk data yang belum digabungkan melebihi batas maksimum.

  • Solusi
    Secara default, jumlah maksimum versi untuk data yang belum digabungkan adalah 1.000. Gunakan salah satu metode berikut untuk memperbaiki kesalahan:
    • Tingkatkan jumlah data yang diimpor dalam setiap batch untuk mengurangi frekuensi impor data.
    • Atur parameter berikut ke nilai tertentu di file konfigurasi be.conf dari backend (BE) node untuk memodifikasi kebijakan penggabungan. Ini membantu meningkatkan kecepatan penggabungan data.
      cumulative_compaction_num_threads_per_disk = 4
      base_compaction_num_threads_per_disk = 2
      cumulative_compaction_check_interval_seconds = 2

Apa yang harus saya lakukan jika terjadi kesalahan "Label Already Exists"?

  • Deskripsi

    Pekerjaan impor yang menggunakan label yang sama berhasil dijalankan atau sedang berjalan di database yang sama dari kluster StarRocks.

  • Penyebab

    Stream Load mengirimkan permintaan pekerjaan impor melalui protokol HTTP. Dalam banyak kasus, klien HTTP dalam berbagai bahasa menggunakan logika pengulangan permintaan yang telah dikonfigurasi sebelumnya. Setelah kluster StarRocks menerima permintaan, data mulai diimpor ke kluster StarRocks dalam mode Stream Load. Hasil impor tidak dikembalikan ke klien HTTP secara tepat waktu. Akibatnya, klien HTTP mencoba mengirimkan permintaan yang sama lagi. Saat klien HTTP mengirimkan permintaan kedua, kesalahan Label Already Exists dikembalikan karena kluster StarRocks sedang memproses permintaan pertama.

  • Solusi
    Gunakan salah satu metode berikut untuk memeriksa apakah pekerjaan yang menggunakan metode impor data yang berbeda diberi label yang sama atau apakah Anda mengirimkan pekerjaan impor berulang kali.
    • Cari log node frontend utama (FE) berdasarkan label pekerjaan impor dan periksa apakah label tersebut muncul dua kali. Jika label muncul dua kali, klien HTTP mengirimkan permintaan dua kali.
      Catatan Label pekerjaan impor di kluster StarRocks tidak dapat dibedakan berdasarkan metode impor data. Akibatnya, pekerjaan yang menggunakan metode impor data yang berbeda mungkin diberi label yang sama.
    • Jalankan pernyataan SHOW LOAD WHERE LABEL = "xxx" untuk memeriksa apakah pekerjaan impor dalam status FINISHED menggunakan label yang sama. Dalam pernyataan tersebut, xxx adalah string dari label yang perlu diperiksa.

    Kami merekomendasikan Anda menghitung perkiraan durasi impor berdasarkan ukuran data yang ingin diimpor dan meningkatkan periode timeout untuk permintaan klien HTTP berdasarkan periode timeout impor. Ini membantu mencegah permintaan dikirimkan berulang kali oleh klien.

Apa yang harus saya lakukan jika terjadi kesalahan "ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel"?

Jalankan pernyataan SHOW LOAD. Kemudian, temukan URL di informasi yang dikembalikan oleh pernyataan tersebut dan lihat informasi kesalahan di URL. Kesalahan umum berikut mungkin terjadi:
  • convert csv string to INT failed.

    String dari kolom di file yang ingin diimpor gagal dikonversi ke tipe data tertentu. Misalnya, string abc gagal dikonversi menjadi angka.

  • the length of input is too long than schema.

    Panjang kolom di file yang ingin diimpor melebihi batas yang ditentukan. Misalnya, panjang string melebihi panjang tetap yang ditentukan saat tabel dibuat, atau nilai bidang tipe INT melebihi 4 byte panjangnya.

  • actual column number is less than schema column number.

    Setelah baris file yang ingin diimpor dibagi berdasarkan pemisah yang ditentukan, jumlah kolom yang dihasilkan kurang dari jumlah kolom yang ditentukan. Kesalahan ini mungkin disebabkan oleh pemisah yang tidak valid.

  • actual column number is more than schema column number.

    Setelah baris file yang ingin diimpor dibagi berdaskan pemisah yang ditentukan, jumlah kolom yang dihasilkan lebih besar dari jumlah kolom yang ditentukan.

  • the frac part length longer than schema scale.

    Bagian desimal dari nilai di kolom tipe DECIMAL di file yang ingin diimpor melebihi panjang yang ditentukan.

  • the int part length longer than schema precision.

    Bagian integer dari nilai di kolom tipe DECIMAL di file yang ingin diimpor melebihi panjang yang ditentukan.

  • there is no corresponding partition for this key.

    Nilai kolom kunci partisi dari baris di file yang ingin diimpor tidak berada dalam rentang partisi.

Apa yang harus saya lakukan jika terjadi kesalahan "ERROR 1064 (HY000): Failed to find enough host in all backends. need: 3"?

Tambahkan "replication_num" = "1" ke properti tabel saat Anda membuat tabel.

Apa yang harus saya lakukan jika terjadi kesalahan "Too many open files" di log node BE saat saya mengimpor data?

Untuk menyelesaikan masalah, lakukan langkah-langkah berikut:
  1. Ubah jumlah penanganan file di sistem.
  2. Kurangi nilai parameter base_compaction_num_threads_per_disk dan cumulative_compaction_num_threads_per_disk. Nilai default parameter tersebut adalah 1. Untuk informasi tentang cara memodifikasi item konfigurasi, lihat Modifikasi item konfigurasi.
  3. Jika masalah masih berlanjut, kami sarankan Anda menambah kapasitas kluster atau mengurangi frekuensi impor data.

Apa yang harus saya lakukan jika terjadi kesalahan "increase config load_process_max_memory_limit_percent"?

Jika pesan kesalahan yang mirip dengan gambar berikut muncul saat Anda mengimpor data, kami sarankan Anda memeriksa dan meningkatkan nilai parameter load_process_max_memory_limit_bytes dan load_process_max_memory_limit_percent. Untuk informasi tentang cara memodifikasi item konfigurasi, lihat Modifikasi item konfigurasi.tablet open failed

Apa yang harus saya lakukan jika terjadi timeout panggilan prosedur jarak jauh (RPC) selama impor data?

Periksa nilai parameter write_buffer_size di file be.conf dari node BE. Parameter ini digunakan untuk menentukan ukuran maksimum blok memori node BE. Nilai default parameter ini adalah 100, dalam MB. Jika nilainya terlalu besar, timeout RPC mungkin terjadi. Dalam hal ini, Anda perlu memodifikasi parameter write_buffer_size berdasarkan nilai parameter tablet_writer_rpc_timeout_sec di file konfigurasi node BE. Untuk informasi lebih lanjut tentang parameter lainnya di file konfigurasi node BE, lihat Konfigurasi parameter.

Apa yang harus saya lakukan jika terjadi kesalahan "Value count does not match column count"?

  • Deskripsi
    Pekerjaan impor gagal, dan pesan kesalahan "Value count does not match column count" muncul di URL detail kesalahan. Pesan kesalahan tersebut menunjukkan bahwa jumlah kolom yang diperoleh dengan mem-parsing data sumber tidak sesuai dengan jumlah kolom di tabel tujuan.
    Error: Value count does not match column count. Expect 3, but got 1. Row: 2023-01-01T18:29:00Z,cpu0,80.99
    Error: Value count does not match column count. Expect 3, but got 1. Row: 2023-01-01T18:29:10Z,cpu1,75.23
    Error: Value count does not match column count. Expect 3, but got 1. Row: 2023-01-01T18:29:20Z,cpu2,59.44
  • Penyebab

    Pemisah kolom yang Anda tentukan di perintah impor atau pernyataan impor tidak sesuai dengan pemisah kolom yang digunakan di data sumber. Dalam contoh sebelumnya, data sumber dalam format CSV dan berisi tiga kolom. Data sumber menggunakan koma (,) sebagai pemisah kolom, tetapi perintah impor atau pernyataan menggunakan karakter tab (\t) sebagai pemisah kolom. Akibatnya, data di kolom data sumber di-parsing menjadi satu kolom data.

  • Solusi

    Ubah pemisah kolom di perintah impor atau pernyataan impor menjadi koma (,) dan impor data lagi.

Bagaimana cara memilih metode impor?

Untuk informasi lebih lanjut tentang cara memilih metode impor, lihat Impor data.

Apa saja faktor yang mempengaruhi performa impor?

Dalam banyak kasus, faktor-faktor berikut mempengaruhi performa impor:
  • Memori server

    Jumlah tablet yang lebih besar mengonsumsi lebih banyak sumber daya memori. Kami merekomendasikan Anda mengikuti instruksi yang dijelaskan di Bagaimana cara menentukan jumlah tablet? untuk memperkirakan ukuran satu tablet.

  • Kapasitas I/O disk dan lebar pita jaringan

    Lebar pita jaringan 50 Mbit/s hingga 100 Mbit/s cocok.

  • Ukuran batch dan frekuensi impor
    • Kami merekomendasikan Anda mengatur ukuran batch impor ke nilai yang berkisar antara 10 hingga 100 MB saat menggunakan metode impor Stream Load.
    • Tidak diperlukan persyaratan ukuran batch untuk metode impor Broker Load. Metode impor ini tersedia untuk skenario di mana ukuran batch impor besar.
    • Frekuensi impor tidak boleh terlalu tinggi. Jangan menjalankan lebih dari satu pekerjaan impor per detik untuk serial advanced technology attachment (SATA) HDD.

Dapatkah Stream Load mengidentifikasi nama kolom di baris pertama file teks? Dapatkah Stream Load mengabaikan data di baris pertama file teks?

Tidak, Stream Load tidak dapat mengidentifikasi nama kolom di baris pertama file teks. Data di baris pertama adalah data umum untuk Stream Load. Stream Load tidak dapat mengabaikan data di baris pertama file teks. Jika nama kolom ada di baris pertama file teks yang ingin Anda impor, Anda dapat menyelesaikan masalah dengan menggunakan salah satu metode berikut:
  • Ubah pengaturan alat ekspor. Dengan cara ini, Anda dapat mengekspor file teks tanpa nama kolom.
  • Jalankan perintah sed -i '1d' filename untuk menghapus data di baris pertama file teks.
  • Tambahkan -H "where: column name! ='Column name' " ke pernyataan Stream Load untuk menyaring data di baris pertama.

    Sistem mengonversi string di baris pertama menjadi data tipe tertentu dan kemudian menyaring data tersebut. Jika konversi gagal, null dikembalikan. Jika Anda menggunakan metode ini, Anda harus memastikan bahwa properti NOT NULL tidak dikonfigurasikan untuk kolom di tabel StarRocks.

  • Tambahkan -H "max_filter_ratio:0.01" ke pernyataan Stream Load untuk mengatur tingkat toleransi kesalahan menjadi 1% atau nilai yang lebih kecil. Pastikan setidaknya satu baris kesalahan diizinkan untuk pekerjaan impor. Dengan cara ini, kesalahan yang terjadi di baris pertama dapat diabaikan. Anda juga dapat menentukan tingkat toleransi kesalahan yang lebih rendah berdasarkan jumlah data aktual yang ingin Anda impor. Setelah tingkat toleransi kesalahan ditentukan, ErrorURL di hasil yang dikembalikan masih menunjukkan bahwa kesalahan terjadi, tetapi pekerjaan impor berhasil. Kami merekomendasikan Anda untuk tidak menentukan tingkat toleransi kesalahan yang tinggi. Jika tidak, kesalahan data lainnya mungkin diabaikan.

Apakah saya perlu mengonversi tipe data dari data di kolom kunci partisi yang bukan bertipe DATE standar atau INT saat menggunakan Stream Load untuk mengimpor data ke StarRocks?

Ya, Anda dapat menggunakan StarRocks untuk mengonversi tipe data selama proses impor data.

Sebagai contoh, file TEST yang ingin Anda impor dalam format CSV dan berisi kolom NO, DATE, VERSION, dan PRICE, tetapi data di kolom DATE dalam format 202106.00. Jika kolom yang ingin Anda gunakan di StarRocks adalah DATE, Anda perlu membuat tabel yang berisi kolom NO, VERSION, PRICE, dan DATE di StarRocks. Anda juga perlu menentukan tipe data dari data di kolom DATE sebagai DATE, DATETIME, atau INT. Kemudian, Anda dapat mengonfigurasi pengaturan berikut di pernyataan Stream Load untuk melakukan konversi tipe data antar kolom:
-H "columns: NO,DATE_1, VERSION, PRICE, DATE=LEFT(DATE_1,6)"

Dalam pernyataan sebelumnya, DATE_1 dapat dianggap sebagai placeholder untuk mendapatkan data. Kemudian, fungsi LEFT() dipanggil untuk melakukan konversi tipe data dan menetapkan data yang dikonversi ke kolom DATE di tabel StarRocks. Perhatikan bahwa Anda harus mencantumkan nama sementara semua kolom di file CSV sebelum memanggil fungsi untuk melakukan operasi konversi. Fungsi yang dapat digunakan untuk melakukan konversi tipe data antar kolom adalah fungsi skalar, termasuk fungsi non-agregat dan fungsi jendela.

Apa yang harus saya lakukan jika terjadi kesalahan "body exceed max size: 10737418240, limit: 10737418240"?

  • Penyebab

    Ukuran file data sumber melebihi ukuran file maksimum (10 GB) yang didukung oleh Stream Load.

  • Solusi
    • Pisahkan file dengan menjalankan perintah seq -w 0 n.
    • Jalankan perintah curl -XPOST http:///be_host:http_port/api/update_config?streaming_load_max_mb=<file_size> untuk mengubah nilai parameter streaming_load_max_mb untuk meningkatkan ukuran maksimum file. Untuk informasi lebih lanjut tentang parameter lainnya di file konfigurasi node BE, lihat Konfigurasi parameter.

Bagaimana cara meningkatkan performa impor?

Metode 1: Tingkatkan paralelisme tugas

Catatan Metode ini mungkin mengonsumsi lebih banyak sumber daya CPU, dan data versi terlalu banyak diimpor.
Pisahkan pekerjaan impor menjadi beberapa tugas untuk dijalankan. Paralelisme tugas dihitung berdasarkan rumus berikut. Paralelisme tugas maksimum ditentukan oleh jumlah node BE hidup atau jumlah partisi yang ingin dikonsumsi.
min(alive_be_number, partition_number, desired_concurrent_number, max_routine_load_task_concurrent_num)
Parameter:
  • alive_be_number: jumlah node BE hidup.
  • partition_number: jumlah partisi yang ingin dikonsumsi.
  • desired_concurrent_number: paralelisme tugas yang diharapkan dari pekerjaan Routine Load tunggal. Nilai default: 3.
    • Jika Anda belum membuat pekerjaan impor, Anda harus mengonfigurasi parameter ini saat Anda mengeksekusi pernyataan CREATE ROUTINE LOAD.
    • Jika Anda telah membuat pekerjaan impor, Anda harus memodifikasi parameter ini saat Anda mengeksekusi pernyataan ALTER ROUTINE LOAD.
  • max_routine_load_task_concurrent_num: paralelisme tugas maksimum dari pekerjaan Routine Load tunggal. Nilai default: 5. Parameter ini adalah parameter dinamis FE. Untuk informasi lebih lanjut, lihat Konfigurasi parameter.

Jika sejumlah besar partisi dan node BE digunakan, dan nilai parameter alive_be_number dan partition_number lebih besar dari nilai parameter desired_concurrent_number dan max_routine_load_task_concurrent_num, Anda dapat meningkatkan nilai parameter desired_concurrent_number dan max_routine_load_task_concurrent_num untuk meningkatkan paralelisme tugas.

Sebagai contoh, jumlah partisi yang ingin Anda konsumsi adalah 7, jumlah node BE hidup adalah 5, dan nilai default max_routine_load_task_concurrent_num adalah 5. Dalam hal ini, jika Anda ingin meningkatkan paralelisme tugas ke batas atas, Anda perlu mengubah nilai parameter desired_concurrent_number dari 3 (nilai default) menjadi 5. Kemudian, paralelisme tugas dihitung berdasarkan rumus berikut: min(5,7,5,5). Hasilnya adalah 5.

Metode 2: Tingkatkan jumlah data di partisi yang dapat dikonsumsi oleh satu tugas impor

Catatan Metode ini dapat meningkatkan latensi impor data.

Jumlah maksimum pesan yang dapat dikonsumsi oleh satu tugas Routine Load ditentukan oleh parameter max_routine_load_batch_size atau routine_load_task_consume_second. Saat tugas impor mengonsumsi data, dan jumlah maksimum pesan yang dikonsumsi memenuhi persyaratan parameter sebelumnya, konsumsi selesai. Parameter sebelumnya adalah parameter FE. Untuk informasi lebih lanjut, lihat Konfigurasi parameter.

Anda dapat melihat file be/log/be.INFO untuk menganalisis parameter yang menentukan batas atas jumlah data yang dapat dikonsumsi oleh satu tugas impor. Kemudian, Anda dapat meningkatkan nilai parameter ini untuk meningkatkan jumlah data yang dapat dikonsumsi oleh satu tugas impor.
I0325 20:27:50.410579 15259 data_consumer_group.cpp:131] consumer group done: 41448fb1a0ca59ad-30e34dabfa7e47a0. consume time(ms)=3261, received rows=179190, received bytes=9855450, eos: 1, left_time: -261, left_bytes: 514432550, blocking get time(us): 3065086, blocking put time(us): 24855

Dalam kondisi normal, nilai parameter left_bytes sama dengan atau lebih besar dari 0. Ini menunjukkan bahwa jumlah data yang dibaca dalam satu batch tidak melebihi nilai yang ditentukan oleh parameter max_routine_load_batch_size dalam periode waktu yang ditentukan oleh parameter routine_load_task_consume_second. Dalam hal ini, semua tugas impor yang dijadwalkan dapat mengonsumsi semua data Kafka tanpa latensi. Anda dapat meningkatkan nilai parameter routine_load_task_consume_second untuk meningkatkan jumlah data yang dapat dikonsumsi oleh satu tugas impor.

Jika nilai parameter left_bytes kurang dari 0, jumlah data yang dapat dibaca dalam satu batch melebihi nilai yang ditentukan oleh parameter max_routine_load_batch_size dalam periode waktu yang ditentukan oleh parameter routine_load_task_consume_second. Dalam hal ini, tugas impor yang dijadwalkan mungkin tidak mengonsumsi semua data Kafka. Anda dapat meningkatkan nilai parameter max_routine_load_batch_size.

Setelah saya mengeksekusi pernyataan SHOW ROUTINE LOAD, status pekerjaan impor berubah menjadi PAUSED atau CANCELLED. Apa yang harus saya lakukan?

Anda dapat menyelesaikan kesalahan berdasarkan deskripsi kesalahan:
  • Deskripsi: Status pekerjaan impor berubah menjadi PAUSED, dan deskripsi ReasonOfStateChanged adalah Broker: Offset out of range.
    • Penyebab: Offset konsumen pekerjaan impor tidak ada di partisi Kafka.
    • Solusi: Jalankan pernyataan SHOW ROUTINE LOAD untuk melihat offset konsumen terbaru dari pekerjaan impor di parameter Progress. Kemudian, periksa apakah pesan di offset konsumen ada di partisi Kafka. Jika pesan di offset konsumen tidak ada, masalah mungkin terjadi karena alasan berikut:
      • Offset konsumen yang ditentukan saat Anda membuat pekerjaan impor adalah titik waktu di masa depan.
      • Di partisi Kafka, pesan di offset konsumen dihapus sebelum pesan tersebut dikonsumsi oleh pekerjaan impor. Kami merekomendasikan Anda mengonfigurasi kebijakan dan parameter pembersihan, seperti parameter log.retention.hours dan log.retention.bytes, untuk log Kafka berdasarkan kecepatan impor pekerjaan impor.
  • Deskripsi: Status pekerjaan impor berubah menjadi PAUSED.
    • Penyebab: Jumlah baris data kesalahan yang diimpor oleh tugas impor mungkin melebihi batas atas yang ditentukan oleh parameter max_error_number.
    • Solusi: Selesaikan kesalahan berdasarkan deskripsi ReasonOfStateChanged dan ErrorLogUrls.
      • Jika kesalahan terjadi karena format data yang salah dari sumber data, periksa format data dan perbaiki kesalahan. Setelah Anda memperbaiki kesalahan, jalankan pernyataan RESUME ROUTINE LOAD untuk melanjutkan pekerjaan impor dalam status PAUSED.
      • Jika format data sumber data tidak dapat diuraikan oleh StarRocks, ubah parameter max_error_number untuk mengubah jumlah maksimum baris data kesalahan yang diizinkan untuk pekerjaan impor.
        1. Jalankan pernyataan SHOW ROUTINE LOAD untuk memeriksa nilai parameter max_error_number.
        2. Jalankan pernyataan ALTER ROUTINE LOAD untuk meningkatkan nilai parameter max_error_number.
        3. Jalankan pernyataan RESUME ROUTINE LOAD untuk melanjutkan pekerjaan impor dalam status PAUSED.
  • Deskripsi: Status pekerjaan impor berubah menjadi CANCELLED.
    • Penyebab: Penyimpangan mungkin terjadi saat Anda mengeksekusi tugas impor. Misalnya, tabel dihapus.
    • Solusi: Selesaikan kesalahan berdasarkan deskripsi ReasonOfStateChanged dan ErrorLogUrls. Anda tidak dapat melanjutkan pekerjaan impor dalam status CANCELLED setelah Anda memperbaiki kesalahan.

Dapatkah semantik exactly-once dipastikan ketika saya menggunakan Routine Load untuk mengimpor data dari Kafka ke StarRocks?

Ya, semantik exactly-once dapat dipastikan.

Tugas impor adalah transaksi terpisah. Jika terjadi kesalahan selama eksekusi transaksi, transaksi dihentikan, dan node FE tidak memperbarui kemajuan konsumsi partisi terkait dari tugas impor. Saat node FE menjadwalkan tugas impor dalam antrian, node FE memulai permintaan konsumsi dari offset konsumen terakhir yang disimpan dari partisi. Ini membantu memastikan semantik exactly-once.

Apa yang harus saya lakukan jika terjadi kesalahan "Broker: Offset out of range"?

Jalankan pernyataan SHOW ROUTINE LOAD untuk melihat offset terbaru. Kemudian, periksa apakah offset tersebut mencakup data di klien Kafka. Penyebab yang mungkin:
  • Offset masa depan ditentukan selama impor.
  • Kafka membersihkan data offset sebelum pekerjaan impor dimulai. Anda harus menentukan nilai yang sesuai untuk parameter yang ingin Anda gunakan untuk membersihkan log berdasarkan kecepatan impor StarRocks, seperti parameter log.retention.hours dan log.retention.bytes.

Dapatkah saya menggunakan Broker Load untuk menjalankan ulang pekerjaan impor yang berhasil dan berada dalam status FINISHED?

Tidak, Anda tidak dapat menggunakan Broker Load untuk menjalankan ulang pekerjaan impor yang berhasil dan berada dalam status FINISHED. Selain itu, label setiap pekerjaan impor yang berhasil tidak dapat digunakan kembali. Ini memastikan bahwa pekerjaan impor tidak hilang atau diduplikasi. Jika Anda ingin menjalankan ulang pekerjaan impor yang berhasil dan berada dalam status FINISHED, Anda dapat melakukan langkah-langkah berikut: Jalankan pernyataan SHOW LOAD untuk melihat catatan impor historis, temukan pekerjaan impor yang ingin Anda jalankan ulang, dan buat pekerjaan impor lain berdasarkan informasi tentang pekerjaan yang ingin Anda jalankan ulang dan label pekerjaan baru.

Saat saya mengimpor data HDFS ke StarRocks menggunakan Broker Load, nilai bidang tanggal tidak normal, dan waktunya lebih lambat 8 jam dari waktu yang benar. Apa yang harus saya lakukan?

  • Penyebab

    Zona waktu yang Anda tentukan saat membuat tabel StarRocks dan pekerjaan impor adalah UTC+8, tetapi server menggunakan zona waktu UTC+0. Akibatnya, nilai bidang tanggal sama dengan nilai asli bidang tanggal ditambah delapan jam.

  • Solusi

    Hapus parameter zona waktu saat Anda membuat tabel StarRocks.

Saat saya mengimpor data dalam format ORC ke StarRocks menggunakan Broker Load, terjadi kesalahan "ErrorMsg: type:ETL_RUN_FAIL; msg:Cannot cast '<slot 6>' from VARCHAR to ARRAY<VARCHAR(30)>". Apa yang harus saya lakukan?

  • Penyebab

    Nama kolom di file yang ingin Anda impor tidak sesuai dengan nama kolom di tabel StarRocks. Dalam hal ini, sistem mengimplementasikan inferensi tipe saat mengeksekusi pernyataan SET dan memanggil fungsi cast untuk melakukan konversi tipe data. Akibatnya, konversi tipe data gagal.

  • Solusi

    Pastikan nama kolom di file yang ingin Anda impor sesuai dengan nama kolom di tabel StarRocks. Dengan cara ini, pernyataan SET dan fungsi cast tidak diperlukan.

Tidak ada kesalahan yang terjadi saat saya menggunakan Broker Load untuk membuat pekerjaan impor, tetapi tidak ada data yang ditemukan. Apa yang harus saya lakukan?

Broker Load adalah metode impor asinkron. Bahkan jika tidak ada kesalahan yang terjadi saat Anda mengeksekusi pernyataan terkait untuk membuat pekerjaan impor, pekerjaan impor mungkin tidak berhasil. Anda dapat mengeksekusi pernyataan SHOW LOAD untuk melihat status dan pesan error dari pekerjaan impor, modifikasi parameter yang dikonfigurasikan untuk pekerjaan impor, dan kemudian jalankan ulang pekerjaan impor.

Apa yang harus saya lakukan jika terjadi kesalahan "failed to send batch" atau "TabletWriter add batch with unknown id"?

Kesalahan ini terjadi karena timeout penulisan data. Anda perlu mengubah nilai variabel sistem query_timeout dan parameter BE streaming_load_rpc_max_alive_time_sec. Untuk informasi lebih lanjut tentang parameter lainnya di file konfigurasi node BE, lihat Konfigurasi parameter.

Apa yang harus saya lakukan jika terjadi kesalahan "LOAD-RUN-FAIL; msg:OrcScannerAdapter::init_include_columns. col name = xxx not found"?

Jika data diimpor dari file Parquet atau ORC, periksa apakah nama kolom di header file sesuai dengan nama kolom di tabel tujuan StarRocks.

Dalam kode sampel berikut, kolom tmp_c1 dan tmp_c2 di file Parquet atau ORC dipetakan masing-masing ke kolom name dan id di tabel StarRocks. Jika Anda tidak mengeksekusi pernyataan SET, kolom sumber dipetakan ke kolom yang namanya sama dengan nama yang ditentukan tetapi mungkin tidak ada di tabel StarRocks.
(tmp_c1,tmp_c2)
SET
(
   id=tmp_c2,
   name=tmp_c1
)

Jika Anda mengimpor file ORC yang dihasilkan di versi tertentu Hive, dan header di file ORC adalah (_col0, _col1, _col2, ...), kesalahan "Invalid Column Name" mungkin terjadi. Dalam hal ini, Anda perlu mengeksekusi pernyataan SET untuk mengonfigurasi aturan pemetaan kolom.

Apa yang harus saya lakukan jika pekerjaan impor tidak selesai dalam waktu lama?

Di file fe.log dari node FE, cari ID pekerjaan impor berdasarkan label pekerjaan impor. Kemudian, di file be.INFO dari node BE, cari konteks log berdasarkan ID pekerjaan impor untuk mengidentifikasi penyebab kesalahan.

Bagaimana cara mengakses kluster Apache HDFS dengan high-availability?

Setelah Anda mengonfigurasi high availability (HA) untuk NameNodes di kluster HDFS, jika NameNode aktif beralih ke yang lain, NameNode aktif baru dapat diidentifikasi secara otomatis. Untuk mengakses kluster HDFS yang diterapkan dalam mode HA, konfigurasikan parameter yang dijelaskan dalam tabel berikut.

Parameter

Deskripsi

dfs.nameservices

Nama layanan HDFS. Anda dapat menetapkan nama kustom.

Sebagai contoh, atur parameter dfs.nameservices ke my_ha.

dfs.ha.namenodes.xxx

Nama kustom NameNode. Pisahkan beberapa nama dengan koma (,). Ganti xxx di nama parameter ini dengan nama kustom yang Anda tetapkan untuk parameter dfs.nameservices.

Sebagai contoh, atur parameter dfs.ha.namenodes.my_ha ke my_nn.

dfs.namenode.rpc-address.xxx.nn

Alamat yang digunakan oleh NameNode untuk panggilan prosedur jarak jauh (RPC). Ganti nn di nama parameter ini dengan nama NameNode yang Anda tetapkan untuk parameter dfs.ha.namenodes.xxx.

Sebagai contoh, atur parameter dfs.namenode.rpc-address.my_ha.my_nn ke nilai dalam format Hostname:Nomor Port.

dfs.client.failover.proxy.provider.xxx

Penyedia yang digunakan klien untuk terhubung ke NameNode. Nilai default: org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.

Anda dapat menggunakan autentikasi sederhana atau autentikasi Kerberos untuk mengakses kluster HDFS yang diterapkan dalam mode HA. Kode sampel berikut memberikan contoh cara mengakses kluster HDFS HA menggunakan autentikasi sederhana:

(
    "username"="user",
    "password"="passwd",
    "dfs.nameservices" = "my-ha",
    "dfs.ha.namenodes.my-ha" = "my_namenode1,my_namenode2",
    "dfs.namenode.rpc-address.my-ha.my-namenode1" = "nn1-host:rpc_port",
    "dfs.namenode.rpc-address.my-ha.my-namenode2" = "nn2-host:rpc_port",
    "dfs.client.failover.proxy.provider.my-ha" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
)

Konfigurasi kluster HDFS dapat ditulis ke file hdfs-site.xml. Jika Anda menggunakan proses broker untuk membaca informasi tentang kluster HDFS, Anda hanya perlu menentukan jalur file dan informasi autentikasi kluster.

Bagaimana cara mengonfigurasi ViewFs di HDFS Federation?

Salin file konfigurasi core-site.xml dan hdfs-site.xml dari View File System (ViewFs) ke direktori broker/conf.

Jika sistem file kustom disertakan, salin file .jar terkait sistem file ke direktori broker/lib.

Apa yang harus saya lakukan jika terjadi kesalahan "Can't get Kerberos realm" saat saya mengakses kluster EMR yang memiliki autentikasi Kerberos diaktifkan?

  1. Periksa apakah file /etc/krb5.conf dikonfigurasikan di semua mesin fisik broker.
  2. Jika kesalahan masih terjadi setelah file sebelumnya dikonfigurasikan di semua mesin fisik broker, tambahkan -Djava.security.krb5.conf:/etc/krb5.conf ke variabel JAVA_OPTS di skrip startup Broker.

Mengapa dibutuhkan sekitar 50 hingga 100 milidetik untuk menyisipkan satu rekaman data saat saya mengeksekusi pernyataan INSERT INTO untuk mengimpor data?

Pernyataan INSERT INTO digunakan untuk mengimpor beberapa rekaman data dalam satu batch. Akibatnya, periode waktu yang diperlukan untuk mengimpor satu rekaman data tunggal sama dengan periode waktu yang diperlukan untuk mengimpor beberapa rekaman data dalam satu batch. Kami merekomendasikan Anda untuk tidak menggunakan pernyataan INSERT INTO untuk mengimpor satu rekaman data tunggal dalam skenario pemrosesan analitik online (OLAP).

Apa yang harus saya lakukan jika terjadi kesalahan "index channel has intolerable failure" saat saya mengeksekusi pernyataan INSERT INTO SELECT untuk mengimpor data?

Kesalahan ini terjadi karena timeout RPC untuk Stream Load. Anda dapat memperbaiki kesalahan dengan memodifikasi parameter yang terkait dengan timeout RPC di file konfigurasi yang sesuai.

Modifikasi parameter sistem berikut di file konfigurasi be.conf dan mulai ulang kluster agar modifikasi berlaku.
  • streaming_load_rpc_max_alive_time_sec: periode timeout RPC untuk Stream Load. Nilai default: 1200. Unit: detik.
  • tablet_writer_rpc_timeout_sec: periode timeout untuk TabletWriter. Nilai default: 600. Unit: detik.

Apa yang harus saya lakukan jika eksekusi gagal dan terjadi kesalahan "execute timeout" saat saya mengeksekusi pernyataan INSERT INTO SELECT untuk mengimpor sejumlah besar data?

Kesalahan ini terjadi karena query timeout. Untuk memperbaiki kesalahan, ubah parameter query_timeout dari sesi. Nilai default adalah 600. Unit: detik.

Contoh perintah:
set query_timeout =xx;

Apa yang harus saya lakukan jika terjadi kesalahan "Could not execute SQL statement. Reason:org.apache.flink.table.api.ValidationException: One or more required options are missing" saat saya menjalankan pekerjaan Flink?

  • Penyebab

    Beberapa aturan, seperti [table-rule.1] dan [table-rule.2], dikonfigurasikan di file konfigurasi config_prod.conf dari StarRocks-migrate-tools (SMT), tetapi informasi yang diperlukan tidak ditentukan untuk aturan tersebut.

  • Solusi

    Periksa apakah database, tabel, dan konektor Flink dikonfigurasikan untuk aturan [table-rule.1] dan [table-rule.2].

Bagaimana Flink memulai ulang tugas yang gagal?

Flink memulai ulang tugas yang gagal berdasarkan mekanisme checkpointing dan kebijakan restart.

Untuk mengaktifkan mekanisme checkpointing dan menggunakan kebijakan restart delay tetap, konfigurasikan parameter berikut di file konfigurasi flink-conf.yaml:
# unit: ms
execution.checkpointing.interval: 300000
state.backend: filesystem
state.checkpoints.dir: file:///tmp/flink-checkpoints-directory
Parameter:
  • execution.checkpointing.interval: interval antara dua checkpoint. Unit: ms. Untuk mengaktifkan mekanisme checkpointing, Anda harus menentukan nilai yang lebih besar dari 0 untuk parameter ini.
  • state.backend: Setelah mekanisme checkpointing diaktifkan, status dipertahankan berdasarkan checkpoint untuk mencegah kehilangan data dan memastikan konsistensi data selama pemulihan data. Penyimpanan informasi status, metode yang digunakan untuk penyimpanan, dan lokasi status yang dipertahankan berdasarkan checkpoint bergantung pada backend status yang Anda pilih. Untuk informasi lebih lanjut, lihat State Backends.
  • state.checkpoints.dir: direktori tempat checkpoint disimpan.

Bagaimana cara menghentikan pekerjaan Flink dan mengembalikan pekerjaan Flink ke status sebelum dihentikan?

Anda dapat memicu savepoint untuk menghentikan pekerjaan Flink dan melanjutkan pekerjaan dari savepoint. Savepoint adalah gambar konsisten dari status eksekusi pekerjaan streaming yang dibuat berdasarkan mekanisme checkpointing. Untuk informasi lebih lanjut, lihat Savepoints.

Savepoint untuk pekerjaan Flink yang menggunakan ID tertentu juga dapat dipicu secara otomatis untuk menghentikan pekerjaan Flink. Anda dapat menentukan direktori sistem file tujuan untuk menyimpan savepoint.

Jika Anda ingin mengembalikan pekerjaan Flink ke status sebelum dihentikan, Anda harus menentukan savepoint saat Anda mengirim ulang pekerjaan Flink. Contoh perintah:
bin/flink stop --type [native/canonical] --savepointPath [:targetDirectory] :jobId
Parameter:
  • jobId: ID pekerjaan Flink. Anda dapat melihat ID dengan menjalankan perintah flink list -running atau di antarmuka web Flink.
  • targetDirectory: Direktori tempat savepoint disimpan. Untuk menentukan direktori untuk menyimpan savepoint, konfigurasikan parameter state.savepoints.dir di file konfigurasi flink-conf.yml dari Flink. Dengan cara ini, Anda dapat menggunakan direktori yang ditentukan untuk menyimpan savepoint saat savepoint dipicu.
    state.savepoints.dir: [file:// or hdfs://]/home/user/savepoints_dir
Jika Anda ingin mengembalikan pekerjaan Flink ke status sebelum dihentikan, Anda harus menentukan savepoint saat Anda mengirim ulang pekerjaan Flink.
./flink run -c com.starrocks.connector.flink.tools.ExecuteSQL -s savepoints_dir/savepoints-xxxxxxxx flink-connector-starrocks-xxxx.jar -f flink-create.all.sql

Apa yang harus saya lakukan jika impor data gagal saat saya menggunakan semantik exactly-once dari transaksi untuk mengimpor data?

  • Deskripsi: Informasi kesalahan berikut dikembalikan:
    com.starrocks.data.load.stream.exception.StreamLoadFailException: {
        "TxnId": 3382****,
        "Label": "502c2770-cd48-423d-b6b7-9d8f9a59****",
        "Status": "Fail",
        "Message": "timeout by txn manager",-- Pesan kesalahan
        "NumberTotalRows": 1637,
        "NumberLoadedRows": 1637,
        "NumberFilteredRows": 0,
        "NumberUnselectedRows": 0,
        "LoadBytes": 4284214,
        "LoadTimeMs": 120294,
        "BeginTxnTimeMs": 0,
        "StreamLoadPlanTimeMs": 7,
        "ReadDataTimeMs": 9,
        "WriteDataTimeMs": 120278,
        "CommitAndPublishTimeMs": 0
    }
  • Penyebab: Nilai parameter sink.properties.timeout kurang dari interval checkpoint Flink.
  • Solusi: Tingkatkan nilai parameter sink.properties.timeout. Nilainya harus lebih besar dari interval checkpoint Flink.

Setelah driver flink-connector-jdbc_2.11 digunakan untuk mengimpor data ke StarRocks, waktunya lebih awal 8 jam daripada waktu di Flink. Apa yang harus saya lakukan?

  • Deskripsi: Waktu yang dihasilkan oleh fungsi localtimestap normal di Flink. Setelah driver flink-connector-jdbc_2.11 digunakan untuk mengimpor data ke StarRocks, waktunya lebih awal 8 jam daripada waktu di Flink. Zona waktu server tempat Flink dan StarRocks diterapkan adalah UTC+8 (Asia/Shanghai). Versi Flink adalah 1.12 dan driver adalah flink-connector-jdbc_2.11.
  • Solusi: Tetapkan parameter server-time-zone ke Asia/Shanghai untuk tabel sink Flink dan tambahkan &serverTimezone=Asia/Shanghai ke nilai parameter url. Contoh pernyataan:
    CREATE TABLE sk (
        sid int,
        local_dtm TIMESTAMP,
        curr_dtm TIMESTAMP
    )
    WITH (
        'connector' = 'jdbc',
        'url' = 'jdbc:mysql://192.168.**.**:9030/sys_device?characterEncoding=utf-8&serverTimezone=Asia/Shanghai',
        'table-name' = 'sink',
        'driver' = 'com.mysql.jdbc.Driver',
        'username' = 'sr',
        'password' = 'sr123',
        'server-time-zone' = 'Asia/Shanghai'
    );

Data dari Kafka yang diterapkan pada kluster StarRocks dapat diimpor ke StarRocks. Namun, data dari Kafka yang diterapkan pada mesin lain tidak dapat diimpor ke StarRocks. Mengapa?

  • Deskripsi: Pesan kesalahan berikut dikembalikan:
    failed to query wartermark offset, err: Local: Bad message format
  • Penyebab: Kafka tidak dapat mem-parsing nama host kluster StarRocks.
  • Solusi: Tentukan nama host Kafka di node kluster StarRocks. Dengan cara ini, file /etc/hosts dapat diuraikan.

Memori node BE sepenuhnya terpakai dan penggunaan CPU node BE mencapai 100% saat tidak ada kueri yang dilakukan. Mengapa?

Node BE mengumpulkan statistik secara berkala dan tidak mengonsumsi sumber daya CPU dalam waktu lama. Jika kurang dari 10 GB memori digunakan, node BE tidak melepaskan sisa sumber daya memori. Node BE mengelola sumber daya memori berdasarkan konfigurasinya. Anda dapat mengonfigurasi parameter tc_use_memory_min untuk mengubah ukuran memori.

tc_use_memory_min menentukan memori minimum TCmalloc. Nilai default adalah 10737418240. StarRocks mengembalikan sumber daya memori yang tidak digunakan ke sistem operasi hanya jika memori yang digunakan melebihi nilai parameter tc_use_memory_min. Untuk mengonfigurasi parameter, lakukan langkah-langkah berikut: Di konsol EMR, buka tab Configure halaman layanan StarRocks. Di tab Konfigurasi, klik tab be.conf. Untuk informasi lebih lanjut tentang parameter lainnya di file konfigurasi node BE, lihat Konfigurasi parameter.

Mengapa node BE tidak mengembalikan sumber daya memori yang diminta ke sistem operasi?

Alokasi memori adalah operasi berat. Saat database meminta sejumlah besar sumber daya memori dari sistem operasi, lebih banyak sumber daya memori dicadangkan untuk database. Untuk menggunakan kembali sumber daya memori, sumber daya memori yang diminta dikembalikan ke sistem operasi dengan penundaan. Kami merekomendasikan Anda memantau penggunaan memori selama verifikasi lingkungan pengujian dan memeriksa apakah sumber daya memori dapat dikembalikan ke sistem operasi dalam waktu lama.

Mengapa sistem gagal mem-parsing dependensi dari Flink connector?

  • Penyebab: Anda perlu mendapatkan dependensi dari Flink connector dari alamat repositori gambar Alibaba Cloud. Pengaturan terkait tidak dikonfigurasikan di file /etc/maven/settings.xml. Akibatnya, tidak semua dependensi dari Flink connector diperoleh dari alamat repositori gambar Alibaba Cloud.
  • Solusi: Ubah alamat repositori publik Alibaba Cloud menjadi https://maven.aliyun.com/repository/public.

Apakah parameter sink.buffer-flush.interval-ms berlaku jika parameter tersebut dikonfigurasikan bersama dengan parameter interval checkpoint di Flink-connector-StarRocks?

  • Deskripsi masalah: Parameter sink.buffer-flush.interval-ms diatur ke 15 detik, tetapi parameter checkpoint interval diatur ke 5 menit.
    +----------------------+--------------------------------------------------------------+
    |         Option       | Required |  Default   | Type   |       Description           |
    +-------------------------------------------------------------------------------------+
    |  sink.buffer-flush.  |  NO      |   300000   | String | interval waktu flush, |
    |  interval-ms         |          |            |        | rentang: [1000ms, 3600000ms]  |
    +----------------------+--------------------------------------------------------------+
  • Solusi: Operasi flush tidak terpengaruh oleh nilai parameter checkpoint interval. Operasi flush dipicu ketika nilai salah satu parameter berikut melebihi batas yang ditentukan. Nilai parameter checkpoint interval berlaku untuk semantik exactly-once, dan parameter sink.buffer-flush.interval-ms berlaku untuk semantik at-least-once.
    sink.buffer-flush.max-rows
    sink.buffer-flush.max-bytes
    sink.buffer-flush.interval-ms

Dapatkah saya memperbarui data yang diimpor menggunakan DataX?

StarRocks versi terbaru memungkinkan Anda menggunakan DataX untuk memperbarui data di tabel StarRocks yang dibuat menggunakan model kunci utama. Untuk mengaktifkan fitur ini, Anda perlu menambahkan bidang _op di bagian pembaca file konfigurasi JSON.

Saat saya menggunakan DataX untuk menyinkronkan data, bagaimana cara menangani kata kunci DataX untuk menghindari kesalahan?

Gunakan tanda kutip balik (``) untuk mengapit kata kunci.

Apa yang harus saya lakukan jika terjadi kesalahan "When running with master 'yarn' either HADOOP-CONF-DIR or YARN-CONF-DIR must be set in the environment"?

Konfigurasikan variabel lingkungan HADOOP-CONF-DIR di skrip spark-env.sh dari klien Spark.

Apa yang harus saya lakukan jika terjadi kesalahan "Cannot run program "xxx/bin/spark-submit": error=2, No such file or directory" saat saya menjalankan perintah spark-submit untuk mengirimkan pekerjaan Spark?

Saat Anda menggunakan Spark Load untuk mengimpor data, Anda tidak mengonfigurasi parameter spark_home_default_dir atau mengonfigurasi direktori root klien Spark yang salah. Untuk memperbaiki kesalahan, tentukan direktori root klien Spark yang benar.

Apa yang harus saya lakukan jika terjadi kesalahan "File xxx/jars/spark-2x.zip does not exist"?

Saat Anda menggunakan Spark Load untuk mengimpor data, nilai parameter spark-resource-path tidak menunjuk ke file ZIP yang dikemas. Periksa apakah jalur file sesuai dengan nama file.

Apa yang harus saya lakukan jika terjadi kesalahan "yarn client does not exist in path: xxx/yarn-client/hadoop/bin/yarn"?

Saat Anda menggunakan Spark Load untuk mengimpor data, tidak ada file yang dapat dieksekusi yang dikonfigurasikan untuk parameter yarn-client-path.