本文向您介绍DownloadSession接口,此接口用于下载MaxCompute表数据。
接口定义
public class DownloadSession {
DownloadSession(Configuration conf, String projectName, String tableName,
String partitionSpec) throws TunnelException
DownloadSession(Configuration conf, String projectName, String tableName,
String partitionSpec, String downloadId) throws TunnelException
public String getId()
public long getRecordCount()
public TableSchema getSchema()
public TableTunnel.DownloadStatus getStatus()
public RecordReader openRecordReader(long start, long count)
public RecordReader openRecordReader(long start, long count, boolean compress)
}
接口说明
生命周期:从创建Download实例到下载结束。
创建Download实例:可以通过构造方法和TableTunnel创建。
请求方式:同步。
服务端(Server)会为该Download创建一个会话(Session),并生成唯一DownloadId标识该Download,客户端可以通过getId获取。
服务端(Server)会对数据文件创建索引,该操作开销较大,因此当文件多时,耗时较长。
服务端(Server)返回总Record数,可启动多个并发下载。
下载数据:
请求方式:异步。
调用openRecordReader方法生成RecordReader实例,参数start标识起始位置,从0开始,取值范围是>= 0, count标识记录数,取值范围是>0。
查看下载:
请求方式:同步。
调用getStatus获取当前Download状态。
四种状态说明如下:
UNKNOWN:Server端刚创建一个Session时设置的初始值。
NORMAL:创建Download对象成功。
CLOSED:下载结束后。
EXPIRED:下载超时。
最佳实践
合理控制RecordReader的生命周期
为了获得最佳的负载均衡效果,建议将单个RecordReader
的持续读取时间控制在合理范围内。MaxCompute内部会自动根据各个服务节点的负载为每个RecordReader
分配合适的服务节点。如果单个RecordReader
读取数据时间太长,负载均衡能力无法发挥作用,可能导致读取性能下降。推荐在RecordReader
创建一定时间(如5分钟)后将其释放并重新创建,以获得最佳性能。
该文章对您有帮助吗?