全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
MaxCompute

UploadSession

更新时间:2017-09-27 23:03:18

接口定义如下:

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

本文导读目录