全部产品
云市场

MaxCompute之Tunnel上传/下载相关问题

更新时间:2018-08-15 17:57:45

Q:什么是 MaxCompute Tunnel?

A:MaxCompute Tunnel 是 MaxCompute 的数据通道,您可以通过 Tunnel 向 MaxCompute 中上传或者下载数据。目前 Tunnel 仅支持表(不包括视图 View)数据的上传下载。

Q:BlockId 是否可以重复?

A:同一个 UploadSession 中的 BlockId 不能重复。也就是说,对于同一个 UploadSession,用一个 BlockId 打开 RecordWriter,写入一批数据后,调用 close,然后再 commit 完成后,写入成功后不可以重新再用该 BlockId 打开另一个 RecordWriter 写入数据。 Block 默认最多 20000 个,即 0-19999。

Q:Block 大小是否存在限制?

A:一个 Block 大小上限为 100GB,强烈建议大于 64M 的数据,每一个 Block 对应一个文件,小于 64MB 的文件统称为小文件,小文件过多将会影响使用性能。

使用新版 BufferedWriter 可以更简单的进行上传功能避免小文件等问题,详情请参见 Tunnel-SDK-BufferedWriter

Q:Session 是否可以共享使用,是否存在生命周期?

A:每个 Session 在服务端的生命周期为 24 小时,创建后 24 小时内均可使用,也可以跨进程/线程共享使用,但是必须保证同一个 BlockId 没有重复使用,分布式上传的操作步骤如下:

  1. 创建 Session。

  2. 估算数据量。

  3. 分配 Block(例如线程1使用 0-100,线程 2 使用 100-200)。

  4. 准备数据。

  5. 上传数据。

  6. Commit 所有写入成功的 Block。

Q:遇到 Write/Read 超时或 IOException 时,该怎么处理?

A:上传数据时,Writer 每写入 8KB 数据会触发一次网络动作,如果 120 秒内没有网络动作,服务端将主动关闭连接,届时 Writer 将不可用,请重新打开一个新的 Writer 写入。

建议使用 Tunnel-SDK-BufferedWriter 接口上传数据,该接口对用户屏蔽了 BlockId 的细节,并且内部带有数据缓存区,会自动进行失败重试。

下载数据时,Reader 也有类似机制,若长时间没有网络 IO 会被断开连接,建议 Reader 过程连续进行,中间不穿插其他系统的接口。

Q:MaxCompute Tunnel 目前有哪些语言的 SDK?

A:MaxCompute Tunnel 目前有 Java 及 C++ 版的 SDK。

Q:MaxCompute Tunnel 是否支持多个客户端同时上传同一张表?

A:支持。

Q:MaxCompute Tunnel 适合批量上传还是流式上传?

A:MaxCompute Tunnel 用于批量上传,不适合流式上传,流式上传可以使用 DataHub 高速流式数据通道,毫秒级延时写入。

Q:MaxCompute Tunnel 上传数据时一定要先存在分区吗?

A:是的,Tunnel 不会自动创建分区。

Q:Dship 与 MaxCompute Tunnel 的关系?

A:Dship 是一个工具,通过 MaxCompute Tunnel 来进行上传和下载。

Q:Tunnel upload 数据的行为是追加还是覆盖?

A:追加的模式。

Q:Tunnel 路由功能是怎么回事?

A:路由功能指的是 Tunnel SDK 通过设置 MaxCompute 获取 Tunnel Endpoint 的功能。因此,SDK 可以只设置 MaxCompute 的 endpoint 来正常工作。

Q:用 MaxCompute Tunnel 上传数据时,一个 Block 的数据量大小多大比较合适?

A:没有一个绝对最优的答案,要综合考虑网络情况,实时性要求,数据如何使用以及集群小文件等因素。一般情况下,如果数量较大是持续上传的模式,可以在 64M - 256M, 如果是每天传一次的批量模式,可以设大一些到 1G 左右。

Q:使用 MaxCompute Tunnel 下载, 总是提示 timeout?

A:一般是 Endpoint 错误,请检查 Endpoint 配置,简单的判断方法是通过 telnet 等方法检测网络连通性。

Q:通过 MaxCompute Tunnel 下载,抛出 You have NO privilege ‘odps:Select‘ on {acs:odps:*:projects/XXX/tables/XXX}. project ‘XXX‘ is protected 的异常 ?

A:该 project 开启了数据保护功能,如果您需要把一个项目中的数据导向另一个项目,这需要该 project 的 owner 进行操作。

Q:Tunnel 上传抛出异常 ErrorCode=FlowExceeded, ErrorMessage=Your flow quota is exceeded?

A:Tunnel 对请求的并发进行了控制,默认上传和下载的并发 Quota 为 2000,任何相关的请求发出到结束过程中均会占用一个 Quota 单位 。若出现类似错误,有如下几种建议的解决方案:

  • sleep 一下再重试。

  • 将 Project 的 Tunnel 并发 quota 调大,需要联系管理员评估流量压力。

  • 报告 Project owner 调查谁占用了大量并发 quota,控制一下。

Q:Tunnel 上传时每个 Session 的生命周期是一天,因源表数据太大,导致 Session 超时任务失败?

A:建议把源表拆分成 2 个任务分开跑。

Q:Tunnel 上传是否支持通配符或正则表达式?

A:使用Tunnel命令行工具上传数据当前不支持通配符或正则表达式 。