Todos os produtos
Search
Central de documentação

MaxCompute:TunnelBufferedWriter

Última atualização: Sep 21, 2026

Este tópico descreve o TunnelBufferedWriter, utilizado para fazer upload de dados.

Procedimento de upload de dados:

  1. Divida os dados em blocos de dados.

  2. Chame openRecordWriter(id) para especifique um ID para cada bloco de dados.

  3. Use uma ou mais threads para fazer upload dos blocos. Se o upload de algum bloco falhar, todos os blocos são enviados novamente.

  4. Após o upload de todos os blocos, chame session.commit([ 1,2,3,…]) para fornecer os IDs dos blocos ao servidor para verificação.

    O processo de upload é complexo devido às restrições no gerenciamento de blocos e aos timeouts de conexão no servidor. O Tunnel SDK oferece um RecordWriter aprimorado, o TunnelBufferWriter, para simplificar esse processo.

Definição

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

  • Ciclo de vida:

    Compreende o período desde a criação do RecordWriter até o término do upload dos dados.

  • Instância do TunnelBufferedWriter:

    Chame openBufferedWriter do UploadSession para crie uma instância do TunnelBufferedWriter.

  • Upload de dados:

    Ao chamar Write, as entradas de dados são gravadas primeiro no cache local. Quando o cache atinge sua capacidade máxima, múltiplas entradas são enviadas ao servidor de uma só vez, evitando assim timeout de conexão. Em caso de falha no upload, o sistema realiza novas tentativas automaticamente.

  • Encerramento do upload:

    Chame close e, em seguida, commit do UploadSession para encerrar o processo de upload.

  • Controle do buffer:

    Use setBufferSize para modifique a memória ocupada pelo buffer (em bytes). Recomenda-se defina um valor maior ou igual a 64 MB, o que evita a geração excessiva de arquivos pequenos no servidor, prevenindo impactos no desempenho. O valor pode variar de 1 MB a 1000 MB, e o padrão é 64 MB.

  • Configurações de política de retry:

    As seguintes políticas estão disponíveis: EXPONENTIAL_BACKOFF, LINEAR_BACKOFF e CONSTANT_BACKOFF. No exemplo a seguir, utiliza-se EXPONENTIAL_BACKOFF. O número máximo de tentativas é 6. O tempo de espera entre as tentativas começa em 4s e aumenta progressivamente para 8s, 16s, 32s, 64s e 128s. Recomenda-se não modifique essa configuração.

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