Cette rubrique apporte des réponses aux questions fréquemment posées concernant ClickHouse.
Que faire si le message d'erreur « Memory limit (for total) exceeded » s'affiche ?
Que faire si le message d'erreur « Memory limit (for query) exceeded » s'affiche ?
Que faire si le message d'erreur « Memory limit (for user) exceeded » s'affiche ?
Comment les composants du service ClickHouse sont-ils répartis dans un cluster OLAP ?
Pourquoi la vitesse d'importation des données diminue-t-elle progressivement ?
Pourquoi est-il nécessaire de définir un cluster logique dans ClickHouse ?
Puis-je modifier le nombre de shards et de replicas après la création d'un cluster ?
Quels paramètres dois-je configurer pour utiliser HDFS avec EMR ClickHouse ?
Quelles sont les différences entre EMR ClickHouse et ApsaraDB for ClickHouse ?
ClickHouse peut-il interroger des tables Hive utilisant DLF pour le stockage des métadonnées ?
Comment réduire le volume de données dans la table system.zookeeper_log ?
Comment créer un utilisateur ClickHouse ?
Vous pouvez créer un utilisateur ClickHouse depuis la console E-MapReduce (EMR) ou via le client ClickHouse.
-
Console EMR
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-users. Ajoutez un élément de configuration. Définissez le paramètre sur users.<YourUserName>.password, users.<YourUserName>.password_sha256_hex ou users.<YourUserName>.password_double_sha1_hex, puis indiquez une valeur personnalisée. Enregistrez l'élément de configuration et redémarrez le service pour créer l'utilisateur.
Remplacez <YourUserName> par le nom de l'utilisateur ClickHouse que vous souhaitez créer.
RemarquePour plus d'informations, consultez la section Gérer les éléments de configuration afin d'ajouter un paramètre de composant, ainsi que la section Redémarrer un service pour redémarrer un service.
-
Client ClickHouse
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-users. Ajoutez un élément de configuration en définissant le paramètre sur users.default.access_management et la valeur sur 1. Enregistrez la configuration et redémarrez le service. Connectez-vous ensuite au cluster ClickHouse en tant qu'utilisateur par défaut.
Connectez-vous au cluster EMR ClickHouse en mode SSH. Pour plus d'informations, consultez la section Se connecter à un cluster.
-
Exécutez la commande suivante pour démarrer le client ClickHouse :
clickhouse-client -h core-1-1 -mRemarqueCet exemple permet de se connecter au nœud
core-1-1. Si vous disposez de plusieurs nœuds core, vous pouvez vous connecter à l'un d'entre eux. -
Exécutez l'instruction suivante pour créer un utilisateur ClickHouse :
CREATE USER IF NOT EXISTS user_test ON CLUSTER new_cluster_emr IDENTIFIED WITH plaintext_password BY '123456';RemarqueDans cet exemple, le nom de l'utilisateur est user_test et le mot de passe est 123456. Spécifiez le nom et le mot de passe selon vos besoins métier.
Syntaxe utilisée pour créer un utilisateur ClickHouse :
CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1] [, name2 [ON CLUSTER cluster_name2] ...] [NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']}] [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE] [DEFAULT ROLE role [,...]] [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]] [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]; -
Exécutez l'instruction suivante pour interroger les utilisateurs existants :
SHOW USERS;Les informations relatives aux utilisateurs existants sont renvoyées.
┌─name──────┐ │ default │ │ user_test │ │ user_test2 │ └─────────┘
Que faire en cas de perte de données ?
Description du problème : Un total de A entrées de données est écrit dans ClickHouse, mais seulement B entrées de données sont lues. B est inférieur à A.
-
Cause : Dans la plupart des cas, aucune donnée n'est perdue dans ClickHouse. Toutefois, chaque shard stocke au moins deux replicas. Le moteur *MergeTree est utilisé pour les tables locales. Si vous utilisez une table distribuée pour lire les données, le nombre d'entrées de données lues peut être inférieur au nombre d'entrées écrites.
Les données sont distribuées sur chaque nœud, qu'elles soient écrites via une table distribuée ou directement dans les tables locales. Lorsque vous lisez des données à l'aide d'une table distribuée, chaque shard utilise une seule connexion par défaut. Le nombre de connexions est alors inférieur au nombre de nœuds. Par conséquent, les données présentes sur certains nœuds ne peuvent pas être lues. Exemples d'instructions :
CREATE TABLE db.table_local ( ... ) Engine = MergeTree() CREATE TABLE db.table_distributed ( ... ) Engine = Distributed(cluster_emr, db, table_local, rand()); -
Solutions
Solution
Opération
Solution 1 (recommandée)
Supprimez la table db.table_local et créez une table répliquée. Utilisez la table répliquée créée comme table locale.
Solution 2 (non recommandée)
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-users. Cliquez sur Add Configuration Item et ajoutez le paramètre profiles.<YOUR_PROFILE_NAME>.max_parallel_replicas. Définissez sa valeur au moins égale au nombre de replicas dans chaque shard. Assurez-vous ensuite que le paramètre users.<YOUR_USER_NAME>.profile est défini sur <YOUR_PROFILE_NAME>.
RemarqueRemplacez <YOUR_PROFILE_NAME> et <YOUR_USER_NAME> par vos noms réels. Pour plus d'informations sur ces paramètres, consultez la section Contrôle d'accès et gestion des comptes.
Que faire si le message d'erreur « Memory limit (for total) exceeded » s'affiche ?
Cause : L'utilisation de la mémoire dépasse la mémoire totale disponible pour le serveur.
-
Solution : Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-config. Cliquez sur Add Configuration Item et ajoutez le paramètre max_server_memory_usage. La valeur maximale de ce paramètre est
Physical memory of the machine * max_server_memory_usage_to_ram_ratio.RemarqueLa valeur par défaut du paramètre max_server_memory_usage_to_ram_ratio dans ClickHouse est 0,9. Pour modifier cette valeur, ajoutez l'élément de configuration max_server_memory_usage_to_ram_ratio et spécifiez la valeur selon vos besoins métier.
Que faire si le message d'erreur « Memory limit (for query) exceeded » s'affiche ?
Cause : L'utilisation de la mémoire dépasse la mémoire maximale disponible pour une seule requête.
-
Solutions
Scénario
Opération
Configuration globale
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-config. Cliquez sur Add Configuration Item et ajoutez le paramètre profiles.<YOUR_PROFILE_NAME>.max_memory_usage. Assurez-vous ensuite que le paramètre users.<YOUR_USER_NAME>.profile est défini sur <YOUR_PROFILE_NAME>.
RemarqueRemplacez <YOUR_PROFILE_NAME> et <YOUR_USER_NAME> par vos noms réels. Pour plus d'informations sur ces paramètres, consultez la section Contrôle d'accès et gestion des comptes.
Pour le client ClickHouse
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet client-config. Cliquez sur Add Configuration Item et ajoutez le paramètre max_memory_usage.
Pour une session
Exécutez la commande
SET max_memory_usage=xxxx. Ce paramètre s'applique pendant toute la durée de la session.Pour une requête
Ajoutez le paramètre max_memory_usage à une instruction SQL. La configuration ne s'applique qu'à la requête actuelle.
Exemple :
SELECT column FROM table SETTINGS max_memory_usage=xxxx.
Que faire si le message d'erreur « Memory limit (for user) exceeded » s'affiche ?
Cause : L'utilisation de la mémoire dépasse la mémoire maximale disponible pour un seul utilisateur.
-
Solutions
Scénario
Opération
Configuration globale
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet server-users. Cliquez sur Add Configuration Item et ajoutez le paramètre profiles.<YOUR_PROFILE_NAME>.max_memory_usage_for_user. Assurez-vous ensuite que le paramètre users.<YOUR_USER_NAME>.profile est défini sur <YOUR_PROFILE_NAME>.
RemarqueRemplacez <YOUR_PROFILE_NAME> et <YOUR_USER_NAME> par vos noms réels. Pour plus d'informations sur ces paramètres, consultez la section Contrôle d'accès et gestion des comptes.
Pour le client ClickHouse
Dans la console E-MapReduce, accédez à la page du service ClickHouse, puis à l'onglet Configure. Cliquez sur l'onglet client-config. Cliquez sur Add Configuration Item et ajoutez le paramètre max_memory_usage_for_user.
Pour une session
Exécutez la commande
SET max_memory_usage_for_user=xxxx. Ce paramètre s'applique pendant toute la durée de la session.Pour une requête
Ajoutez le paramètre max_memory_usage_for_user à une instruction SQL. La configuration ne s'applique qu'à la requête actuelle.
Exemple :
SELECT column FROM table SETTINGS max_memory_usage_for_user=xxxx.
Comment les composants du service ClickHouse sont-ils répartis dans un cluster OLAP ?
Le service ClickHouse comprend les composants suivants : ClickHouseRuntime, ClickHouseServer et ClickHouseKeeper.
Dans les clusters OLAP EMR V3.X, le composant ClickHouseKeeper n'est pas installé. Le composant ClickHouseRuntime est installé sur tous les types de nœuds, tandis que le composant ClickHouseServer est installé uniquement sur les nœuds core.
Dans les clusters OLAP EMR V5.X, le composant ClickHouseRuntime est installé sur tous les types de nœuds, tandis que le composant ClickHouseServer est installé uniquement sur les nœuds core. Le composant ClickHouseKeeper est installé sur le premier nœud core ou sur les trois premiers nœuds core et ne prend pas en charge la mise à l'échelle horizontale. Par exemple, si vous configurez deux nœuds core lors de la création d'un cluster OLAP, le composant ClickHouseKeeper est installé sur le premier nœud core. Si vous ajoutez deux autres nœuds core au cluster, le nombre de nœuds core sur lesquels le composant ClickHouseKeeper est installé reste inchangé.
Pourquoi la vitesse d'importation des données diminue-t-elle progressivement ?
Dans ClickHouse, la plupart des tables sont liées à MergeTree, telles que les tables ReplicatedMergeTree et ReplacingMergeTree.
Lorsque des données sont écrites dans une table MergeTree, elles sont triées en mémoire avant d'être vidées sur le disque. Une partie de données (data part) est alors générée sur le disque. Les parties de données présentes sur le disque sont fusionnées en continu par des threads d'arrière-plan, permettant ainsi de regrouper les petites parties en une seule grande partie. Lors de la phase initiale d'importation des données dans une table MergeTree, les threads d'arrière-plan peuvent constater qu'aucune partie de données n'est disponible pour la fusion. Toutes les ressources sont alors consacrées à la réception des données et à leur vidage sur le disque, ce qui explique la vitesse élevée d'importation. Après un certain temps, davantage de parties de données deviennent éligibles à la fusion par les threads d'arrière-plan. Par conséquent, certaines ressources sont utilisées pour fusionner les parties de données. Plus il y a de données vidées sur le disque, plus les ressources de calcul nécessaires à la fusion augmentent. La quantité de ressources allouée à la fusion des parties de données augmente jusqu'à atteindre un équilibre entre l'importation et la fusion des données. Il en résulte une diminution de la vitesse d'importation.
Comment mettre à niveau le service ClickHouse ?
La version du service ClickHouse dépend de la version du cluster EMR. Pour mettre à niveau le service ClickHouse, vous devez mettre à niveau le cluster EMR.
Pourquoi est-il nécessaire de définir un cluster logique dans ClickHouse ?
Dans ClickHouse, le terme « cluster » désigne un cluster logique défini dans la configuration. Vous pouvez exécuter la commande select * from system.clusters pour afficher les clusters logiques actuellement définis.
Chaque cluster logique contient plusieurs machines. Vous pouvez configurer un cluster logique pour établir des relations entre différentes machines, telles que les relations de sharding et de réplication. Vous pouvez également utiliser différents clusters logiques selon vos scénarios métier.
Par défaut, un cluster logique contenant tous les nœuds d'un cluster physique EMR ClickHouse est configuré.
Que sont les shards et les replicas dans ClickHouse ?
Dans ClickHouse, un nœud peut être le replica d'un ou de plusieurs autres nœuds. Les données des tables utilisant le moteur Replicated*MergeTree sur ces nœuds sont identiques.
Dans ClickHouse, un shard est composé d'un ou de plusieurs nœuds. Les nœuds d'un shard sont des replicas les uns des autres.
Comment tester les performances de ClickHouse ?
Vous pouvez généralement utiliser Star Schema Benchmark (SSB) pour tester les performances de ClickHouse. Pour plus d'informations, consultez la section Star Schema Benchmark. Pour découvrir d'autres cas de test, reportez-vous aux sections Tutoriels et exemples de jeux de données et clickhouse-benchmark.
Puis-je modifier le nombre de shards et de replicas après la création d'un cluster ?
Par exemple, lors de la création d'un cluster, le nombre de shards est A et le nombre de replicas est B. Après la création du cluster, vous souhaitez modifier le nombre de shards en C et le nombre de replicas en D. ClickHouse vous permet de modifier le nombre de shards et de replicas. Pour ce faire, procédez comme suit : dans la console EMR, accédez à la page du service ClickHouse, puis à l'onglet server-metrika. Sur l'onglet server-metrika, localisez le paramètre clickhouse_remote_servers et modifiez le nombre de shards et de replicas dans les paramètres de ce dernier.
Toutefois, afin d'éviter les erreurs, nous vous déconseillons de modifier directement le nombre de shards et de replicas. Par exemple, si des données existent déjà dans le cluster, ces modifications peuvent entraîner des erreurs de données. Nous vous recommandons plutôt d'ajouter un cluster logique et de configurer le nombre de shards et de replicas selon vos besoins métier. Cette approche vous permet de conserver les configurations originales des shards et des replicas.
Quels paramètres dois-je configurer pour utiliser HDFS avec EMR ClickHouse ?
Pour plus d'informations, consultez la section HDFS.
Quelles sont les différences entre EMR ClickHouse et ApsaraDB for ClickHouse ?
L'ID de produit d'un cluster E-MapReduce ClickHouse commence par
c-, par exemple c-3c8697f91408****. L'ID de produit d'un cluster ApsaraDB for ClickHouse commence parcc-, par exemple cc-bp16qwvp7hy8i****.EMR ClickHouse est semi-managé. Vous pouvez vous connecter à une instance Elastic Compute Service (ECS) pour effectuer des opérations d'exploitation et de maintenance. ApsaraDB for ClickHouse est entièrement managé. Vous ne pouvez pas vous connecter à une instance ECS pour effectuer des opérations d'exploitation et de maintenance.
ClickHouse peut-il interroger des tables Hive utilisant DLF pour le stockage des métadonnées ?
Non, ClickHouse ne peut pas interroger les tables Hive qui utilisent Data Lake Formation (DLF) pour le stockage des métadonnées. ClickHouse permet uniquement d'interroger les tables Hive dont les métadonnées sont stockées dans MySQL ou ApsaraDB RDS. Par conséquent, nous vous déconseillons d'utiliser ClickHouse pour interroger des tables Hive.
Voici quelques suggestions adaptées à vos besoins métier :
Si vous souhaitez importer des données de Hive vers ClickHouse, nous vous recommandons d'utiliser Apache Spark ou Apache Seatunnel.
Si vous souhaitez analyser des données Hive, nous vous conseillons d'utiliser un moteur tel que StarRocks, Trino ou Impala.
Comment réduire le volume de données dans la table system.zookeeper_log ?
La table system.zookeeper_log de ClickHouse enregistre les journaux détaillés des interactions entre ClickHouse et ZooKeeper. Cette table n'est pas liée aux journaux du service ZooKeeper. La modification du niveau de journalisation du service ZooKeeper n'affecte pas le volume de données de la table system.zookeeper_log.
Cause du problème
Le volume de données de la table system.zookeeper_log peut augmenter rapidement pour les raisons suivantes :
Niveau de journalisation ZooKeeper défini sur INFO : Au niveau INFO, ClickHouse enregistre tous les détails des interactions avec ZooKeeper, ce qui génère un grand volume de données de journalisation.
Absence de stratégie de nettoyage automatique : Si aucune politique TTL n'est configurée pour la table, les données de journalisation s'accumulent indéfiniment.
Opérations de métadonnées à haute fréquence : Des opérations telles que la création ou la suppression fréquente de tables, la synchronisation des replicas et la mise à l'échelle du cluster génèrent un grand nombre de journaux d'interaction avec ZooKeeper.
Solution
Définissez une politique TTL (Time to Live) pour la table system.zookeeper_log afin de nettoyer automatiquement les anciennes données.
N'ajoutez pas le paramètre zookeeper_log.ttl dans les éléments de configuration server-config de la console EMR. Utilisez plutôt une instruction SQL pour définir la politique TTL.
Exécutez l'instruction SQL suivante pour définir une politique TTL qui supprime automatiquement les données de journalisation âgées de plus de 7 jours :
ALTER TABLE system.zookeeper_log MODIFY TTL event_date + INTERVAL 7 DAY;
Ajustez la période de conservation selon vos besoins métier. Par exemple, pour conserver les données pendant 14 jours :
ALTER TABLE system.zookeeper_log MODIFY TTL event_date + INTERVAL 14 DAY;