全部產品
Search
文件中心

MaxCompute:TunnelBufferedWriter

更新時間:Feb 28, 2024

本文向您介紹TunnelBufferedWriter介面,此介面用於上傳資料。

一次完整的上傳流程通常包括以下步驟:
  1. 先對資料進行劃分。
  2. 為每個資料區塊指定block Id,即調用openRecordWriter(id)
  3. 用一個或多個線程分別將這些block上傳上去,並在某個block上傳失敗以後,需要對整個block進行重傳。
  4. 在所有block都上傳以後,向服務端提供上傳成功的blockid list進行校正,即調用session.commit([1,2,3,…])

    由於服務端對block管理、連線逾時等一些限制,上傳過程邏輯變得比較複雜,為了簡化上傳過程,SDK提供了更進階的一種RecordWriter—TunnelBufferedWriter。

TunnelBufferedWriter介面定義

public class TunnelBufferedWriter implements RecordWriter {
    public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option) throws IOException;
    public long getTotalBytes();
    public void setBufferSize(long bufferSize);
    public void setRetryStrategy(RetryStrategy strategy);
    public void write(Record r) throws IOException;
    public void close() throws IOException;
}

TunnelBufferedWriter介面說明

  • 生命週期:從建立RecordWriter到資料上傳結束。
  • 建立TunnelBufferedWriter執行個體:通過調用UploadSession的openBufferedWriter介面建立。
  • 資料上傳:調用Write介面,資料會先寫入本機快取區,緩衝區滿後會批量提交到服務端,這樣可以避免連線逾時。此外,如果資料上傳失敗,則會自動進行重試。
  • 結束上傳:調用close介面,最後再調用UploadSession的commit介面,即可完成上傳。
  • 緩衝區控制:可以通過setBufferSize介面修改緩衝區占記憶體的位元組數(bytes),建議設定大於等於64MB,避免服務端產生過多小檔案,影響效能。最小可設定為1MB,最大1000MB,通常無需設定,維持預設值64MB即可。
  • 重試原則設定:您可以選擇三種重試迴避策略,指數迴避(EXPONENTIAL_BACKOFF)、線性時間迴避(LINEAR_BACKOFF)、常數時間迴避(CONSTANT_BACKOFF)。例如,下面這段代碼可以將Write的重試次數調整為6,每一次重試之前先分別迴避4s、8s、16s、32s、64s和128s(預設設定為從4開始的指數遞增的序列),通常不建議調整此迴避設定。
    RetryStrategy retry 
      = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF)
    writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter();
    writer.setRetryStrategy(retry);