MaxCompute用户指南:数据上传下载:批量数据通道SDK介绍:UploadSession
接口定义如下:
- public class UploadSession {
- UploadSession(Configuration conf, String projectName, String tableName,
- String partitionSpec) throws TunnelException;
- UploadSession(Configuration conf, String projectName, String tableName,
- String partitionSpec, String uploadId) throws TunnelException;
- public void commit(Long[] blocks);
- public Long[] getBlockList();
- public String getId();
- public TableSchema getSchema();
- public UploadSession.Status getStatus();
- public Record newRecord();
- public RecordWriter openRecordWriter(long blockId);
- public RecordWriter openRecordWriter(long blockId, boolean compress);
- public RecordWriter openBufferedWriter();
- public RecordWriter openBufferedWriter(boolean compress);
- }
Upload 对象:
生命周期:从创建 Upload 实例到结束上传。
创建 Upload 实例:您可以通过 调用构造方法 和 TableTunnel 两种方式进行创建。
请求方式:同步。
Server 端会为该 Upload 创建一个 session, 生成唯一 UploadId 标识该 Upload,客户端可以通过 getId 获取。
上传数据:
请求方式:同步。
调用 openRecordWriter 方法,生成 RecordWriter 实例,其中参数 blockId 用于标识此次上传的数据,也描述了数据在整个表中的位置,取值范围为:[0,20000],当数据上传失败,可以根据 blockId 重新上传。
查看上传:
请求方式:同步。
调用 getStatus 可以获取当前 Upload 状态。
调用 getBlockList 可以获取成功上传的 blockid list,可以和上传的 blockid list 对比,对失败的 blockId 重新上传。
结束上传:
请求方式:同步。
调用 commit(Long[] blocks)方法,参数 blocks 列表表示已经成功上传的 block 列表,Server 端会对该列表进行验证。
该功能是加强对数据正确性的校验,如果提供的 block 列表与 Server 端存在的 block 列表不一致抛出异常。
Commit 失败可以进行重试。
7 种状态说明如下:
UNKNOWN:Server 端刚创建一个 Session 时设置的初始值。
NORMAL:创建 Upload 对象成功。
CLOSING:当调用 complete 方法(结束上传)时,服务端会先把状态置为 CLOSING。
CLOSED:完成结束上传(即把数据移动到结果表所在目录)后。
EXPIRED:上传超时。
CRITICAL:服务出错。
注意:
同一个 UploadSession 里的 blockId 不能重复。也就是说,对于同一个 UploadSession,用一个blockId 打开 RecordWriter,写入一批数据后,调用 close,然后再 commit 完成后,不可以重新再用该 blockId打开另一个 RecordWriter 写入数据。
一个 block 大小上限 100GB,建议 大于 64M 的数据。
每个 Session 在服务端的生命周期为 24 小时。
上传数据时,Writer 每写入 8KB 数据,便会触发一次网络动作,如果 120 秒内没有网络动作,服务端将主动关闭连接,届时 Writer 将不可用,请重新打开一个新的 Writer 写入。
建议使用 openBufferedWriter 接口上传数据,该接口对您屏蔽了 blockId 的细节,并且内部带有数据缓存区,会自动进行失败重试,详情请参见 TunnelBufferedWriter 的介绍和示例。
收起
行者武松
2017-10-23 15:31:00
2163
分享
版权