Tous les produits
Search
Centre de documentation

MaxCompute:FAQ sur le SDK Tunnel

Dernière mise à jour :Aug 10, 2026

Cette rubrique répond aux questions fréquentes (FAQ) concernant l'utilisation du kit de développement logiciel (SDK) Tunnel.

Catégorie

FAQ

Chargement avec le SDK Tunnel

Téléchargement avec le SDK Tunnel

Comment résoudre l'erreur « You need to specify a partitionspec along with the specified table » qui survient lors du téléchargement de données avec le SDK Tunnel ?

Autres questions

Lorsque je charge des données à l'aide du SDK Tunnel, celles-ci peuvent-elles être automatiquement distribuées vers les partitions ?

Le SDK Tunnel ne permet pas de distribuer automatiquement les données chargées vers différentes partitions. Chaque chargement ne peut cibler qu'une seule table ou une partition unique au sein d'une table. Pour les tables partitionnées, vous devez spécifier la partition cible. Pour les tables à partitions multiples, vous devez spécifier la partition de niveau le plus bas.

Lorsque je charge des données à l'aide du SDK Tunnel, existe-t-il une limite de taille pour le package JAR créé à partir d'une fonction définie par l'utilisateur (UDF) ?

La taille du package JAR ne doit pas dépasser 10 Mo. Si votre package JAR est supérieur à 10 Mo, utilisez la commande Tunnel Upload de MaxCompute pour charger les données.

Existe-t-il une limite sur le nombre de partitions lors du chargement de données avec le SDK Tunnel ?

Le système prend en charge un maximum de 60 000 partitions. Un nombre excessif de partitions peut complexifier les statistiques et l'analyse. MaxCompute limite le nombre d'instances dans une seule tâche, et ce nombre est étroitement lié au volume de données d'entrée ainsi qu'au nombre de partitions. Par conséquent, évaluez vos besoins métier et choisissez une stratégie de partitionnement appropriée afin d'éviter les problèmes liés à un trop grand nombre de partitions.

Comment résoudre l'erreur « StatusConflict » qui survient lors du chargement de données avec le SDK Tunnel ?

  • Symptôme

    Lorsque vous chargez des données à l'aide du SDK Tunnel, l'erreur suivante s'affiche.

    RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. java.io.IOException: RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93)
  • Cause : Cette erreur se produit lorsque vous tentez de fermer un RecordWriter. Les causes possibles sont les suivantes :

    • Vous avez tenté de fermer un RecordWriter qui était déjà fermé.

    • La session associée au RecordWriter était déjà fermée.

    • La session avait déjà été validée.

  • Solution : Vérifiez les causes mentionnées ci-dessus. Par exemple, imprimez des journaux pour contrôler l'état du RecordWriter et de la session avant de valider cette dernière. Une fois que vous avez confirmé qu'aucun de ces problèmes n'est présent, essayez de charger à nouveau les données.

Comment résoudre l'erreur « Blocks Not Match » qui survient lors du chargement de données avec le SDK Tunnel ?

  • Symptôme :

    Lorsque vous chargez des données à l'aide du SDK Tunnel, l'erreur suivante s'affiche.

    ErrorCode=Local Error, ErrorMessage=Blocks not match, server: 0, tunnelServiceClient: 1
    at com.aliyun.odps.tunnel.TableTunnel$UploadSession.commit(TableTunnel.java:814)      
  • Cause

    Le nombre de blocs reçus par le serveur ne correspond pas au nombre de blocs spécifié dans les paramètres de validation.

  • Solution

    • Dans votre code, vérifiez le nombre de writers ouverts par uploadSession.openRecordWriter(i) et le tableau de blocs utilisé au moment de la validation. Assurez-vous qu'ils correspondent.

    • Une fois l'opération d'écriture terminée, confirmez que recordWriter.close(); a bien été appelé. Si vous validez directement la session sans cette étape, le nombre de blocs côté serveur risque de ne pas correspondre au nombre attendu.

Comment résoudre l'erreur « StatusConflict » qui se produit lors de l'exécution de odps tunnel recordWriter.close() après avoir chargé 80 millions d'enregistrements en une seule fois ?

  • Symptôme

    Lorsque vous chargez 80 millions d'enregistrements en une seule fois, l'erreur suivante s'affiche lors de l'exécution de odps tunnel recordWriter.close().

    ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.
  • Causes

    La session se trouve dans un état invalide car une opération précédente l'a déjà fermée ou validée.

  • Solution

    Créez une nouvelle session et rechargez les données. Chaque partition nécessite une session distincte. Si l'erreur est provoquée par des validations multiples, vérifiez d'abord si les données ont bien été chargées. En cas d'échec du chargement, réessayez l'opération. Pour plus d'informations, consultez l'exemple de chargement multithread.

Comment utiliser TunnelBufferedWriter pour éviter les erreurs lors des chargements de données par lots avec le SDK Tunnel ?

À partir de la version 0.21.3-public, le SDK Java MaxCompute intègre le SDK BufferedWriter, qui simplifie les chargements de données et offre une tolérance aux pannes. Du point de vue de l'utilisateur, il suffit d'ouvrir un writer sur une session, puis d'écrire les enregistrements. Concrètement, BufferedWriter met d'abord en cache les enregistrements dans un tampon côté client. Lorsque le tampon est plein, il ouvre une connexion HTTP pour charger les données.

BufferedWriter est conçu pour tolérer les pannes et garantir le succès des chargements de données. Pour plus d'informations, consultez TunnelBufferedWriter.

Comment résoudre l'erreur « You need to specify a partitionspec along with the specified table » qui survient lors du téléchargement de données avec le SDK Tunnel ?

  • Symptôme

    Lorsque vous téléchargez des données depuis une table partitionnée à l'aide du SDK Tunnel, l'erreur suivante s'affiche.

    ErrorCode=MissingPartitionSpec, ErrorMessage=You need to specify a partitionspec along with the specified table.       
  • Cause

    Lors du téléchargement de données depuis une table partitionnée avec le SDK Tunnel, vous devez spécifier les valeurs des colonnes de clé de partition. À défaut, une erreur se produit.

  • Solution

    • Si vous utilisez la ligne de commande Tunnel dans l'outil client MaxCompute pour exporter des données, le client prend en charge l'exportation de la table partitionnée entière. Les données sont exportées vers un dossier.

    • Si vous utilisez le SDK Tunnel pour exporter des données, commencez par récupérer toutes les partitions de la table via le SDK. Voici un exemple de commande.

      odps.tables().get(tablename) t.getPartitions()      

Quels langages de programmation le SDK MaxCompute Tunnel prend-il en charge ?

MaxCompute Tunnel prend actuellement en charge le SDK Java.

Un BlockId peut-il être réutilisé ?

Les BlockIds ne peuvent pas être réutilisés au sein d'une même UploadSession. Pour une UploadSession unique, après avoir ouvert un RecordWriter avec un BlockId, écrit un lot de données, puis appelé close(), vous ne pouvez pas utiliser le même BlockId pour ouvrir un autre RecordWriter. Par défaut, le nombre maximal de blocs est de 20 000, avec des BlockIds allant de 0 à 19 999.

Existe-t-il une limite de taille pour un bloc ?

La taille par défaut d'un bloc de données chargé vers Tunnel est de 100 MiB. La taille maximale d'un seul bloc est de 100 Go. Pour les données supérieures à 64 Mo, assurez-vous que chaque bloc correspond à un fichier. Les fichiers inférieurs à 64 Mo sont considérés comme de petits fichiers. Un nombre excessif de petits fichiers peut dégrader les performances. Si vous chargez continuellement une grande quantité de données, définissez la taille du bloc entre 64 Mo et 256 Mo. Si vous effectuez un chargement par lots quotidien, vous pouvez définir la taille du bloc à environ 1 Go.

L'utilisation du nouveau BufferedWriter simplifie les chargements et aide à éviter les problèmes tels que la multiplication des petits fichiers. Pour plus d'informations, consultez TunnelBufferedWriter.

Comment résoudre un délai d'attente en lecture/écriture ou une IOException ?

Lors du chargement de données, une action réseau est déclenchée pour chaque 8 Ko de données écrites par le Writer. Si aucune activité réseau n'est détectée pendant 120 secondes, le serveur ferme activement la connexion. Le Writer devient alors indisponible. Pour continuer l'écriture, vous devez ouvrir un nouveau Writer.

Nous vous recommandons d'utiliser TunnelBufferedWriter.

Lors du téléchargement de données, le Reader dispose d'un mécanisme similaire. La connexion est interrompue en l'absence d'activité réseau prolongée. Pour prévenir cela, exécutez le processus Reader de manière continue sans entrecouper les appels avec d'autres interfaces système.