Cette rubrique répond aux questions courantes sur l'optimisation des petits fichiers et les diagnostics de jobs dans MaxCompute.
Dans quels scénarios des petits fichiers sont-ils générés ? Comment résoudre ce problème ?
Scénarios
MaxCompute utilise le système de fichiers distribué Apsara (Pangu) pour le stockage par blocs. Les fichiers inférieurs à la taille de bloc par défaut de 64 Mo sont considérés comme des petits fichiers.
Les petits fichiers sont généralement générés dans les scénarios suivants :
Étape Reduce : Un grand nombre de petits fichiers sont produits lors de l'étape Reduce d'un job.
Téléchargement de données via Tunnel : Des petits fichiers s'accumulent lorsque les données sont téléchargées par petits lots via Tunnel.
-
Fichiers temporaires et expirés : L'exécution des jobs génère des fichiers temporaires et des fichiers expirés peuvent rester dans la corbeille. Ceux-ci incluent les types suivants :
Type Description TABLE_BACKUP Tables conservées dans la corbeille au-delà de leur période de rétention FUXI_JOB_TMP Répertoires temporaires générés lors de l'exécution des jobs TMP_TABLE Tables temporaires générées lors de l'exécution des jobs INSTANCE Journaux conservés dans les tables de métadonnées lors de l'exécution des jobs LIFECYCLE Tables ou partitions ayant atteint leur limite de cycle de vie INSTANCEPROFILE Données de profil générées après la soumission et l'exécution des jobs VOLUME_TMP Données sans métadonnées disposant d'un répertoire mappé sur Pangu TEMPRESOURCE Fichiers de ressources temporaires à usage unique utilisés par les UDF FAILOVER Fichiers temporaires conservés lors des basculements du système
Pour vérifier le nombre de petits fichiers dans une table, exécutez la commande suivante :
desc extended <table_name>;
Impact
Un grand nombre de petits fichiers peut entraîner les problèmes suivants :
Gaspillage de ressources : Par défaut, chaque petit fichier est mappé à une instance map. Un grand nombre de petits fichiers conduit à une création excessive d'instances et dégrade les performances globales d'exécution.
Pression sur le système de stockage : Un grand nombre de petits fichiers augmente la charge sur Pangu et réduit l'efficacité du stockage. Dans les cas extrêmes, Pangu peut devenir indisponible.
Solutions
Choisissez une solution en fonction de la manière dont les petits fichiers ont été générés :
Petits fichiers provenant de l'étape Reduce
Exécutez une instruction INSERT OVERWRITE sur la table ou la partition source, ou écrivez les données dans une nouvelle table puis supprimez la table source.
Petits fichiers provenant du téléchargement de données via Tunnel
Lors de l'utilisation du SDK Tunnel, téléchargez les données lorsque le cache de fichiers atteint 64 Mo.
Lors de l'utilisation du client MaxCompute (odpscmd), évitez de télécharger fréquemment de petits fichiers. Téléchargez les données en lot lorsqu'un nombre suffisant de fichiers a été accumulé.
Pour les tables partitionnées, configurez des règles de cycle de vie pour les partitions afin de supprimer automatiquement les données expirées.
Exécutez une instruction
INSERT OVERWRITEsur la table ou la partition source.-
Exécutez la commande suivante pour fusionner les petits fichiers :
ALTER TABLE <table_name> [PARTITION (<pt_spec>)] MERGE SMALLFILES;
Que faire si une opération d'insertion concurrente renvoie l'erreur ODPS-0110999 ?
Problème
Lorsque vous exécutez des opérations d'insertion concurrentes sur une table, l'erreur suivante est renvoyée :
ODPS-0110999: Critical! Internal error happened in commit operation and rollback failed, possible breach of atomicity - Rename directory failed during DDLTask.
Cause
MaxCompute ne prend pas en charge le contrôle de concurrence. Lorsque plusieurs jobs modifient simultanément la même table, un conflit de concurrence peut survenir avec une faible probabilité lors des opérations sur le module de métadonnées (META). Cette erreur peut également se produire lorsque des opérations ALTER et INSERT s'exécutent sur la même table en même temps.
Solution
Convertissez la table en table partitionnée afin que chaque instruction SQL insère les données dans une partition distincte. Cela permet des opérations concurrentes sans conflits.
Que faire si un job renvoie l'erreur ODPS-0130121 ?
Problème
Lorsqu'un job s'exécute, l'erreur suivante est renvoyée :
FAILED:ODPS-0130121:Invalid argument type - line 1:7 'testfunc':in function class
Cause
Les types de données des paramètres d'entrée transmis à une fonction intégrée ne sont pas valides.
Solution
Vérifiez les types de données des paramètres d'entrée et assurez-vous qu'ils correspondent aux exigences de la fonction intégrée. Pour plus d'informations sur les fonctions intégrées et leurs types de paramètres, consultez la documentation de référence MaxCompute SQL.
Pourquoi une tâche apparaît-elle comme suspendue dans le centre d'opérations DataWorks ?
Vérifiez si la tâche est démarrée en fonction de la configuration du projet :
La tâche est démarrée : Vérifiez si une tâche ancêtre a échoué. Une tâche ancêtre ayant échoué bloque les tâches en aval.
La tâche n'est pas démarrée : Cliquez avec le bouton droit sur le nœud worker et vérifiez que le nœud fonctionne correctement. Si nécessaire, renommez la tâche et reconfigurez ses propriétés de planification.
Pourquoi DataWorks Data Integration m'invite-t-il continuellement à vérifier le champ Order ?
Ce message indique que le champ Order de la base de données a peut-être été supprimé.
Pour résoudre ce problème :
Vérifiez si le champ
Orderexiste dans la base de données source.Videz le cache.
Reconfigurez ou recréez la tâche de synchronisation.
Vérifiez l'état de la tâche.
Que faire si la commande odpscmd -f échoue sans renvoyer de message d'erreur ?
Problème
Lorsque vous exécutez la commande odpscmd -f pour exécuter un fichier SQL dans crontab, l'exécution échoue mais aucun message d'erreur n'est renvoyé. Cependant, l'exécution de la même commande directement dans une session Shell fonctionne correctement.
Cause
Dans crontab, les flux de sortie et d'erreur ne sont pas capturés par défaut, donc les messages d'erreur sont perdus.
Solution
Redirigez les flux de sortie et d'erreur vers un fichier journal lors de l'exécution de la commande dans crontab :
odpscmd -f xxx.sql >> /path/to/odpscmd.log 2>&1
Lorsqu'un problème survient, consultez le fichier journal pour obtenir les détails de l'erreur.
Pourquoi les tâches de synchronisation DataWorks restent-elles bloquées à l'état d'attente ?
Si les tâches de synchronisation sont à l'état d'attente lors de l'utilisation de ressources de planification partagées, optimisez les tâches de synchronisation par lots pour maximiser la vitesse de synchronisation.
Vous pouvez également ajouter des ressources de planification dédiées. Pour plus d'informations, consultez Créer et utiliser un groupe de ressources personnalisé pour Data Integration.
Pourquoi un serveur de ressources de planification affiche-t-il toujours l'état arrêté ?
Si un serveur ajouté via la fonctionnalité de gestion des ressources de planification affiche l'état arrêté (même après réinitialisation), vérifiez les points suivants :
Réseau d'interconnexion des produits cloud : Vérifiez que le nom de la machine dans les informations d'enregistrement correspond au nom d'hôte réel du serveur. Exécutez la commande
hostnamesur l'instance ECS pour obtenir le nom d'hôte réel. Les noms personnalisés ne sont pas pris en charge.Virtual Private Cloud (VPC) : Vérifiez si le nom d'hôte ECS a été modifié. Notez que le nom d'hôte ECS est différent du nom de l'instance. Si le nom d'hôte a été modifié, exécutez
cat /etc/hostssur l'instance ECS pour vérifier que la liaison du nom d'hôte est valide.