本文為您介紹UploadSession介面,此介面用於上傳資料到表中。
UploadSession介面定義
UploadSession介面定義如下。
public class UploadSession {
UploadSession(Configuration conf, String projectName, String tableName,
String partitionSpec) throws TunnelException;
UploadSession(Configuration conf, String projectName, String tableName,
String partitionSpec, String uploadId) throws TunnelException;
public void commit(Long[] blocks);
public Long[] getBlockList();
public String getId();
public TableSchema getSchema();
public UploadSession.Status getStatus();
public Record newRecord();
public RecordWriter openRecordWriter(long blockId);
public RecordWriter openRecordWriter(long blockId, boolean compress);
public RecordWriter openBufferedWriter();
public RecordWriter openBufferedWriter(boolean compress);
}
UploadSession介面說明
- 生命週期:從建立Upload執行個體到結束上傳。
- 建立Upload執行個體:您可以通過調用構造方法和TableTunnel兩種方式進行建立。
- 請求方式:同步。
- Server端會為該Upload建立一個Session, 產生唯一UploadId標識該Upload,用戶端可以通過getId擷取。
- 上傳資料:
- 請求方式:同步。
- 調用openRecordWriter方法,產生RecordWriter執行個體,其中參數blockId用於標識此次上傳的資料,也描述了資料在整個表中的位置,取值範圍為[0,20000],當資料上傳失敗,可以根據blockId重新上傳。
- 查看上傳:
- 請求方式:同步。
- 調用getStatus可以擷取當前Upload狀態。
- 調用getBlockList可以擷取成功上傳的blockid list,可以和上傳的blockid list對比,對失敗的blockId重新上傳。
- 結束上傳:
- 請求方式:同步。
- 調用commit(Long[] blocks)方法,參數blocks列表表示已經成功上傳的block列表,Server端會對該列表進行驗證。
- 該功能是加強對資料正確性的校正,如果提供的block列表與Server端存在的block列表不一致拋出異常。
- Commit失敗可以進行重試。
- 六種狀態說明:
- UNKNOWN:Server端剛建立一個Session時設定的初始值。
- NORMAL:建立Upload對象成功。
- CLOSING:當調用complete方法(結束上傳)時,服務端會先把狀態置為CLOSING。
- CLOSED:完成結束上傳(即把資料移動到結果表所在目錄)後。
- EXPIRED:上傳逾時。
- CRITICAL:服務出錯。
說明
- 同一個Upload中Session的blockId不能重複。對於同一個UploadSession,用一個blockId開啟RecordWriter,寫入一批資料後,調用close、Commit完成後,不可以再用該blockId開啟另一個RecordWriter寫入資料。
- 一個Block大小上限100GB,建議大於64M的資料。
- 每個Session在服務端的生命週期為24小時。
- 上傳資料時,Writer每寫入8KB資料,便會觸發一次網路動作,如果120秒內沒有網路動作,服務端將主動關閉串連,此時Writer將不可用,請重新開啟一個新的Writer寫入。
- 建議使用openBufferedWriter介面上傳資料,該介面對您屏蔽了blockId的細節,並且內部帶有資料緩衝區,會自動進行失敗重試,詳情請參見BufferedWriter上傳樣本。