Tous les produits
Search
Centre de documentation

E-MapReduce:FAQ sur l'importation de données

Dernière mise à jour :Sep 17, 2026

Cette rubrique répond aux questions courantes concernant l'importation de données pour StarRocks.

Erreur « close index channel failed » ou « too many tablet versions »

  • Cause

    Une fréquence d'importation de données élevée empêche la compaction d'être effectuée en temps utile, ce qui fait que le nombre de versions de tablettes non compactées dépasse la limite maximale prise en charge.

  • Solution

    Par défaut, le nombre maximal de versions non compactées prises en charge est de 1 000. Pour résoudre ce problème :

    • Augmentez le volume de données de chaque importation afin de réduire la fréquence d'importation.

    • Modifiez les paramètres suivants dans le fichier de configuration be.conf de chaque backend (BE) pour ajuster la politique de compaction et accélérer le processus.

      cumulative_compaction_num_threads_per_disk = 4
      base_compaction_num_threads_per_disk = 2
      cumulative_compaction_check_interval_seconds = 2

Gestion de l'erreur « Label Already Exists »

  • description du problème

    Une tâche d'importation portant le même libellé est déjà terminée ou est en cours d'exécution dans la même base de données d'un cluster StarRocks.

  • Cause

    Stream Load utilise le protocole HTTP pour soumettre les demandes de tâches d'importation, et la plupart des clients HTTP disposent d'un mécanisme de nouvelle tentative intégré. Après qu'un cluster StarRocks a reçu la première demande, il commence à traiter la tâche Stream Load. Si le cluster ne répond pas au client avant la fin du délai d'attente de ce dernier, le client peut renvoyer automatiquement la même demande. Étant donné que le cluster StarRocks traite déjà la demande initiale, il rejette la seconde demande et renvoie l'erreur Label Already Exists.

  • Solution

    Vérifiez s'il existe des conflits de libellés entre différentes méthodes d'importation ou des soumissions dupliquées de tâches d'importation. Vous pouvez diagnostiquer le problème comme suit :

    • Recherchez le libellé de la tâche dans le journal du nœud frontend (FE) principal. Si le libellé apparaît deux fois, le client a envoyé une demande en double.

      Remarque

      Dans un cluster StarRocks, les libellés des tâches d'importation ne sont pas limités par la méthode d'importation. Par conséquent, différents types de tâches d'importation peuvent entrer en conflit s'ils utilisent le même libellé.

    • Exécutez l'instruction SHOW LOAD WHERE LABEL = "xxx" pour vérifier si une tâche d'importation portant le même libellé est à l'état FINISHED. Remplacez xxx par votre libellé.

    Pour éviter ce problème, estimez la durée d'importation en fonction du volume de données de votre demande. Ensuite, définissez un délai d'attente de demande suffisamment long sur le client pour éviter les nouvelles tentatives prématurées.

Résolution de l'erreur « ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel »

Exécutez l'instruction SHOW LOAD. La sortie contient une URL avec des détails sur les données invalides. Les erreurs courantes incluent :

  • convert csv string to INT failed.

    Une chaîne dans une colonne du fichier source ne parvient pas à être convertie vers le type de données correspondant. Par exemple, le système ne parvient pas à convertir « abc » en nombre.

  • the length of input is too long than schema.

    Les données d'une colonne du fichier de données source dépassent la longueur définie dans le schéma. Par exemple, une chaîne de longueur fixe dépasse la longueur spécifiée lors de la création de la table, ou une valeur INT dépasse 4 octets.

  • actual column number is less than schema column number.

    Cela se produit lorsque la division d'une ligne du fichier source par le délimiteur spécifié produit moins de colonnes que celles définies par le schéma. Cela peut être causé par un délimiteur incorrect.

  • actual column number is more than schema column number.

    Cela se produit lorsque la division d'une ligne du fichier source par le délimiteur spécifié produit plus de colonnes que celles définies par le schéma.

  • the frac part length longer than schema scale.

    La partie décimale d'une valeur DECIMAL dans le fichier de données source dépasse son échelle définie.

  • the int part length longer than schema precision.

    La partie entière d'une valeur DECIMAL dans le fichier de données source dépasse sa précision définie.

  • there is no corresponding partition for this key.

    La valeur de la clé de partition d'une ligne dans le fichier d'importation se situe en dehors de la plage de partitionnement définie.

Erreur : Failed to find enough host

Vous pouvez ajouter "replication_num" = "1" dans les propriétés de la table.

Résolution de l'erreur « Too many open files »

Pour résoudre ce problème, suivez ces étapes :

  1. Augmentez le nombre de descripteurs de fichiers système.

  2. Réduisez les valeurs des paramètres base_compaction_num_threads_per_disk et cumulative_compaction_num_threads_per_disk. La valeur par défaut pour chacun est 1. Pour obtenir des instructions, consultez la section Modifier les paramètres.

  3. Si le problème persiste, augmentez la taille du cluster ou réduisez la fréquence d'importation.

L'erreur « increase config load_process_max_memory_limit_percent »

Si vous recevez une erreur semblable à la suivante lors de l'importation de données, augmentez les paramètres load_process_max_memory_limit_bytes et load_process_max_memory_limit_percent. Pour savoir comment modifier les éléments de configuration, consultez la section Modifier les éléments de configuration.

/root/starrocks/be/src/runtime/plan_fragment_executor.cpp:209 _sink->open(runtime_state())
W0516 15:58:30.892597 28779 fragment_mgr.cpp:193] Fail to open fragment 334f7f8c-0727-5909-afa3-9eb1dxxx : Internal error: intolerable failure in opening node channels
/root/starrocks/be/src/runtime/plan_fragment_executor.cpp:209 _sink->open(runtime_state())
W0516 15:58:30.898306 28779 stream_load_executor.cpp:94] fragment execute failed, query_id=334f7f8c07275909-afa39eb1dxxx, err_msg=intolerable failure in opening node channels, id=334f7f8c07275909-afa3
9eb1db88af94, job_id=-1, txn_id=633657, label=156936fa-1134-4c4c-b473-fa05b4b8bf8c
W0516 15:58:30.907560 28985 stream_load.cpp:315] append body content failed. errmsg=cancelledid=334f7f8c07275909-afa39eb1dbxxx, job_id=-1, txn_id=633657, label=156936fa-1134-4c4c-b473-fa05b4b8bf8c
W0516 15:58:34.353019 28993 data_sink.cpp:104] Ignore option use_vectorized=false
W0516 15:58:34.353847 28795 tablet_sink.cpp:605] NodeChannel[15381-10004]: tablet open failed, load_id=cb4e78a6-f026-c3d9-a700-aba4xxx, txn_id=6336xxx, node=10.28.xxx, 8060, errmsg=memory limit exc
eeded, please reduce load frequency or increase config `load_process_max_memory_limit_percent` or add more BE nodes
W0516 15:58:34.353901 28795 tablet_sink.cpp:605] NodeChannel[15381-10003]: tablet open failed, load_id=cb4e78a6-f026-c3d9-a700-aba4xxx, txn_id=6336xxx, node=10.28.xxx, 8060, errmsg=memory limit exc
eeded, please reduce load frequency or increase config `load_process_max_memory_limit_percent` or add more BE nodes
W0516 15:58:34.353909 28795 tablet_sink.cpp:605] NodeChannel[15381-149009]: tablet open failed, load_id=cb4e78a6-f026-c3d9-a700-abaxxx, txn_id=633xxx, node=10.2xxx, 8060, errmsg=memory limit exc
eeded, please reduce load frequency or increase config `load_process_max_memory_limit_percent` or add more BE nodes
W0516 15:58:34.353914 28795 tablet_sink.cpp:605] NodeChannel[15381-10002]: tablet open failed, load_id=cb4e78a6-f026-c3d9-a700-aba4xxx, txn_id=6336xxx, node=10.28.xxx, 8060, errmsg=memory limit exc
eeded, please reduce load frequency or increase config `load_process_max_memory_limit_percent` or add more BE nodes
W0516 15:58:34.353976 28795 tablet_sink.cpp:605] NodeChannel[15381-149010]: tablet open failed, load_id=cb4e78a6-f026-c3d9-a700-abaxxx, txn_id=633xxx, node=10.2xxx, 8060, errmsg=memory limit exc
eeded, please reduce load frequency or increase config `load_process_max_memory_limit_percent` or add more BE nodes
W0516 15:58:34.353983 28795 tablet_sink.cpp:613] open failed, load_id=cb4e78a6f026c3d9-a700aba44764c288
W0516 15:58:34.353992 28795 plan_fragment_executor.cpp:188] fail to open fragment, instance_id=cb4e78a6-f026-c3d9-a700-aba44xxx, status=Internal error: intolerable failure in opening node channels
/root/starrocks/be/src/runtime/plan_fragment_executor.cpp:209 _sink->open(runtime_state())
W0516 15:58:34.354202 28795 fragment_mgr.cpp:193] Fail to open fragment cb4e78a6-f026-c3d9-a700-aba447xxx : Internal error: intolerable failure in opening node channels
/root/starrocks/be/src/runtime/plan_fragment_executor.cpp:209 _sink->open(runtime_state())
W0516 15:58:34.600633 28795 stream_load_executor.cpp:94] fragment execute failed, query_id=cb4e78a6f026c3d9-a700aba44xxx, err_msg=intolerable failure in opening node channels, id=cb4e78a6f026c3d9-a700
aba44764c288, job_id=-1, txn_id=633662, label=156936fa-1134-4c4c-b473-fa05b4b8bf8c
W0516 15:58:34.600664 28993 stream_load.cpp:132] Fail to handle streaming load, id=cb4e78a6f026c3d9-a700aba447xxx errmsg=intolerable failure in opening node channels
W0516 15:58:39.555845 28995 data_sink.cpp:104] Ignore option use_vectorized=false

Délais d'attente RPC lors de l'importation de données

Vérifiez le paramètre write_buffer_size dans le fichier be.conf du BE. Ce paramètre définit le seuil de taille pour un bloc mémoire sur le BE et sa valeur par défaut est de 100 Mo. Si ce seuil est trop élevé, il peut provoquer un délai d'attente RPC. Pour résoudre ce problème, ajustez les paramètres write_buffer_size et tablet_writer_rpc_timeout_sec. Pour plus d'informations sur les paramètres de configuration du BE, consultez la section Paramètres.

Erreur : « Value count does not match column count »

  • Description du problème

    Une tâche d'importation échoue et l'URL des détails de l'erreur affiche le message suivant : « Value count does not match column count ». Cela indique que le nombre de colonnes dans les données source ne correspond pas au nombre de colonnes dans la table de destination.

    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
  • Cause

    Cette erreur se produit lorsque le délimiteur de colonne spécifié dans la commande ou l'instruction d'importation ne correspond pas au délimiteur utilisé dans les données source. Dans cet exemple, les données source comportent trois colonnes et utilisent une virgule (,) comme délimiteur. Toutefois, si la commande ou l'instruction d'importation spécifie un caractère de tabulation (\t) comme délimiteur, les trois colonnes des données source sont analysées à tort comme une seule colonne.

  • Solution

    Modifiez le délimiteur de colonne dans votre commande ou instruction d'importation pour utiliser une virgule (,), puis relancez la tâche d'importation.

Choix d'une méthode d'importation

Pour plus d'informations, consultez la rubrique Importation de données.

Facteurs influant sur les performances d'importation

Les facteurs suivants affectent les performances d'importation :

  • Mémoire du serveur

    Un grand nombre de tablettes consomme une quantité importante de mémoire serveur. Nous vous recommandons d'estimer la taille de chaque tablette comme décrit dans la section Comment effectuer le bucketing ?.

  • Capacité d'E/S disque et bande passante réseau

    Une bande passante réseau comprise entre 50 Mbit/s et 100 Mbit/s est généralement suffisante.

  • Taille du lot d'importation et fréquence d'importation

    • Pour Stream Load, nous recommandons une taille de lot d'importation comprise entre 10 Mo et 100 Mo.

    • Broker Load est idéal pour les lots de grande taille.

    • Évitez une fréquence d'importation élevée. Pour les disques durs SATA, ne dépassez pas une tâche d'importation par seconde.

Ignorer les lignes d'en-tête dans Stream Load

Stream Load ne prend pas en charge le traitement de la première ligne comme en-tête ni son omission. Stream Load considère la première ligne comme des données ordinaires. Si le fichier texte que vous importez contient une ligne d'en-tête, utilisez l'une des méthodes suivantes :

  • Modifiez les paramètres de votre outil d'exportation pour réexporter le fichier texte sans la ligne d'en-tête.

  • Utilisez la commande sed -i '1d' filename pour supprimer la première ligne du fichier texte.

  • Dans l'instruction Stream Load, utilisez -H "where: column_name != 'header_text'" pour filtrer la première ligne.

    StarRocks convertit d'abord les types de données, puis applique le filtre. Si une valeur de la ligne d'en-tête ne peut pas être convertie vers le type de données cible, elle devient null. Par conséquent, les colonnes de la table StarRocks ne doivent pas avoir la contrainte NOT NULL.

  • Ajoutez -H "max_filter_ratio:0.01" à l'instruction Stream Load pour définir un taux de tolérance aux pannes pour la tâche d'importation, ce qui permet d'ignorer la ligne d'en-tête en tant qu'erreur. Vous pouvez définir ce taux à 1 % ou moins en fonction du volume de vos données, mais il doit être suffisamment élevé pour tolérer au moins une ligne d'erreur. Avec ce paramètre, la tâche d'importation aboutira, mais l'URL ErrorURL renvoyée affichera toujours une erreur pour la ligne d'en-tête. Évitez de définir un taux de tolérance aux pannes trop élevé, car cela pourrait masquer d'autres erreurs de données réelles.

Clé de partition non standard dans Stream Load

StarRocks prend en charge la conversion des données pendant le processus d'importation.

Par exemple, supposons que votre fichier de données source TEST soit au format CSV et contienne les colonnes NO, DATE, VERSION et PRICE, mais que la colonne DATE utilise le format non standard 202106.00. Pour utiliser la colonne DATE comme clé de partition dans StarRocks, créez une table dans StarRocks contenant les colonnes NO, VERSION, PRICE et DATE, et spécifiez le type de données de la colonne DATE comme DATE, DATETIME ou INT. Ensuite, utilisez le paramètre suivant dans votre instruction Stream Load pour transformer la colonne.

-H "columns: NO,DATE_1, VERSION, PRICE, DATE=LEFT(DATE_1,6)"

Dans cet exemple, DATE_1 sert de marqueur temporaire pour les données source. La fonction LEFT() transforme ensuite ces données, et le résultat est assigné à la colonne DATE de la table StarRocks. Notez que vous devez mapper toutes les colonnes du fichier CSV source vers des noms temporaires avant d'appliquer une fonction de transformation. Toute fonction utilisée pour la transformation de colonne doit être une fonction scalaire, telle qu'une fonction non agrégative ou une fonction de fenêtrage.

Erreur « body exceed max size: 10737418240, limit: 10737418240 »

  • Cause

    Le fichier de données source dépasse la taille maximale de fichier (10 Go) prise en charge par Stream Load.

  • Solution

    • Divisez le fichier de données source en fichiers plus petits à l'aide de la commande seq -w 0 n.

    • Exécutez la commande curl -XPOST http:///be_host:http_port/api/update_config?streaming_load_max_mb=<file_size> pour augmenter la limite de taille de fichier en modifiant le paramètre streaming_load_max_mb sur le nœud BE. Pour plus de détails sur la configuration des paramètres BE, consultez la section configuration des paramètres.

Amélioration des performances d'importation

Méthode 1 : Augmenter le parallélisme des tâches

Remarque

Cette méthode peut consommer davantage de ressources CPU et entraîner un nombre excessif de versions de tablettes.

Divisez chaque tâche d'importation en plusieurs tâches d'importation parallèles. Le parallélisme réel des tâches est déterminé par la formule suivante :

min(alive_be_number, partition_number, desired_concurrent_number, max_routine_load_task_concurrent_num)

Les paramètres de cette formule sont les suivants :

  • alive_be_number : nombre de nœuds BE actifs.

  • partition_number : nombre de partitions à consommer.

  • desired_concurrent_number : parallélisme des tâches attendu pour une seule tâche Routine Load. La valeur par défaut est 3.

    • Pour une nouvelle tâche d'importation, définissez ce paramètre lors de l'exécution de CREATE ROUTINE LOAD.

    • Pour une tâche d'importation existante, modifiez ce paramètre lors de l'exécution de ALTER ROUTINE LOAD.

  • max_routine_load_task_concurrent_num : parallélisme maximal des tâches pour les tâches Routine Load. La valeur par défaut est 5. Il s'agit d'un paramètre dynamique FE. Pour plus de détails sur la configuration, consultez la section configuration des paramètres.

Par conséquent, si vous devez augmenter le parallélisme réel des tâches lorsque le nombre de partitions et de nœuds BE est important et dépasse les paramètres desired_concurrent_number et max_routine_load_task_concurrent_num, vous pouvez augmenter les paramètres desired_concurrent_number et max_routine_load_task_concurrent_num.

Par exemple, supposons que vous disposiez de 7 partitions et de 5 nœuds BE actifs, et que le paramètre max_routine_load_task_concurrent_num soit défini sur sa valeur par défaut de 5. Pour maximiser le parallélisme réel des tâches, vous devez définir desired_concurrent_number sur 5 (la valeur par défaut est 3). Le parallélisme réel des tâches est alors calculé comme suit : min(5,7,5,5), ce qui équivaut à 5.

Méthode 2 : Augmenter le volume de données par tâche d'importation

Remarque

Cette méthode peut augmenter la latence d'importation.

Deux paramètres dynamiques FE, max_routine_load_batch_size et routine_load_task_consume_second, contrôlent le volume maximal de données qu'une tâche d'importation peut consommer. Une tâche d'importation se termine lorsque le seuil de l'un ou l'autre de ces paramètres est atteint. Pour plus de détails sur la configuration, consultez la section configuration des paramètres.

Consultez le journal be/log/be.INFO pour identifier quel paramètre limite la consommation de données pour chaque tâche d'importation.

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

Normalement, le journal affiche left_bytes >= 0. Cela indique qu'un lot d'importation n'a pas atteint la limite max_routine_load_batch_size avant l'expiration de la limite de temps définie par routine_load_task_consume_second. Cela signifie que les tâches d'importation suivent le flux de données provenant de Kafka, ce qui n'entraîne aucune latence de consommation. Dans ce cas, vous pouvez augmenter routine_load_task_consume_second pour accroître le volume de données consommé par chaque tâche d'importation.

Si left_bytes < 0, cela indique qu'un lot a atteint la limite max_routine_load_batch_size avant l'expiration de sa limite de temps (routine_load_task_consume_second). Cela suggère que chaque lot d'importation est rempli à capacité, ce qui peut entraîner un arriéré de données depuis Kafka. Dans ce scénario, vous pouvez augmenter max_routine_load_batch_size.

Dépannage des tâches d'importation PAUSED et CANCELLED

Dépannez le problème en vous basant sur le message d'erreur :

  • Message d'erreur : la tâche d'importation est PAUSED et ReasonOfStateChanged affiche l'erreur Broker: Offset out of range.

    • Cause : le décalage du consommateur (offset) pour la tâche d'importation n'existe pas dans la partition Kafka.

    • Solution : exécutez la commande SHOW ROUTINE LOAD pour afficher le dernier décalage du consommateur dans le paramètre Progress. Vérifiez ensuite si un message avec ce décalage existe dans la partition Kafka. Si ce n'est pas le cas, cela est probablement dû à l'une des deux raisons suivantes :

      • Le décalage du consommateur spécifié est défini sur un point futur.

      • La politique de nettoyage des journaux a supprimé le message de la partition Kafka avant que la tâche d'importation ne puisse le consommer. Configurez une politique de nettoyage des journaux Kafka appropriée et des paramètres adaptés, tels que log.retention.hours et log.retention.bytes, en fonction du taux d'ingestion de la tâche d'importation.

  • Message d'erreur : la tâche d'importation est PAUSED.

    • Cause : le nombre de lignes erronées dans une tâche d'importation a peut-être dépassé le seuil de lignes erronées, max_error_number.

    • Solution : examinez le problème en vérifiant les messages dans ReasonOfStateChanged et les journaux aux URL fournies dans ErrorLogUrls.

      • S'il y a un problème de format de données dans la source de données, corrigez les données. Ensuite, exécutez la commande RESUME ROUTINE LOAD pour reprendre la tâche d'importation PAUSED.

      • Si StarRocks ne peut pas analyser les données de la source de données, ajustez le seuil de lignes erronées, max_error_number.

        1. Exécutez la commande SHOW ROUTINE LOAD pour vérifier la valeur actuelle de max_error_number.

        2. Exécutez la commande ALTER ROUTINE LOAD pour augmenter la valeur de max_error_number.

        3. Exécutez la commande RESUME ROUTINE LOAD pour reprendre la tâche d'importation PAUSED.

  • Message d'erreur : la tâche d'importation est CANCELLED.

    • Cause : une exception s'est peut-être produite lors d'une tâche d'importation. Par exemple, la table de destination a peut-être été supprimée.

    • Solution : dépannez et corrigez le problème en vérifiant les messages dans ReasonOfStateChanged ou les journaux aux URL fournies dans ErrorLogUrls. Toutefois, une fois qu'une tâche d'importation est CANCELLED, elle ne peut pas être reprise, même après résolution du problème.

Routine Load et sémantique exactly-once

Oui, Routine Load garantit la sémantique exactly-once.

Chaque tâche d'importation s'exécute sous forme de transaction unique. Si une tâche d'importation échoue, la transaction est annulée et le FE ne met pas à jour la progression de la consommation pour les partitions concernées. Lorsque le FE planifie la prochaine tâche d'importation à partir de la file d'attente d'exécution des tâches, il initie une demande de consommation à partir du dernier décalage du consommateur enregistré pour la partition. Ce processus garantit la sémantique exactly-once.

Erreur « Broker: Offset out of range »

Exécutez la commande SHOW ROUTINE LOAD pour afficher le dernier décalage. Ensuite, utilisez un client Kafka pour vérifier si des données existent à ce décalage. Causes possibles :

  • Un décalage futur est spécifié lors de l'importation.

  • Kafka supprime les données au décalage spécifié avant que la tâche d'importation ne puisse les traiter. Vous devez configurer des paramètres de rétention des journaux appropriés, tels que log.retention.hours et log.retention.bytes, pour accommoder la vitesse d'importation de StarRocks.

Réexécution des tâches Broker Load à l'état FINISHED

Non. Vous ne pouvez pas réexécuter une tâche d'importation à l'état FINISHED. Pour garantir la sémantique exactly-once, vous ne pouvez pas réutiliser l'étiquette (label) d'une tâche d'importation réussie. Vous pouvez utiliser l'instruction SHOW LOAD pour afficher votre historique d'importation, trouver la tâche que vous souhaitez réexécuter, copier sa configuration, attribuer une nouvelle étiquette, puis créer et exécuter une nouvelle tâche d'importation.

Décalage de 8 heures sur le champ de date avec Broker Load

  • Cause

    Cela est dû à un décalage de fuseau horaire. La table StarRocks et la tâche d'importation Broker Load utilisent le fuseau horaire de la Chine (UTC+8), tandis que le serveur utilise UTC. Cette différence entraîne l'ajout d'un décalage de 8 heures au champ de date lors du processus d'importation.

  • Solution

    Supprimez le paramètre de fuseau horaire lors de la création de la table.

Erreur « ErrorMsg: type:ETL_RUN_FAIL; msg:Cannot cast '<slot 6>' from VARCHAR to ARRAY<VARCHAR(30)> » lors de l'importation Broker Load de données ORC

  • Cause

    Cette erreur est causée par une incompatibilité entre les noms de colonnes dans le fichier de données source et la table StarRocks de destination. Cette incompatibilité déclenche une instruction SET, entraînant un échec de conversion de type de données au sein de la fonction cast.

  • Solution

    Assurez-vous que les noms de colonnes dans le fichier source correspondent à ceux de la table StarRocks. Cela élimine le besoin d'une instruction SET et de conversion de type de données, permettant ainsi à l'importation de réussir.

Aucune donnée trouvée après Broker Load

Broker Load est une méthode d'importation asynchrone. La soumission réussie d'une tâche d'importation ne garantit pas que l'importation a abouti. Exécutez l'instruction SHOW LOAD pour vérifier le statut final de la tâche d'importation et le message d'erreur dans le champ errmsg. Si la tâche échoue, modifiez ses paramètres et réessayez.

Erreur : « failed to send batch » ou « TabletWriter add batch with unknown id »

Cette erreur indique un délai d'expiration lors de l'écriture des données. Pour la résoudre, modifiez la variable système query_timeout et le paramètre BE streaming_load_rpc_max_alive_time_sec. Pour plus d'informations sur les paramètres BE, consultez Paramétrage.

Erreur « LOAD-RUN-FAIL; msg:OrcScannerAdapter::init_include_columns. col name = xxx not found »

Lors de l'importation de données depuis un fichier Parquet ou ORC, assurez-vous que les noms de colonnes dans l'en-tête du fichier correspondent à ceux de la table StarRocks.

L'exemple suivant utilise une clause SET pour mapper les colonnes tmp_c1 et tmp_c2 d'un fichier Parquet ou ORC vers les colonnes name et id de la table StarRocks. Sans clause SET, StarRocks mappe les colonnes par position selon celles spécifiées dans le paramètre column_list.

(tmp_c1,tmp_c2)
SET
(
   id=tmp_c2,
   name=tmp_c1
)

L'importation d'un fichier ORC généré par Apache Hive peut provoquer une erreur « Invalid Column Name » si son en-tête de table est au format (_col0, _col1, _col2, ...). Dans ce cas, vous devez utiliser la clause SET pour définir les règles de mappage des colonnes.

Dépannage des tâches d'importation longues

Dans le fichier fe.log du FE, recherchez l'ID de la tâche d'importation à l'aide de son libellé. Ensuite, dans le fichier be.INFO du BE, utilisez cet ID pour trouver les entrées de journal pertinentes et identifier la cause.

Configuration de ViewFs pour HDFS Federation

Copiez les fichiers de configuration core-site.xml et hdfs-site.xml dans le répertoire broker/conf.

Si vous utilisez un système de fichiers personnalisé, copiez également les fichiers .jar correspondants dans le répertoire broker/lib.

Erreur « Can't get Kerberos realm »

  1. Vérifiez que le fichier /etc/krb5.conf est configuré sur tous les nœuds où les brokers sont en cours d'exécution.

  2. Si l'erreur persiste, ajoutez -Djava.security.krb5.conf:/etc/krb5.conf à la variable JAVA_OPTS dans le script de démarrage du broker.

Performances lentes des insertions d'enregistrements uniques

L'instruction INSERT INTO statement est conçue pour les batch write. Une single write prend autant de temps qu'une batch write. Par conséquent, dans un OLAP scenario, n'utilisez pas d'instruction INSERT INTO statement pour les single write.

Erreur « index channel has intolerable failure »

Cette erreur se produit en raison d'un délai d'expiration RPC Stream Load. Pour la résoudre, ajustez les paramètres de délai d'expiration RPC dans le fichier de configuration.

Modifiez les deux paramètres système suivants dans le fichier de configuration BE be.conf et redémarrez le cluster pour que les modifications prennent effet.

  • streaming_load_rpc_max_alive_time_sec : Délai d'expiration RPC pour Stream Load. Valeur par défaut : 1200 secondes.

  • tablet_writer_rpc_timeout_sec : Délai d'expiration pour TabletWriter. Valeur par défaut : 600 secondes.

Échec de INSERT INTO SELECT avec execute timeout

Cette erreur est causée par un délai d'expiration de requête. Vous pouvez résoudre ce problème en ajustant la variable de session query_timeout. La valeur par défaut de ce paramètre est de 600 secondes.

Par exemple :

set query_timeout =xx;

Erreur de job Flink : Required options are missing

  • Cause

    Cette erreur se produit car plusieurs règles, telles que [table-rule.1] et [table-rule.2], dans le fichier de configuration config_prod.conf de StarRocks-migrate-tools (SMT) manquent d'informations de configuration requises.

  • Solution

    Vérifiez que les informations de base de données, de table et de connecteur Flink sont configurées pour chaque règle, telle que [table-rule.1] et [table-rule.2].

Redémarrage automatique des tâches ayant échoué

Flink utilise un mécanisme de point de contrôle (checkpointing) et une politique de redémarrage pour redémarrer automatiquement les tâches ayant échoué.

Par exemple, pour activer le mécanisme de point de contrôle et utiliser la politique de redémarrage par défaut (politique de redémarrage à délai fixe), ajoutez la configuration suivante au fichier flink-conf.yaml :

# unit: ms
execution.checkpointing.interval: 300000
state.backend: filesystem
state.checkpoints.dir: file:///tmp/flink-checkpoints-directory

Paramètres :

  • execution.checkpointing.interval : Intervalle de base entre les points de contrôle, en millisecondes. Pour activer le mécanisme de point de contrôle, définissez ce paramètre sur une valeur supérieure à 0.

  • state.backend : Lorsque le point de contrôle est activé, Flink persiste l'état de l'application dans chaque point de contrôle pour éviter la perte de données et assurer la cohérence lors de la récupération. Le backend d'état choisi détermine le format de stockage, la méthode de persistance et l'emplacement de l'état. Pour plus d'informations, consultez State Backends.

  • state.checkpoints.dir : Répertoire de stockage des données de point de contrôle.

Arrêt et restauration d'un job Flink

Lors de l'arrêt d'un job Flink, vous pouvez déclencher manuellement un savepoint. Un savepoint est un instantané cohérent de l'état d'exécution d'un job en streaming, créé par le mécanisme de point de contrôle. Vous pouvez ensuite restaurer le job à partir d'un savepoint.

Pour arrêter un job avec un savepoint, Flink déclenche d'abord un savepoint pour le job, puis l'arrête. Vous pouvez également spécifier un répertoire cible pour stocker le savepoint.

Pour arrêter un job Flink et créer un savepoint, exécutez la commande suivante :

bin/flink stop --type [native/canonical] --savepointPath [:targetDirectory] :jobId

Paramètres :

  • jobId : Vous pouvez trouver l'ID du job Flink sur l'interface Web Flink ou en exécutant la commande flink list -running.

  • targetDirectory : Répertoire de stockage du savepoint. Vous pouvez également configurer un répertoire par défaut en définissant le paramètre state.savepoints.dir dans flink-conf.yml. Si un répertoire par défaut est défini, ce paramètre est facultatif.

    state.savepoints.dir: [file://or hdfs://]/home/user/savepoints_dir

Pour restaurer un job à partir d'un savepoint, spécifiez le chemin du savepoint lorsque vous resoumettez le job :

./flink run -c com.starrocks.connector.flink.tools.ExecuteSQL -s savepoints_dir/savepoints-xxxxxxxx flink-connector-starrocks-xxxx.jar -f flink-create.all.sql

Échec de l'importation de données avec exactly-once

  • Description : Le système signale l'erreur suivante.

    com.starrocks.data.load.stream.exception.StreamLoadFailException: {
        "TxnId": 3382****,
        "Label": "502c2770-cd48-423d-b6b7-9d8f9a59****",
        "Status": "Fail",
        "Message": "timeout by txn manager",-- Error message
        "NumberTotalRows": 1637,
        "NumberLoadedRows": 1637,
        "NumberFilteredRows": 0,
        "NumberUnselectedRows": 0,
        "LoadBytes": 4284214,
        "LoadTimeMs": 120294,
        "BeginTxnTimeMs": 0,
        "StreamLoadPlanTimeMs": 7,
        "ReadDataTimeMs": 9,
        "WriteDataTimeMs": 120278,
        "CommitAndPublishTimeMs": 0
    }
  • Cause : La valeur de sink.properties.timeout est inférieure à l'intervalle de point de contrôle Flink, ce qui provoque un délai d'expiration de la transaction.

  • Solution : Définissez ce paramètre sur une valeur supérieure à l'intervalle de point de contrôle Flink.

Décalage horaire pour le sink flink-connector-jdbc_2,11 vers StarRocks

  • Description du problème : L'heure générée par la fonction localtimestamp dans Flink est correcte, mais elle présente un retard de 8 heures après l'écriture dans StarRocks. Les serveurs Flink et StarRocks sont tous deux configurés sur le fuseau horaire Asia/Shanghai (UTC+8). La version de Flink est la 1.12 et le pilote est flink-connector-jdbc_2.11.

  • Solution : Pour résoudre ce problème, configurez le fuseau horaire dans la table de sink Flink. Définissez le paramètre 'server-time-zone' = 'Asia/Shanghai' et ajoutez &serverTimezone=Asia/Shanghai au paramètre url. L'exemple suivant illustre cette configuration.

    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'
    );

Impossible d'importer depuis un cluster Kafka externe

  • Description : L'importation échoue avec le message d'erreur suivant :

    failed to query wartermark offset, err: Local: Bad message format
  • Cause : Les nœuds StarRocks ne peuvent pas résoudre les noms d'hôte des brokers Kafka.

  • Solution : Ajoutez les noms d'hôte et les adresses IP des brokers Kafka au fichier /etc/hosts sur chaque nœud StarRocks.

Utilisation élevée de la mémoire et du CPU par le BE au repos

Le nœud BE collecte périodiquement des statistiques, ce qui entraîne des pics temporaires d'utilisation du CPU plutôt qu'une utilisation élevée soutenue. De plus, le nœud BE conserve et gère en interne jusqu'à 10 GiB de mémoire utilisée au lieu de la restituer au système d'exploitation. Vous pouvez configurer le seuil de cette rétention de mémoire avec le paramètre tc_use_memory_min.

tc_use_memory_min spécifie la mémoire minimale réservée par TCmalloc. La valeur par défaut est 10 737 418 240 (10 GiB). StarRocks ne rend la mémoire inactive au système d'exploitation que lorsque la mémoire utilisée dépasse cette valeur. Vous pouvez configurer ce paramètre dans le fichier be.conf sur l'onglet Configure du service StarRocks dans la console EMR. Pour plus d'informations sur les paramètres des nœuds BE, reportez-vous à paramétrage.

Pourquoi le BE ne libère pas la mémoire

Il s'agit d'un comportement attendu. Une base de données alloue de grands blocs de mémoire au système d'exploitation — souvent en pré-allouant plus que nécessaire immédiatement — et conserve cette mémoire pour une réutilisation. Cette stratégie évite la surcharge de performances liée aux réallocations de mémoire fréquentes et coûteuses. Pour vérifier ce comportement, surveillez l'utilisation de la mémoire dans un environnement de test sur une période prolongée afin de voir si la mémoire est finalement libérée.

Impossible de résoudre les dépendances du connecteur Flink

  • Cause : Les dépendances du connecteur Flink doivent être récupérées à partir d'un miroir Alibaba Cloud. L'erreur se produit car la section mirror du fichier /etc/maven/settings.xml n'est pas configurée pour diriger toutes les demandes de dépôt vers ce miroir.

  • Solution : Dans /etc/maven/settings.xml, configurez la section mirror pour utiliser le dépôt public Alibaba Cloud : https://maven.aliyun.com/repository/public.

Efficacité du paramètre sink.buffer-flush.interval-ms

  • Description du problème : Lorsque sink.buffer-flush.interval-ms est défini sur 15 s et checkpoint interval=5mins, sink.buffer-flush.interval-ms prend-il toujours effet ?

    +----------------------+--------------------------------------------------------------+
    |         Option       | Required |  Default   | Type   |       Description           |
    +-------------------------------------------------------------------------------------+
    |  sink.buffer-flush.  |  NO      |   300000   | String | the flushing time interval, |
    |  interval-ms         |          |            |        | range: [1000ms, 3600000ms]  |
    +----------------------+--------------------------------------------------------------+
  • Solution : Un vidage (flush) est déclenché lorsque le premier des trois seuils suivants est atteint. Ce comportement est indépendant de l'checkpoint interval. L'checkpoint interval sert uniquement à la sémantique exactly-once, tandis que sink.buffer-flush.interval-ms concerne la sémantique at-least-once.

    sink.buffer-flush.max-rows
    sink.buffer-flush.max-bytes
    sink.buffer-flush.interval-ms

Mises à jour de données avec DataX

DataX prend désormais en charge les mises à jour de données pour le modèle de clé primaire. Pour activer cette fonctionnalité, ajoutez le champ _op à la section reader dans votre fichier de configuration JSON.

Gestion des mots-clés dans les noms de champs

Entourez le nom du champ de backticks (`).

HADOOP-CONF-DIR ou YARN-CONF-DIR doit être défini

Cette erreur indique que la variable d'environnement HADOOP-CONF-DIR, requise pour Spark Load, n'a pas été définie dans le fichier spark-env.sh sur le client spark.

La commande spark-submit échoue avec l'erreur « No such file or directory »

Cette erreur se produit lors de l'utilisation de Spark Load car le paramètre spark_home_default_dir n'est pas spécifié ou est défini sur un répertoire racine incorrect du client Spark.

Erreur « File xxx/jars/spark-2x.zip does not exist »

Lorsque vous utilisez Spark Load, cette erreur indique que le paramètre spark-resource-path ne pointe pas vers le fichier ZIP empaqueté. Vérifiez le chemin du fichier et le nom du fichier.

Erreur « Yarn client does not exist »

Cette erreur indique que le paramètre yarn-client-path ne spécifie pas le chemin vers le fichier exécutable YARN.