public class TunnelBufferedWriter extends Object implements RecordWriter
TunnelBufferedWriter 是一个使用缓冲区的、容错的 Tunnel 上传接口。
通过调用 write 接口将 record 写入缓冲区,当缓冲区大小超过 bufferSize 时将触发上传动作。 上传过程中如果发生错误将自动进行重试。
和 TunnelRecordWriter 的不同之处在于,在使用 TunnelRecordWriter 时用户
需要先划分数据块,然后对每一个数据块分别:
TunnelRecordWriterTunnelRecordWriter这个过程中用户需要自己来容错(例如记录下上传失败的 block,以便重新上传)。而 TunnelBufferedWriter 隐藏了数据块 的细节,并将记录持久化在内存中,用户在会话中打开以后,就可以往里面写记录,TunnelBufferedWriter 会尽最大可能容错, 保证数据上传上去。降低了使用的门槛。不过由于隐藏了数据块的细节,TunnelBufferedWriter 并不适合断点续传的场景。
class UploadThread extends Thread {
private UploadSession session;
private static int RECORD_COUNT = 1200;
public UploadThread(UploadSession session) {
this.session = session;
}| Constructor and Description |
|---|
TunnelBufferedWriter(TableTunnel.UploadSession session,
CompressOption option)
构造此类对象,使用默认缓冲区大小为 10 MiB,和默认的回退策略:4s、8s、16s、32s、64s、128s
|
| Modifier and Type | Method and Description |
|---|---|
void |
close()
关闭这个 writer,并上传缓存中没有上传过的记录。
|
void |
flush() |
long |
getTotalBytes()
获得总共写的字节数(记录序列化)
|
void |
setBufferSize(long bufferSize)
设置缓冲区大小
|
void |
setRetryStrategy(com.aliyun.odps.commons.util.RetryStrategy strategy)
设置重试策略
|
void |
write(Record r)
将 record 写入缓冲区,当其大小超过 bufferSize 时,上传缓冲区中的记录过程中如果发生错误将
进行自动重试,这个过程中 write 调用将一直阻塞,直到所有记录上传成功为止。
|
public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option) throws IOException
session - TableTunnel.UploadSessionoption - CompressOptionIOException - Signals that an I/O exception has occurred.public void setBufferSize(long bufferSize)
bufferSize - 缓冲区大小字节,可以设置的最小值 1 MiB,最大值为 1000 MiBpublic void setRetryStrategy(com.aliyun.odps.commons.util.RetryStrategy strategy)
strategy - RetryStrategypublic void write(Record r) throws IOException
write in interface RecordWriterr - Record对象IOException - Signals that an I/O exception has occurred.public void close()
throws IOException
close in interface Closeableclose in interface AutoCloseableIOException - Signals that an I/O exception has occurred.public long getTotalBytes()
throws IOException
IOExceptionpublic void flush()
throws IOException
IOExceptionCopyright © 2019 Alibaba Cloud Computing. All rights reserved.