Réponses aux questions courantes concernant Kudu sur EMR.
Généralités
Où sont stockés les fichiers journaux de Kudu ?
Les fichiers journaux de Kudu se trouvent dans le répertoire /mnt/disk1/log/kudu/@filepath.
Quelles méthodes de partitionnement Kudu prend-il en charge ?
Kudu prend en charge le partitionnement par plage et le partitionnement par hachage. Vous pouvez combiner ces deux méthodes. Pour plus d'informations, consultez la page Conception du schéma Apache Kudu.
Comment accéder à l'interface utilisateur web de Kudu ?
Kudu n'est pas intégré à Knox. Créez un tunnel SSH pour accéder à l'interface utilisateur web. Pour obtenir des instructions, consultez la rubrique Créer un tunnel SSH pour accéder aux interfaces utilisateur web des composants open source.
Où puis-je trouver la FAQ de la communauté Kudu ?
Consultez la page Dépannage Apache Kudu.
Erreurs au démarrage
Exception NonRecoverableException lors de la connexion du client Kudu
Cette erreur signifie que le nombre de nœuds maîtres configurés sur le client ne correspond pas à celui attendu par le cluster :
org.apache.kudu.client.NonRecoverableException: Could not connect to a leader master. Client configured with 1 master(s) (192.168.0.10:7051) but cluster indicates it expects 3 master(s) (192.168.0.36:7051,192.168.0.11:7051,192.168.0.10:7051)
Déployez tous les nœuds maîtres requis et connectez le client Kudu au nœud maître principal.
Échec du démarrage de Kudu dû à un défaut du moniteur Bigboot
Un défaut dans Bigboot V3.5.0 empêche Kudu de redémarrer après un plantage. Le moniteur Bigboot ne supprime pas les informations obsolètes relatives au service de sa base de données, ce qui entraîne l'échec des tentatives de redémarrage ultérieures.
Arrêtez Kudu et redémarrez-le directement sur la machine à l'aide des commandes suivantes.
Exécutez les commandes suivantes sur un nœud Core ou Task. Si vous les exécutez sur un nœud Master, remplacez kudu-tserver par kudu-master.
/usr/lib/b2monitor-current/bin/monictrl -stop kudu-tserver
/usr/lib/b2monitor-current/bin/monictrl -start kudu-tserver
Exécutez ces commandes directement sur la machine. La console EMR peut ne pas parvenir à arrêter le service car celui-ci est déjà terminé.
Une erreur de synchronisation de l'horloge empêche le démarrage de Kudu
Cette erreur se produit lorsque ntpd ne parvient pas à se connecter au serveur NTP configuré :
Service unavailable: RunTabletServer() failed: Cannot initialize clock: timed out waiting for clock synchronisation: Error reading clock. Clock considered unsynchronized
Les journaux peuvent également inclure une sortie similaire à :
E1010 10:37:54.165313 29920 system_ntp.cc:104] /sbin/ntptime
------------------------------------------
stdout:
ntp_gettime() returns code 5 (ERROR)
time e6ee0402.2a452c4c Mon, Oct 10 2022 10:37:54.165, (.165118697),
maximum error 16000000 us, estimated error 16000000 us, TAI offset 0
ntp_adjtime() returns code 5 (ERROR)
modes 0x0 (),
offset 0.000 us, frequency 187.830 ppm, interval 1 s,
maximum error 16000000 us, estimated error 16000000 us,
status 0x2041 (PLL,UNSYNC,NANO),
time constant 6, precision 0.001 us, tolerance 500 ppm,
Redémarrez le serveur et réessayez.
Erreurs d'exécution
Erreur réseau : impossible de résoudre le nom d'hôte
Bad status: Network error: Could not obtain a remote proxy to the peer.: unable to resolve address for <hostname>: Name or service not known
Cette erreur survient lorsqu'un nom d'hôte ne peut pas être résolu en une adresse IP. Sans mappage valide, le pair Raft de la tablette Kudu ne peut pas identifier ses pairs et met fin à la connexion.
Solution 1 : Ajoutez le mappage nom d'hôte vers IP dans le fichier /etc/hosts/@filepath.
Solution 2 : Si l'hôte correspondant au nom d'hôte a été libéré, ajoutez un mappage entre le nom d'hôte et n'importe quelle adresse IP dans le fichier /etc/hosts/@filepath. L'adresse IP n'a pas besoin d'être accessible. Une fois le mappage créé, le serveur de tablettes Kudu réplique les données du serveur Raft indisponible vers un nouveau serveur Raft dans le groupe Raft.
Erreur d'intégrité de la disposition du système de fichiers
Bad status: I/O error: Failed to load Fs layout: could not verify integrity of files: <directory>, <number> data directories provided, but expected <number>
Le nombre de disques spécifiés par le paramètre -fs_data_dirs ne correspond pas aux métadonnées enregistrées par -fs_metadata_dir. Mettez à jour le paramètre -fs_data_dirs afin que le nombre de disques corresponde à celui enregistré dans -fs_metadata_dir.
Échec de création de thread (erreur pthread_create 11)
pthread_create failed: Resource temporarily unavailable (error 11)
Vérifiez les causes suivantes dans l'ordre.
Limites de processus insuffisantes
Vérifiez la limite actuelle pour le nombre maximal de processus utilisateur :
ulimit -a
Si la valeur est trop faible, augmentez-la en modifiant le fichier /etc/security/limits.conf/@filepath ou en créant le fichier /etc/security/limits.d/kudu.conf/@filepath.
Fuite de threads du client Kudu V0.8 dans les déploiements hybrides
Dans les déploiements hybrides, les exécuteurs Spark peuvent présenter des fuites de threads lors de l'utilisation du client Kudu V0.8. Il s'agit d'un problème connu documenté dans KUDU-1453. Mettez à niveau le client Kudu vers la version V0.9 pour résoudre le problème.
Fuite de threads d'arrêt de Trino
Lorsque Trino s'arrête, le thread du hook d'arrêt se bloque sur la méthode take de BlockingQueue en attendant un élément. Ce thread ne peut pas être interrompu, de sorte que le contrôle EMR continue d'envoyer des signaux SIGTERM, générant ainsi de nouveaux threads gestionnaires SIGTERM jusqu'à ce que la limite de processus soit atteinte.
Corrigez le problème côté Trino, ou forcez l'arrêt du processus avec la commande kill -9.
Fuite du pool de threads du SDK Jindo
Spark utilise la classe JindoOssCommitter pour les travaux d'écriture. Cette classe crée un objet JindoOssMagicCommitter qui génère un pool de threads nommé oss-committer-pool. Le pool de threads n'est pas statique et n'est jamais arrêté. À mesure que de nouveaux objets JindoOssMagicCommitter sont créés, les pools de threads s'accumulent sans être libérés. Ce phénomène est particulièrement probable avec les charges de travail Spark Streaming ou Structured Streaming.
Ajoutez les paramètres Spark suivants pour contourner le problème :
spark.sql.hive.outputCommitterClass=org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
spark.sql.sources.outputCommitterClass=org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
Identifier le processus utilisant le plus de threads
Utilisez le script threads_monitor.sh/@filepath suivant pour identifier quel processus consomme le plus de threads :
#!/bin/bash
total_threads=0
max_pid=-1
max_threads=-1
for tid in `ls /proc`
do
if [[ $tid != *self && -f /proc/$tid/status ]]; then
num_threads=`cat /proc/$tid/status | grep Threads | awk '{print $NF}'`
((total_threads+=num_threads))
if [[ ${max_pid} -eq -1 || ${max_threads} -lt ${num_threads} ]]; then
max_pid=${tid}
max_threads=${num_threads}
fi
# echo "Thread ${pid}: ${num_threads}"
fi
done
echo "Total threads: ${total_threads}"
echo "Max threads: ${max_threads}, pid is ${max_pid}"
ps -ef | grep ${max_pid} | grep -v grep
Dépassement de la limite logicielle de mémoire
Rejecting Write request: Soft memory limit exceeded
Le débit d'écriture dépasse la limite logicielle de mémoire. Pour résoudre ce problème, ajustez l'un des paramètres suivants :
Configurez le paramètre
memory_limit_hard_bytes/@parmname pour augmenter la taille de la mémoire. La valeur par défaut est0, ce qui indique que le système définit automatiquement l'utilisation maximale de la mémoire. Vous pouvez modifier la valeur pour-1. Cela indique qu'aucune limite n'est imposée à l'utilisation de la mémoire.Configurez le paramètre
memory_limit_soft_percentage/@parmname pour ajuster le pourcentage de mémoire disponible. La valeur par défaut est80.
Configuration de la liste d'autorisation Kudu et actualisation du jeton
Dois-je redémarrer le service Kudu pour actualiser un jeton expiré ?
Problème : Le jeton du service Kudu a expiré et vous souhaitez l'actualiser.
Solution : Oui. Vous devez redémarrer le service Kudu pour actualiser le jeton.
Erreur : « Impossible d'ouvrir la table Kudu » ou « Impossible d'initialiser le nœud d'analyse Kudu » lors de l'interrogation des tables Kudu depuis Impala
Problème : Vous recevez l'une des erreurs suivantes lorsque vous utilisez Impala pour interroger les tables Kudu :
Unable to open the Kudu tableUnable to initialize the Kudu scan node
Cause : Cette erreur est généralement causée par l'expiration du jeton Kudu Master, un échec d'obtention du leader ou un échec d'authentification. Cette erreur n'est pas liée aux configurations Ranger.
Solution :
Ajoutez le sous-réseau client (par exemple,
10.85.0.0/16) à la configuration de la liste d'autorisation Kudu.Redémarrez le service Kudu.
Foire aux questions sur le redémarrage de Kudu
La console continue de charger lors du redémarrage du service Kudu
Problème : Lorsque vous redémarrez le service Kudu, la page de la console affiche continuellement une icône de chargement.
Solution : Ce problème peut survenir parce que votre session de connexion a expiré, ce qui provoque des problèmes d'actualisation de la page, ou parce que le processus de redémarrage du service prend du temps pour mettre à jour le statut. Actualisez la page ou vérifiez l'historique des opérations.
Puis-je utiliser les requêtes Impala pendant un redémarrage du service Kudu ?
Problème : Vous souhaitez savoir si vous pouvez interroger les données pendant un redémarrage du service Kudu.
Solution : Nous vous recommandons de ne pas exécuter de requêtes pendant le redémarrage. Bien que le service Impala lui-même puisse rester disponible, les requêtes impliquant des tables Kudu échoueront en raison d'interruptions de connexion.
Le service affiche un statut anormal ou invite à démarrer manuellement d'autres services après un redémarrage de Kudu
Problème : Après avoir redémarré le service Kudu, la console affiche un statut anormal ou vous invite à démarrer manuellement d'autres services.
Solution : Aucune action manuelle n'est requise. Le statut anormal est généralement affiché car les contrôles de santé détectent que le service n'a pas complètement démarré. Si le service a récupéré de lui-même et que le nœud Master peut exécuter des requêtes, le redémarrage est terminé. Vous n'avez pas besoin de démarrer manuellement d'autres services.