データロードに関するよくある質問
1. "close index channel failed" または "too many tablet versions" エラーが発生した場合はどうすればよいですか?
ロードジョブを頻繁に実行しすぎたため、データがタイムリーにコンパクト化されませんでした。その結果、ロード中に生成されたデータバージョンの数が許可されている最大数(デフォルトでは1000)を超えています。この問題を解決するには、以下の方法のいずれかを使用してください:
-
各個別のジョブでロードするデータ量を増やし、ロード頻度を減らします。
-
各 BE の BE 設定ファイル be.conf のいくつかの設定項目を変更して、コンパクションを加速します:
-
重複キーテーブル、集計テーブル、ユニークキーテーブルの場合、
cumulative_compaction_num_threads_per_disk、base_compaction_num_threads_per_disk、およびcumulative_compaction_check_interval_secondsの値を適切に増やすことができます。例:cumulative_compaction_num_threads_per_disk = 4
base_compaction_num_threads_per_disk = 2
cumulative_compaction_check_interval_seconds = 2 -
主キーテーブルの場合、
update_compaction_num_threads_per_diskの値を適切に増やし、update_compaction_per_tablet_min_interval_secondsの値 を減らすことができます。
上記の設定項目を変更した後、メモリと I/O が正常であることを確認してください。
-
2. "Label Already Exists" エラーが発生した場合はどうすればよいですか?
このエラーは、同じ StarRocks データベース内で、他のロードジョブと同じラベルを持つロードジョブが既に成功して実行されているか、実行中であるために発生します。
Stream Load ジョブは HTTP に従って送信されます。一般的に、すべてのプログラム言語の HTTP クライアントにはリクエスト再試行ロジックが組み込まれています。StarRocks クラスターが HTTP クライアントからロードジョブリクエストを受け取ると、すぐにリクエストの処理を開始しますが、ジョブの結果をタイムリーに HTTP クライアントに返しません。その結果、HTTP クライアントは同じロードジョブリクエストを再送信します。しかし、StarRocks クラスターは既に最初のリクエストを処理しているため、2 番目のリクエストに対して Label Already Exists エラーを返します。
異なるロード方法を使用して送信されたロードジョブが同じラベルを持たず、繰り返し送信されていないことを確認するには、次の手順を 実行します:
-
FE ログを確認し、失敗したロードジョブのラベルが 2 回記録されているかどうかを確認します。ラベルが 2 回記録されている場合、クライアントはロードジョブリクエストを 2 回送信しています。
NOTE
StarRocks クラスターは、ロード方法に基づいてロードジョブのラベルを区別しません。したがって、異なるロード方法を使用して送信されたロードジョブは、同じラベルを持つ可能性があります。
-
SHOW LOAD WHERE LABEL = "xxx" を実行して、同じラベルを持ち、FINISHED 状態にあるロードジョブを確認します。
NOTE
xxxは確認したいラベルです。
ロードジョブを送信する前に、データをロードするのに必要な時間をおおよそ計算し、それに応じてクライアント側のリクエストタイムアウト期間を調整することをお勧めします。これにより、クライアントがロードジョブリクエストを複数回送信するのを防ぐことができます。