全部产品
MaxCompute

UploadSession

更新时间:2017-06-07 13:26:11   分享:   

接口定义:

  1. public class UploadSession {
  2. UploadSession(Configuration conf, String projectName, String tableName,
  3. String partitionSpec) throws TunnelException;
  4. UploadSession(Configuration conf, String projectName, String tableName,
  5. String partitionSpec, String uploadId) throws TunnelException;
  6. public void commit(Long[] blocks);
  7. public Long[] getBlockList();
  8. public String getId();
  9. public TableSchema getSchema();
  10. public UploadSession.Status getStatus();
  11. public Record newRecord();
  12. public RecordWriter openRecordWriter(long blockId);
  13. public RecordWriter openRecordWriter(long blockId, boolean compress);
  14. public RecordWriter openBufferedWriter();
  15. public RecordWriter openBufferedWriter(boolean compress);
  16. }

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的介绍和示例。

本文导读目录
本文导读目录
以上内容是否对您有帮助?