Cette rubrique répond aux questions fréquemment posées concernant EMR Serverless StarRocks.
Comment accéder à OSS depuis un autre compte ?
Par défaut, EMR Serverless StarRocks permet d'accéder sans mot de passe aux buckets OSS situés dans le même compte. Pour accéder aux ressources OSS d'un autre compte, vous devez désactiver cette option par défaut, configurer la paire AccessKey du compte cible et appliquer la nouvelle configuration.
-
Désactivez l'accès sans mot de passe : sous l'onglet Parameter Configuration, effacez les valeurs des éléments de configuration suivants dans les fichiers spécifiés.
-
core-site.xml
fs.oss.credentials.provider = -
jindosdk.cfg
fs.oss.provider.format = fs.oss.provider.endpoint =
-
-
Ajoutez la paire AccessKey du compte cible : sous l'onglet Parameter Configuration, cliquez sur Add Configuration Item et ajoutez les configurations suivantes aux fichiers spécifiés.
-
core-site.xml
fs.oss.accessKeyId = AccessKey ID of the target account fs.oss.accessKeySecret = AccessKey Secret of the target account -
jindosdk.cfg
fs.oss.accessKeyId = AccessKey ID of the target account fs.oss.accessKeySecret = AccessKey Secret of the target account
-
Appliquez la configuration : sous l'onglet Parameter Configuration, cliquez sur Submit Parameters.
Utilisation des pilotes UDF et JDBC connector
Avant d'utiliser les pilotes UDF et JDBC, vous devez obtenir les fichiers JAR requis depuis une source externe.
-
Téléchargez les fichiers JAR vers OSS. Pour plus d'informations, consultez la section Télécharger des fichiers.
Lors du téléchargement des fichiers, définissez la valeur object ACL sur Public Read/Write afin d'accorder des autorisations de lecture et d'écriture publiques aux fichiers JAR.
-
Obtenez l'URL de chaque fichier JAR.
Dans la console OSS, localisez le lien correspondant à chaque fichier JAR correctement téléchargé. Utilisez l'URL HTTP du endpoint interne, qui doit respecter l'un des formats suivants :
Pour un pilote JDBC :
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/mysql-connector-java-*.jar.Pour une UDF :
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/<YourPath>/<jar_package_name>.
Utilisez les fichiers JAR. Pour plus d'informations, consultez les sections Java UDF et JDBC Catalog.
Comment réinitialiser le mot de passe de l'instance ?
La réinitialisation du mot de passe de l'instance interrompt les connexions client-serveur. Afin de minimiser l'impact sur la production, effectuez cette opération pendant les heures creuses.
Seuls les utilisateurs disposant de l'autorisation AliyunEMRStarRocksFullAccess peuvent réinitialiser le mot de passe.
-
Accédez à la page des détails de l'instance.
Connectez-vous à la console E-MapReduce.
Dans le volet de navigation de gauche, choisissez EMR Serverless > StarRocks.
Cliquez sur le nom de l'instance cible.
Sur la page Instance Details, dans la section Basic Information, cliquez sur Reset Password.
Dans la boîte de dialogue qui s'affiche, saisissez et confirmez le nouveau mot de passe, puis cliquez sur OK.
Erreur lors de l'écriture de données dans les tables Paimon
-
Symptôme : lorsque vous utilisez StarRocks pour écrire des données dans une table Paimon, le message d'erreur suivant peut s'afficher :
(5025, 'Backend node not found. Check if any backend node is down.') Cause : une vérification des autorisations dans les tables Paimon peut empêcher StarRocks d'identifier correctement les nœuds BE lors des opérations d'écriture.
-
Solution :
-
Mettre à niveau la version (recommandé) : si la version de votre instance est antérieure à l'une des versions suivantes, effectuez une mise à jour mineure pour appliquer le correctif.
StarRocks 3.2 : 3.2.11-1.89 ou version ultérieure
StarRocks 3.3 : 3.3.8-1.88 ou version ultérieure
-
Solution de contournement : sous l'onglet Parameter Configuration de l'instance StarRocks, ajoutez l'élément de configuration suivant au fichier
core-site.xml.dlf.permission.clientCheck=false
-
Que faire si vous recevez l'erreur not a RAM user lors de la création d'une table étrangère dans StarRocks ?
-
Symptôme : lors de la création d'une table étrangère dans StarRocks, le message d'erreur suivant peut s'afficher :
current user is not a RAM user Cause : cette erreur est due à des autorisations insuffisantes ou à une version obsolète de l'instance.
-
Solution :
Vérifiez les autorisations de l'utilisateur RAM : assurez-vous que l'utilisateur Resource Access Management (RAM) dispose des autorisations requises pour StarRocks. Pour plus d'informations, consultez la section Accorder des autorisations à un utilisateur RAM.
-
Si les autorisations sont correctes, vérifiez et mettez à niveau la version du noyau sur la page Instance Details de StarRocks.
Si la version de votre instance est antérieure à l'une des versions suivantes, effectuez une mise à jour mineure pour appliquer le correctif.
StarRocks 3.2 : 3.2.11-1.89 ou version ultérieure
StarRocks 3.3 : 3.3.8-1.88 ou version ultérieure
Erreur liée aux points-virgules dans l'éditeur SQL
-
Symptôme : lorsque vous exécutez une instruction SQL contenant un point-virgule (
;) dans l'éditeur SQL, une erreur se produit. Le message d'erreur inclutthe most similar input is {a legal identifier}.Le code d'erreur est 1064 et les détails incluent également
Unexpected input '<EOF>', ce qui indique une erreur de syntaxe à la ligne 3, colonne 11. Cette erreur survient car l'éditeur SQL utilise le point-virgule (
;) comme terminateur d'instruction par défaut. Si votre instruction SQL contient un point-virgule (;), une erreur d'analyse syntaxique se produit.-
Solution :
-
Définissez un délimiteur personnalisé.
Avant d'exécuter une instruction SQL contenant un point-virgule, définissez un délimiteur personnalisé pour éviter les erreurs d'analyse syntaxique. Par exemple, vous pouvez remplacer le délimiteur par
$$.delimiter $$ -
Exécutez l'instruction SQL contenant un point-virgule. Voici un exemple :
INSERT INTO sr_test VALUES (1, 'asdsd,asdsads'), (2, 'sadsad;asdsads'); -
Rétablissez le délimiteur par défaut.
Une fois l'instruction SQL exécutée, rétablissez le délimiteur par défaut (
;) afin que les opérations SQL suivantes puissent s'exécuter comme prévu.delimiter ; -
Vérifiez le résultat.
Exécutez une requête pour vérifier que les données ont été insérées correctement.
delimiter ; SELECT * FROM sr_test;Output test_id test_desc 0 1 asdsd,asdsads 1 2 sadsad;asdsads
-
Échec de l'importation des données ou de l'accès aux tables étrangères
Symptôme : lorsque vous utilisez EMR Serverless StarRocks pour importer des données ou accéder à une table étrangère, l'importation ou la connexion peut échouer si la destination est une adresse IP publique.
Cause : une instance EMR Serverless StarRocks s'exécute par défaut dans un environnement Virtual Private Cloud (VPC), qui peut ne pas avoir d'accès direct à Internet. Par conséquent, les requêtes adressées aux ressources publiques, telles que les importations de données ou les interrogations de tables étrangères, échouent sauf si l'accès à Internet est configuré.
Solution : vous pouvez déployer une passerelle NAT Internet dans le VPC et activer la fonctionnalité SNAT. Cela permet à l'instance EMR Serverless StarRocks d'accéder aux ressources publiques via la passerelle. Pour plus d'informations, consultez la section Utiliser la fonctionnalité SNAT d'une passerelle NAT Internet pour accéder à Internet.
Empêcher la fermeture de connexion due au délai d'inactivité SLB/CLB
Symptôme : lors de l'utilisation de SLB avec une instance StarRocks, SLB ferme de force la connexion client si une requête SQL s'exécute pendant plus de 900 secondes, empêchant ainsi la requête de renvoyer un résultat. Pour plus d'informations sur l'activation de SLB, consultez la section Gérer les passerelles.
Cause : SLB ferme toute connexion TCP inactive depuis plus de 900 secondes. Cela peut se produire lors d'une requête SQL de longue durée, interrompant la connexion avant que StarRocks ne renvoie un résultat.
-
Solution : configurez les paramètres TCP Keepalive côté client pour empêcher SLB de fermer les connexions inactives.
-
Paramètres globaux du noyau (niveau système)
Modifiez les paramètres du noyau du système d'exploitation pour activer et configurer des paramètres TCP Keepalive appropriés pour toutes les connexions TCP. Cela permet de surveiller l'état des connexions réseau. Le tableau suivant décrit les paramètres à configurer.
Paramètre
Description
Valeur recommandée
-
Linux :
net.ipv4.tcp_keepalive_time -
FreeBSD/macOS :
net.inet.tcp.keepidle
Période d'inactivité en secondes après laquelle la première sonde Keepalive est envoyée.
600 secondes
-
Linux :
net.ipv4.tcp_keepalive_intvl -
FreeBSD/macOS :
net.inet.tcp.keepintvl
Intervalle en secondes entre les retransmissions des sondes Keepalive.
60 secondes
-
Linux :
net.ipv4.tcp_keepalive_probes -
FreeBSD/macOS :
net.inet.tcp.keepcnt
Nombre d'échecs de sonde consécutifs après lesquels la connexion est abandonnée.
5
Linux
-
Appliquer les paramètres temporairement
# Set global Keepalive parameters (root permissions required) sudo sysctl -w net.ipv4.tcp_keepalive_time=600 # Corresponds to keepidle (600 seconds) sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 # Corresponds to keepintvl (60 seconds) sudo sysctl -w net.ipv4.tcp_keepalive_probes=5 # Corresponds to keepcount (5) -
Appliquer les paramètres de manière permanente
Ajoutez le contenu suivant au fichier
/etc/sysctl.confet exécutezsysctl -ppour appliquer les paramètres.echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_intvl = 60" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_probes = 5" >> /etc/sysctl.conf
FreeBSD/macOS
-
Appliquer les paramètres temporairement
# Set global Keepalive parameters (root permissions required) sudo sysctl -w net.inet.tcp.keepidle=600 sudo sysctl -w net.inet.tcp.keepintvl=60 sudo sysctl -w net.inet.tcp.keepcnt=5 -
Appliquer les paramètres de manière permanente
Ajoutez le contenu suivant au fichier
/etc/sysctl.conf.echo "net.inet.tcp.keepidle = 600" >> /etc/sysctl.conf echo "net.inet.tcp.keepintvl = 60" >> /etc/sysctl.conf echo "net.inet.tcp.keepcnt = 5" >> /etc/sysctl.conf
-
-
Paramètres au niveau de l'application
Vous pouvez utiliser des API spécifiques au langage pour définir les paramètres TCP Keepalive pour une seule connexion.
Java
La bibliothèque standard Java offre un support limité pour TCP Keepalive. Toutefois, vous pouvez l'implémenter en utilisant la réflexion ou des options de socket de bas niveau.
RemarqueLe code suivant nécessite la prise en charge système d'options telles que
tcp_keepidlesous Linux ou FreeBSD. De plus, certaines méthodes, comme la réflexion, peuvent ne pas fonctionner en raison des différences entre les versions de JVM. Nous vous recommandons de tester la compatibilité avant utilisation dans un environnement de production.import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketOption; import java.nio.channels.SocketChannel; public class TcpKeepaliveExample { public static void main(String[ ] args) { try (Socket socket = new Socket()) { // 1. Enable Keepalive socket.setKeepAlive(true); // 2. Set Keepalive parameters (requires low-level socket options) SocketChannel channel = socket.getChannel(); if (channel != null) { // Set Keepidle (idle time) channel.setOption(StandardSocketOptions.SO_KEEPALIVE, true); // Keepalive must be enabled first setSocketOptionInt(socket, "tcp_keepidle", 600); // Requires system support // Set Keepintvl (retransmission interval) setSocketOptionInt(socket, "tcp_keepintvl", 60); // Set Keepcount (number of failures) setSocketOptionInt(socket, "tcp_keepcnt", 5); // Note: The parameter name may vary by system } // Connect to the server socket.connect(new InetSocketAddress("example.com", 80)); // ... Other operations ... } catch (IOException e) { e.printStackTrace(); } } // Use reflection to set system-specific socket options (such as on Linux/FreeBSD) private static void setSocketOptionInt(Socket socket, String optionName, int value) { try { Class<?> clazz = Class.forName("java.net.Socket$SocketOptions"); Object options = clazz.getDeclaredMethod("options").invoke(socket); Class<?> optionsClass = options.getClass(); optionsClass.getDeclaredMethod("setOption", String.class, int.class) .invoke(options, optionName, value); } catch (Exception e) { throw new RuntimeException("Failed to set socket option " + optionName, e); } } }Python
Le module Python
socketprend en charge la configuration directe des paramètres TCP Keepalive.RemarqueLes noms de paramètres peuvent varier selon les systèmes d'exploitation. Par exemple, macOS peut nécessiter
TCP_KEEPALIVEau lieu deTCP_KEEPIDLE. Certains paramètres peuvent nécessiter des autorisations root pour être définis.import socket def create_keepalive_socket(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 1. Enable Keepalive sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 2. Set Keepalive parameters (Linux/FreeBSD) # Keepidle: 600 seconds sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600) # Keepintvl: 60 seconds sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60) # Keepcount: 5 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) return sock # Example sock = create_keepalive_socket() sock.connect(("example.com", 80)) # ... Other operations ... sock.close()Golang
Le package
netde Golang fournit une configuration Keepalive de base. Toutefois, vous devez utiliser le package de bas niveausyscallpour définir des paramètres détaillés.RemarqueLes noms de paramètres peuvent varier selon les systèmes d'exploitation. Certains paramètres peuvent nécessiter des autorisations root pour être définis.
package main import ( "fmt" "net" "syscall" ) func main() { // Create a TCP connection conn, err := net.Dial("tcp", "example.com:80") if err != nil { panic(err) } defer conn.Close() // Get the underlying file descriptor file, err := conn.(*net.TCPConn).File() if err != nil { panic(err) } defer file.Close() fd := int(file.Fd()) // Enable Keepalive err = syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1) if err != nil { panic(fmt.Errorf("set SO_KEEPALIVE: %v", err)) } // Set Keepidle (idle time) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, 600) if err != nil { panic(fmt.Errorf("set TCP_KEEPIDLE: %v", err)) } // Set Keepintvl (retransmission interval) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, 60) if err != nil { panic(fmt.Errorf("set TCP_KEEPINTVL: %v", err)) } // Set Keepcount (number of failures) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT, 5) if err != nil { panic(fmt.Errorf("set TCP_KEEPCNT: %v", err)) } // ... Other operations ... }
-
Une erreur « Unexpected exception: Table '' is not a OLAP table » est signalée lors de la sauvegarde des données StarRocks
-
Symptôme : le message d'erreur suivant est signalé lorsque vous utilisez StarRocks pour créer une sauvegarde instantanée des données.
Unexpected exception: Table '<table_name>' is not a OLAP table -
Analyse de la cause :
-
L'instance utilise le mode de séparation stockage-calcul.
Les instances StarRocks utilisant la séparation stockage-calcul ne prennent pas en charge la sauvegarde et la restauration des données. Seules les instances avec stockage et calcul intégrés prennent en charge cette fonctionnalité.
-
Le type de moteur de table est incompatible.
La fonctionnalité de sauvegarde StarRocks prend uniquement en charge les tables utilisant le moteur OLAP. Si le type de moteur d'une table n'est pas OLAP, cette erreur est signalée.
-
-
Solution :
-
Vérifiez le type d'instance.
Sur la page Instance List de StarRocks, vérifiez la valeur Instance Type. Si le type d'instance est Storage-Compute Separation, la sauvegarde et la restauration des données ne sont pas prises en charge. Nous vous recommandons d'utiliser une instance avec stockage et calcul intégrés pour activer la sauvegarde et la restauration. Pour plus d'informations, consultez la section Sauvegarde et restauration.
-
Vérifiez le type de moteur de table.
Vérifiez la définition DDL de la table cible pour confirmer si
ENGINE=OLAPest défini.SHOW CREATE TABLE <table_name>;Si le moteur de la table n'est pas OLAP, recréez la table en fonction de vos besoins métier et assurez-vous que
ENGINE=OLAPest spécifié.
-
L'importation de données dans une table Primary Key échoue avec le message d'erreur : Cancelled, msg: Primary-key index exceeds the limit
-
Problème :
L'importation de données dans une table Primary Key échoue avec le message d'erreur :
msg: Cancelled, msg: Primary-key index exceeds the limit. tablet_id: 2506733, consumption: 33176971421, limit: 32116807950. Memory stats of top five tablets: 3656508(4465M) 3656496(4464M) 3656544(4464M) 3656520(4462M) 3656532(4461M): be: backend-0.backend.xxx.svc.cluster.local.xxx -
Approche de dépannage :
Analysez l'utilisation actuelle de la mémoire du nœud BE pour déterminer s'il existe un goulot d'étranglement des ressources.
Déterminez si le cluster utilise une architecture shared-nothing ou shared-data, et vérifiez les éléments de configuration correspondants.
-
Étapes de dépannage détaillées :
-
Analyser l'utilisation de la mémoire
L'erreur se produit parce que la mémoire consommée par l'index de clé primaire dépasse la limite de mémoire du nœud BE.
Vérifiez la configuration
mem_limitdu nœud BE, que vous pouvez obtenir en exécutantSHOW FRONTENDSouSHOW BACKENDS, et évaluez sa capacité mémoire disponible.
-
Solutions
-
Solution 1 : Activer les index persistants (recommandé)
Cluster shared-nothing : définissez
enable_persistent_indexsurtrue.Cluster shared-data : définissez
persistent_index_typesurcloud_native.
-
Solution 2 : Concevoir des partitions appropriées
Partitionnez la table Primary Key selon des dimensions appropriées, telles que l'heure ou la région, afin d'éviter d'écrire dans l'intégralité de la table.
Une fois la table partitionnée, chaque écriture n'affecte qu'un sous-ensemble des partitions. L'index de clé primaire doit charger les données uniquement à partir des partitions concernées, ce qui réduit la pression mémoire de chaque écriture.
-
-
Échec du job de chargement avec l'erreur « [E1008]Reached timeout=xxx ms »
-
Problème :
Lorsqu'un job Flink charge des données dans StarRocks, l'erreur suivante se produit :
Message: [E1008] Reached timeout=7500ms @x.x.x.x:8060.Lorsque les données sont chargées à l'aide de
INSERT INTO, l'erreur suivante se produit :java.sql.SQLException: [E1008] Reached timeout=7500ms @10.106.7.182:8060.
-
Dépannage :
Si la valeur de délai d'expiration dans l'erreur n'est pas 30 000 ms, qui est la valeur par défaut de
rpc_connect_timeout_ms, vérifiez si le paramètrerpc_connect_timeout_msdu nœud BE a été modifié manuellement.Pour les jobs de chargement utilisant
INSERT INTO, vérifiez si le paramètrequery_timeoutest configuré, par exemplequery_timeout = 15. StarRocks définit le seuil de délai d'expiration RPC à la moitié de la valeurquery_timeoutet convertit le résultat en millisecondes. Par conséquent, siquery_timeout=15, le délai d'expiration correspondant est de 7 500 ms.
-
Étapes de dépannage détaillées :
Si vous confirmez que le paramètre
rpc_connect_timeout_msdu nœud BE a été modifié : restaurez le paramètre à sa valeur par défaut de 30 000 ms pour éviter les fausses erreurs de délai d'expiration causées par un délai de connexion trop court.L'erreur
Reached timeout=7500msindique généralement une charge élevée des threads brpc sur le nœud BE. Cela retarde le traitement des requêtes RPC et déclenche finalement un délai d'expiration.Exécutez
SHOW TABLET FROM <destination_database>.<destination_table> ORDER BY RowCount DESC; pour analyser la distribution des données de la table de destination et déterminer si les données sont correctement réparties entre les tablets. Par exemple, si la quantité de données dans une seule tablette dépasse considérablement la plage recommandée de 1 Go à 10 Go, certains nœuds BE peuvent devenir surchargés, ce qui dégrade les performances d'écriture.-
Solutions :
Solution 1 (recommandée) : optimisez la stratégie de bucketing de la table. Sélectionnez un champ à cardinalité élevée approprié comme clé de bucketing dans
DISTRIBUTED BY HASH(...)pour répartir les données uniformément entre les tablets.-
Solution 2 (atténuation temporaire) : si l'utilisation du processeur et des E/S sur les nœuds BE n'a pas atteint ses limites, ajustez les paramètres suivants selon les besoins :
Augmentez
brpc_num_threads. La valeur par défaut correspond au nombre de cœurs de processeur sur le nœud BE. Vous pouvez essayer de définir le paramètre sur deux ou quatre fois sa valeur par défaut. Ne dépassez pas quatre fois la valeur par défaut, car cela pourrait augmenter la contention des threads.Augmentez
flush_thread_num_per_store. La valeur par défaut est 2. Vous pouvez définir le paramètre sur 4 pour augmenter la concurrence lors de l'écriture des données sur les disques.
Échec du job de chargement avec l'erreur « Error:NULL value in non-nullable column 'xxx' »
Problème : lorsque vous chargez des données dans une table StarRocks, l'erreur suivante se produit :
Error: NULL value in non-nullable column 'xxx'.Cause : une valeur
NULLest écrite dans une colonne définie commeNOT NULL. Cela viole la contrainte de schéma de table et entraîne l'échec du job de chargement.-
Solutions :
-
Solution 1 : corriger les données en amont
Avant l'écriture des données dans StarRocks, filtrez ou remplacez les valeurs
NULLpour garantir que les données respectent les contraintes de la table de destination. -
Solution 2 : modifier le schéma de table
Si la logique métier autorise le champ à contenir des valeurs NULL, modifiez le schéma de table et supprimez la contrainte
NOT NULL.
-
L'erreur « because of too many versions, current/limit: 1009/1000 » se produit lors de l'importation de données à l'aide de Flink Connector
-
Problème :
Lorsque vous écrivez continuellement des données dans une table StarRocks à l'aide de Flink Connector, l'erreur suivante se produit :
because of too many versions, current/limit: 1009/1000. Cause : dans le modèle Primary Key de StarRocks ou le modèle Unique Key utilisant Merge-on-Write, chaque importation de données génère une nouvelle version. Pour éviter l'encombrement des métadonnées et garantir les performances des requêtes, le système autorise par défaut chaque partition à conserver jusqu'à 1 000 versions.
-
Solution :
-
Vérifier le score de compaction des partitions
Exécutez l'instruction SQL suivante pour vérifier la charge de compaction de chaque partition dans la table de destination :
SELECT TABLE_NAME, PARTITION_NAME, AvgCS AS avg_compaction_score, MaxCS AS max_compaction_score FROM information_schema.partitions_meta WHERE TABLE_NAME = 'your_table_name';Si la valeur
MaxCS— le score de compaction maximal — de la partition concernée est nettement supérieure à 100, la partition contient un grand nombre de petites versions en attente de fusion. Cela indique que la compaction ne s'est pas terminée à temps. -
Déclencher manuellement la compaction
Exécutez l'instruction suivante :
ALTER TABLE your_db.your_table COMPACT PARTITION your_partition_name; -
Optimiser les paramètres du sink Flink
Augmentez les valeurs des paramètres de sink Flink suivants :
sink.buffer-flush.max-bytes,sink.buffer-flush.max-rows,sink.buffer-flush.interval-ms. Cela réduit la fréquence d'importation des données et empêche la génération d'un excès de petites versions.
-
Erreur Failed to get status for file xxx lors de l'interrogation des données à l'aide d'un External Catalog
-
Problème :
Lorsque vous interrogez une table dans un data lake externe, tel que Paimon ou Iceberg, l'erreur suivante se produit :
(1064, 'Failed to get status for file: oss://data-lakehouse-oss-normal/dataware.db/dwd_annotation2_user/metadata/00097-10647858-814a-499e-b300-51c570ee7ee0.metadata.json')L'API OSS renvoie l'erreur suivante :<Error> <Code>AccessDenied</Code> <Message>You have no right to access this object because of bucket acl.</Message> <RequestId>68EC744EB6CD8C3539FAB32A</RequestId> <HostId>data-lakehouse-oss-normal.oss-cn-shenzhen-internal.aliyuncs.com</HostId> <EC>0003-00000001</EC> <RecommendDoc>https://api.alibabacloud.com/troubleshoot?q=0003-00000001</RecommendDoc> </Error> Cause : StarRocks s'appuie sur l'accès à un service de stockage d'objets, tel qu'Alibaba Cloud OSS, lorsqu'il interroge des tables dans un data lake externe, tel que Hive, Iceberg ou Hudi, à l'aide d'un External Catalog. Des autorisations ou des configurations incorrectes peuvent empêcher StarRocks de lire les métadonnées ou les fichiers de données.
-
Solution :
Tout d'abord, vérifiez que l'AccessKey est valide. Confirmez que les valeurs
accessKeyIdetaccessKeySecretconfigurées permettent d'accéder au bucket OSS de destination.Si les valeurs
accessKeyIdetaccessKeySecretsont correctement configurées, vérifiez si le bucket OSS est accessible depuis d'autres comptes Alibaba Cloud. Pour l'accès intercomptes à un bucket OSS, modifiez les configurations pertinentes. Pour plus d'informations, consultez la section Comment accéder à OSS depuis un autre compte ?.
Comment afficher l'espace disque occupé par les index persistants sur les nœuds CN et BE ?
Une fois les index persistants activés en définissant enable_persistent_index = true ou persistent_index_type = 'cloud_native', les index de clés primaires sont stockés sur les disques. Vous pouvez interroger la table information_schema.be_tablets pour obtenir leur utilisation disque.
-- Query the index size of each table and sort the results, by index size in descending order.
SELECT
tables_config.TABLE_NAME,
t1.TABLE_ID,
t1.index_sum_mb
FROM (
-- Calculate the total index size of each table in MB.
SELECT
TABLE_ID,
SUM(INDEX_DISK)/1024/1024 AS index_sum_mb
FROM information_schema.be_tablets
GROUP BY TABLE_ID
) t1
JOIN tables_config ON tables_config.TABLE_ID = t1.TABLE_ID
ORDER BY index_sum_mb DESC
-- Optional: Add a LIMIT clause to limit the number of returned rows when the result set is excessively large.
-- LIMIT 100
;
Comment afficher les transactions d'écriture en cours et les tablets associées à différents lots de transactions ?
Suivez les jobs de chargement en cours ou récemment terminés pour identifier les tablets vers lesquelles les données sont écrites.
SELECT
txn_table.*,
tc.table_name
FROM (
SELECT
bt.TABLET_ID,
bt.COMMIT_TIME,
bt.PUBLISH_TIME,
bt.TABLE_ID
FROM information_schema.be_txns bt
JOIN information_schema.be_tablets btt
ON bt.TABLET_ID = btt.TABLET_ID
) AS txn_table
JOIN information_schema.tables_config tc
ON txn_table.TABLE_ID = tc.TABLE_ID;
Comment analyser une augmentation soudaine de la charge CPU ou mémoire pendant une période spécifique ?
Utilisez les journaux d'audit pour identifier les requêtes qui consomment beaucoup de ressources.
SELECT
queryId,
timestamp,
ROUND(memCostBytes / 1024 / 1024 / 1024, 2) AS memCostGB,
cpuCostNs
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY cpuCostNs DESC, memCostGB DESC
LIMIT 20;
Comment analyser une augmentation soudaine de la charge d'E/S pendant une période spécifique ?
Les pics d'E/S sont généralement causés par des analyses à grande échelle, telles que des analyses complètes de table ou des requêtes qui ne peuvent pas utiliser le pruning de partition ou les index.
SELECT
queryId,
timestamp,
ROUND(scanBytes / 1024 / 1024 / 1024, 2) AS scanTotalGB
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY scanTotalGB DESC
LIMIT 20;
Erreur de stockage insuffisant lors de la réduction du nombre de nœuds BE dans un cluster StarRocks entièrement géré
-
Problème :
Lorsque vous réduisez le nombre de nœuds BE depuis la console d'un cluster StarRocks entièrement géré, l'erreur suivante apparaît :
invalid status: [insufficient storage]. -
Cause : les exigences de validation du stockage pour l'opération de réduction ne sont pas satisfaites. Le système n'autorise l'opération que si la capacité totale de stockage après réduction respecte l'exigence suivante :
Stockage utilisé < Capacité totale après réduction × 0,7
Les valeurs sont calculées comme suit :
Capacité totale après réduction = Capacité combinée des nœuds restants après suppression des nœuds spécifiés
Stockage utilisé = Somme de (capacité totale − capacité disponible) sur tous les nœuds
Exécutez
SHOW BACKENDSpour obtenir totalCapacity et availCapacity.
-
Solution :
-
Vérifiez la capacité actuelle du cluster.
Exécutez l'instruction SQL suivante pour obtenir les capacités totales et disponibles de chaque nœud BE :
SHOW BACKENDS\GVérifiez les champs
TotalCapacityetAvailCapacity. Déterminez si le stockage utilisé dépasse 70 % de la capacité totale après réduction. -
Étendez les disques et réessayez.
Si la capacité disque est insuffisante, étendez les disques des nœuds BE dans la console EMR. Assurez-vous que
Stockage utilisé < Capacité totale après réduction × 0,7, puis réessayez l'opération de réduction.
-
RAM.Permission.NotAllow est signalé lors de la connexion à StarRocks Manager
-
Problème :
Lorsque vous utilisez un utilisateur RAM pour vous connecter à StarRocks Manager, le message
"You are not authorized to perform the operation"apparaît. Le code d'erreur estRAM.Permission.NotAllow. Cause : l'utilisateur RAM ne dispose pas des autorisations requises pour effectuer des opérations sur EMR Serverless StarRocks et ne peut donc pas accéder à StarRocks Manager. Pour plus d'informations, consultez la section Autoriser un utilisateur RAM.
-
Solution :
-
Méthode 1 : Accorder une politique système.
Connectez-vous à la console RAM et accordez la politique système
AliyunEMRStarRocksFullAccessà l'utilisateur RAM. L'utilisateur RAM dispose alors de toutes les autorisations nécessaires pour effectuer des opérations sur EMR Serverless StarRocks. -
Méthode 2 : Accorder des autorisations granulaires.
Si vous ne souhaitez pas accorder toutes les autorisations, utilisez le RequestId dans le message d'erreur pour identifier les autorisations manquantes et les accorder à l'utilisateur RAM dans la console RAM. Par exemple, si l'autorisation
emr-serverless-starrocks:ListInstancesest manquante, créez une politique personnalisée qui accorde uniquement cette autorisation.
Sur la page Policies de la console RAM, recherchez
AliyunEMRStarRocksFullAccesspour afficher toutes les autorisations incluses dans la politique système. -
Comment résoudre l'erreur « must be an aggregate expression or appear in GROUP BY clause » dans StarRocks ?
-
Symptôme : lorsque vous exécutez une requête SQL contenant une clause GROUP BY dans StarRocks, l'erreur suivante se produit si la liste SELECT contient une colonne non agrégée qui n'est pas incluse dans la clause GROUP BY.
Getting analyzing error: ... must be an aggregate expression or appear in GROUP BY clause Cause : la règle
ONLY_FULL_GROUP_BYdanssql_modedéclenche cette erreur. Lorsque cette règle est activée, chaque colonne non agrégée de la liste SELECT doit également apparaître dans la clause GROUP BY.-
Solution :
Connectez-vous à l'instance StarRocks à l'aide de l'éditeur SQL dans StarRocks Manager ou d'un client MySQL.
-
Exécutez la commande suivante pour effacer
sql_modeet supprimer la règleONLY_FULL_GROUP_BY.SET GLOBAL sql_mode=''; -
Vérifiez que
sql_modeest vide.SELECT @@GLOBAL.sql_mode;
Le paramètre
SET GLOBAL sql_modeprend effet immédiatement sans redémarrage du service. La désactivation deONLY_FULL_GROUP_BYpeut produire des valeurs inexactes pour les colonnes non agrégées dans les requêtes GROUP BY. Testez cette modification dans un environnement de test avant de l'appliquer en production. Cette opération modifie le paramètre global.