TableTunnel是访问MaxCompute Tunnel服务的入口类,仅支持表数据(非视图)的上传和下载。
TableTunnel接口定义及说明
TableTunnel接口定义如下,详情请参见Java-sdk-doc。
public class TableTunnel {
public DownloadSession createDownloadSession(String projectName, String tableName);
public DownloadSession createDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec);
public UploadSession createUploadSession(String projectName, String tableName);
public UploadSession createUploadSession(String projectName, String tableName, PartitionSpec partitionSpec);
public DownloadSession getDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
public DownloadSession getDownloadSession(String projectName, String tableName, String id);
public UploadSession getUploadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
public UploadSession getUploadSession(String projectName, String tableName, String id);
}
接口说明如下:
TableTunnel接口实现流程
RecordWriter.write()
将数据上传到临时目录的文件。RecordWriter.close()
将相应的文件从临时目录挪移到Data目录。session.commit()
将相应Data目录下的所有文件挪移到相应表所在目录,并更新表Meta,即数据进表,对其它MaxCompute任务(例如SQL、MR)可见。
TableTunnel接口限制
- Block ID的取值范围是[0, 20000),单个Block上传的数据限制为100G。
- Session用Session ID来标识。Session的超时时间为24小时。如果大批量数据传送导致超过24小时,需要自行拆分成多个Session。
- RecordWriter对应的HTTP Request超时为120s。如果120s内HTTP连接上没有数据流过,Service端会主动关闭连接。
说明 HTTP本身还有8k Buffer,因此并不是每次调用RecordWriter.write()
都能保证HTTP连接上有数据流过。TunnelRecordWriter.flush()
可以将Buffer内数据强制刷出。 - 对于日志类写入MaxCompute的场景,无法预测数据的到达会造成RecordWriter超时。此时:
- 不建议对每条数据打开一个RecordWriter(因为每个RecordWriter对应一个文件,会造成小文件过多,严重影响MaxCompute后续使用性能)。
- 建议用户代码Cache至少64M的数据后,再使用一个RecordWriter进行一次性批量写入。
- RecordReader的超时为300s。
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33652.html