更新时间:2022-06-11 10:53:04
1. 使用 Tunnel SDK 上传数据时,上传的数据可以自动分配到各个分区吗?
Tunnel SDK 上传数据时,是无法自动分配到各个分区的。每一次上传只支持将数据上传到一张表或表的一个分区,有分区的表一定要指定上传的分区,多级分区一定要指定到末级分区。
2. 使用 Tunnel SDK 上传数据时,编写完 UDF 打成 JAR 包后上传,对 JAR 包大小有要求吗?
JAR 包不能超过 10 MB,如果 JAR 包超过 10 MB,建议转用 MaxCompute Tunnel Upload 命令上传数据。
3. 使用 Tunnel SDK 上传数据时,是否有分区数量限制?
最大支持 6 万个分区。分区数量过多,不方便进行统计和分析。MaxCompute 会限制单个作业中 In stance 的数量。作业的 Instance 和用户输入的数据量及分区数量是密切相关的,因此建议先评估下业务,选择合适的分区策略,避免分区过多带来的影响。
4. 使用 Tunnel SDK 上传数据时,报错 StatusConflict,如何解决?
5. 使用 Tunnel SDK 上传数据时,报错 Blocks Not Match,如何解决?
ErrorCode=Local Error,ErrorMessage=Blocks not match, server: 0, tunnelServiceClient: 1 at com.aliyun.odps.tunnel.TableTunnel$UploadSession.commit(TableTunnel.java:814)
6. 一次性上传 8000 万条数据,在执行 odps tunnel recordWriter.close() 时报错StatusConflict,如何解决?
7. 如何使用 TunnelBufferedWriter 规避使用 Tunnel SDK 进行批量数据上传出错的问题?
MaxCompute Java SDK 在 0.21.3-public 版本之后新增了 BufferredWriter 的 SDK,简化了数据上传,并且提供了容错功能。BufferedWriter 从用户角度看,就是在 Session 上打开一个 Writer 然后进行写记录即可。具体实现是,BufferedWriter 先将记录缓存在客户端的缓冲区中,并在缓冲区填满之后打开一个HTTP 连接进行上传。
BufferedWriter 会尽最大可能容错,保证数据上传成功,使用方法请参见BufferedWriter。
8. 使用 Tunnel SDK 下载数据时,报错 You need to specify a
partitionspec along with the specified table,如何解决?
ErrorCode=MissingPartitionSpec, ErrorMessage=You need to specify a partitionspec along with the specified table.
odps.tables().get(tablename) t.getPartitions()
9. BlockId是否可以重复?
同一个 UploadSession中的 BlockId 不能重复。对于同一个UploadSession,用一个 BlockId 打开RecordWriter,写入一批数据后,调用 Close,写入成功后不可以再用该 BlockId 打开另一个RecordWriter 写入数据。Block默认最多 20000 个,即取值范围为 0~19999。
10. Block大小是否存在限制?
每次上传至 Tunnel 的数据块大小默认为 100 MiB。一个 Block 大小上限为 100 GB,强烈建议为大于 64 MB 的数据,每一个 Block 对应一个文件,小于 64 MB 的文件统称为小文件,小文件过多将会影响使用性能。如果数量较大且是持续上传模式,Block 的数据量在 64 MB~256 MB 之间; 如果是每天传一次的批量模式,Block 可以设置为 1 GB 左右。
使用新版BufferedWriter 可以更简单地进行上传且可以避免小文件等问题,详情请参见 Tunnel-SDK-BufferedWriter。
11. 遇到读写超时或 IOException 时,如何解决?
上传数据时,Writer 每写入 8 KB 数据会触发一次网络动作,如果 120 秒内没有网络动作,服务端将主动关闭连接,届时 Writer 将不可用,请重新打开一个新的 Writer 写入。
建议您使用 Tunnel-SDK-BufferedWriter。
下载数据时,Reader 也有类似机制,若长时间没有网络动作会断开连接,建议 Reader 过程连续进行,中间不穿插其他系统的接口。