Todos os produtos
Search
Central de documentação

MaxCompute:TunnelBufferedWriter

Última atualização: Jun 26, 2026

Este tópico descreve a interface TunnelBufferedWriter, usada para upload de dados.

Um fluxo completo de upload geralmente inclui as seguintes etapas:

  1. Divida os dados em partes.

  2. Atribua um block ID a cada bloco de dados chamando openRecordWriter(id).

  3. Use uma ou mais threads para fazer o upload desses blocos separadamente. Se o upload de algum bloco falhar, reenvie o bloco inteiro.

  4. Após o upload de todos os blocos, forneça ao servidor a lista de IDs dos blocos enviados com sucesso para validação chamando session.commit([1,2,3,…]).

    Restrições do servidor, como gerenciamento de blocos e tempo limite de conexão, tornam a lógica do processo de upload complexa. Para simplificar esse processo, o SDK oferece um RecordWriter mais avançado: o TunnelBufferedWriter.

Definição da 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;
}

Descrição da interface TunnelBufferedWriter

  • Ciclo de vida: abrange desde a criação do RecordWriter até a conclusão do upload dos dados.

  • Criação da instância TunnelBufferedWriter: chame a interface openBufferedWriter da UploadSession.

  • Upload de dados: ao chamar a interface Write, os dados são gravados primeiro em um buffer local. Quando o buffer atinge sua capacidade, os dados são enviados em lote ao servidor, evitando tempos limite de conexão. Além disso, o sistema tenta automaticamente novamente em caso de falha no upload.

  • Conclusão do upload: chame a interface close e, em seguida, a interface commit da UploadSession para finalizar o upload.

  • Controle de buffer: use a interface setBufferSize para modificar o tamanho do buffer em bytes. Defina um valor maior ou igual a 64 MB para evitar que o servidor gere muitos arquivos pequenos, o que prejudicaria o desempenho. O valor mínimo é 1 MB e o máximo é 1000 MB. Geralmente, não é necessário alterar essa configuração; mantenha o valor padrão de 64 MB.

  • Configuração da estratégia de nova tentativa: há três estratégias de backoff disponíveis: exponencial (EXPONENTIAL_BACKOFF), linear (LINEAR_BACKOFF) e constante (CONSTANT_BACKOFF). Por exemplo, o código abaixo ajusta o número de tentativas de Write para 6, aplicando intervalos de espera de 4 s, 8 s, 16 s, 32 s, 64 s e 128 s antes de cada nova tentativa (a configuração padrão é uma sequência exponencial iniciada em 4). Normalmente, não se recomenda alterar essa configuração de backoff.

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