Este tópico descreve o TunnelBufferedWriter, utilizado para fazer upload de dados.
Procedimento de upload de dados:
Divida os dados em blocos de dados.
Chame
openRecordWriter(id)para especifique um ID para cada bloco de dados.Use uma ou mais threads para fazer upload dos blocos. Se o upload de algum bloco falhar, todos os blocos são enviados novamente.
-
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
openBufferedWriterdo 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
closee, em seguida,commitdo UploadSession para encerrar o processo de upload. -
Controle do buffer:
Use
setBufferSizepara 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_BACKOFFeCONSTANT_BACKOFF. No exemplo a seguir, utiliza-seEXPONENTIAL_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);