public class TunnelBufferedWriter extends Object implements RecordWriter
TunnelBufferedWriter 是一个使用缓冲区的、容错的 Tunnel 上传接口。
通过调用 write 接口将 record 写入缓冲区,当缓冲区大小超过 bufferSize 时将触发上传动作。 上传过程中如果发生错误将自动进行重试。
和 TunnelRecordWriter
的不同之处在于,在使用 TunnelRecordWriter
时用户
需要先划分数据块,然后对每一个数据块分别:
TunnelRecordWriter
TunnelRecordWriter
这个过程中用户需要自己来容错(例如记录下上传失败的 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)
构造此类对象,使用默认缓冲区大小为 64 MiB,和默认的回退策略:4s、8s、16s、32s、64s、128s
|
TunnelBufferedWriter(TableTunnel.UploadSession session,
CompressOption option,
long timeout)
构造此类对象,使用默认缓冲区大小为 64 MiB,和默认的回退策略:4s、8s、16s、32s、64s、128s
|
Modifier and Type | Method and Description |
---|---|
void |
close()
关闭这个 writer,并上传缓存中没有上传过的记录。
|
void |
flush() |
long |
getTimeout() |
long |
getTotalBytes()
获得总共写的字节数(记录序列化)
|
void |
setBufferSize(long bufferSize)
设置缓冲区大小
|
void |
setFlushThreshold(float flushThreshold)
设置flush阈值,当缓冲区已用百分比超过这个比值,下一次
write(Record) 将触发flush,避免数据量超过缓冲区
大小导致额外内存占用和内存拷贝。举例来说,如果flushThreshold设置为0.85,那么缓冲区用到85%后便会尝试flush。 |
void |
setRetryStrategy(com.aliyun.odps.commons.util.RetryStrategy strategy)
设置重试策略
|
void |
setTimeout(long timeout) |
void |
write(Record r)
将 record 写入缓冲区,当其大小超过 bufferSize 时,上传缓冲区中的记录。过程中如果发生错误将
进行自动重试,这个过程中 write 调用将一直阻塞,直到所有记录上传成功为止。
|
public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option) throws IOException
session
- TableTunnel.UploadSession
option
- CompressOption
IOException
- Signals that an I/O exception has occurred.public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option, long timeout) throws IOException
session
- TableTunnel.UploadSession
option
- CompressOption
timeout
- 超时时间 单位 ms <=0 代表无超时IOException
- Signals that an I/O exception has occurred.public void setBufferSize(long bufferSize)
bufferSize
- 缓冲区大小字节,可以设置的最小值 1 MiB,最大值为 1000 MiBpublic void setFlushThreshold(float flushThreshold)
write(Record)
将触发flush,避免数据量超过缓冲区
大小导致额外内存占用和内存拷贝。举例来说,如果flushThreshold设置为0.85,那么缓冲区用到85%后便会尝试flush。flushThreshold
- public void setRetryStrategy(com.aliyun.odps.commons.util.RetryStrategy strategy)
strategy
- RetryStrategy
public void write(Record r) throws IOException
write
in interface RecordWriter
r
- Record
对象IOException
- Signals that an I/O exception has occurred.public void close() throws IOException
close
in interface Closeable
close
in interface AutoCloseable
IOException
- Signals that an I/O exception has occurred.public long getTotalBytes() throws IOException
IOException
public void flush() throws IOException
IOException
public long getTimeout()
public void setTimeout(long timeout)
Copyright © 2023 Alibaba Cloud Computing. All rights reserved.