Tous les produits
Search
Centre de documentation

MaxCompute:TunnelBufferedWriter

Dernière mise à jour :Aug 10, 2026

Cette rubrique présente l'interface TunnelBufferedWriter, utilisée pour charger des données.

Un processus de chargement complet comprend généralement les étapes suivantes :

  1. Divisez les données en blocs.

  2. Attribuez un identifiant de bloc (block ID) à chaque partie de données en appelant openRecordWriter(id).

  3. Chargez ces blocs en parallèle à l'aide d'un ou plusieurs threads. En cas d'échec du chargement d'un bloc, retransmettez l'intégralité de ce bloc.

  4. Une fois tous les blocs chargés, soumettez la liste des identifiants de blocs réussis au serveur pour validation en appelant session.commit([1,2,3,…]).

    En raison des contraintes imposées par le serveur, telles que la gestion des blocs et les délais d'expiration de connexion, la logique de chargement peut devenir complexe. Pour simplifier ce processus, le SDK propose une implémentation de RecordWriter plus avancée : TunnelBufferedWriter.

Définition de l'interface TunnelBufferedWriter

public class TunnelBufferedWriter implements RecordWriter {
    public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option) throws IOException;
    public long getTotalBytes();
    public void setBufferSize(long bufferSize);
    public void setRetryStrategy(RetryStrategy strategy);
    public void write(Record r) throws IOException;
    public void close() throws IOException;
}

Description de l'interface TunnelBufferedWriter

  • Cycle de vie : s'étend de la création du RecordWriter jusqu'à la fin du chargement des données.

  • Création d'une instance TunnelBufferedWriter : appelez la méthode openBufferedWriter de l'objet UploadSession.

  • Chargement des données : appelez la méthode write. Les données sont d'abord écrites dans un tampon local. Lorsque le tampon est plein, les données sont soumises par lots au serveur, ce qui permet d'éviter les expirations de connexion. En cas d'échec du chargement, le système relance automatiquement l'opération.

  • Fin du chargement : appelez la méthode close, puis finalisez l'opération en appelant la méthode commit de l'objet UploadSession.

  • Gestion du tampon : utilisez la méthode setBufferSize pour modifier la taille du tampon en mémoire (en octets). Il est recommandé de définir une valeur supérieure ou égale à 64 Mo afin d'éviter la génération excessive de petits fichiers sur le serveur, ce qui pourrait nuire aux performances. La valeur minimale est de 1 Mo et la maximale de 1 000 Mo. Dans la plupart des cas, il n'est pas nécessaire de modifier la valeur par défaut de 64 Mo.

  • Configuration de la stratégie de nouvelle tentative : trois stratégies d'attente sont disponibles : attente exponentielle (EXPONENTIAL_BACKOFF), attente linéaire (LINEAR_BACKOFF) et attente constante (CONSTANT_BACKOFF). Par exemple, le code ci-dessous configure le nombre de nouvelles tentatives de l'opération Write à 6, avec des délais d'attente respectifs de 4 s, 8 s, 16 s, 32 s, 64 s et 128 s avant chaque tentative (la configuration par défaut utilise une séquence exponentielle commençant à 4). Il est généralement déconseillé de modifier ces paramètres d'attente.

    RetryStrategy retry 
      = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF)
    writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter();
    writer.setRetryStrategy(retry);