本文向您介紹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分鐘)後將其釋放並重新建立,以獲得最佳效能。