類別 org.apache.hadoop.fs.FSDataOutputStreamBuilder

FSDataOutputStream 及其子類別的建立器模式。用於建立新檔案或開啟 FileSystem 上現有檔案以進行寫入。

不變式

FSDataOutputStreamBuilder 介面不會驗證參數,也不會修改 FileSystem 的狀態,直到呼叫 build()

與實作無關的參數。

FSDataOutputStreamBuilder create()

指定 FSDataOutputStreamBuilder 以在 FileSystem 上建立檔案,等同於 CreateFlag#CREATE

FSDataOutputStreamBuilder append()

指定 FSDataOutputStreamBuilder 以附加到 FileSystem 上的現有檔案,等同於 CreateFlag#APPEND

FSDataOutputStreamBuilder overwrite(boolean overwrite)

指定 FSDataOutputStreamBuilder 是否覆寫現有檔案。如果提供 overwrite==true,它將截斷現有檔案,等同於 CreateFlag#OVERWITE

FSDataOutputStreamBuilder permission(FsPermission permission)

設定檔案的權限。

FSDataOutputStreamBuilder bufferSize(int bufSize)

設定要使用的緩衝區大小。

FSDataOutputStreamBuilder replication(short replica)

設定複製因子。

FSDataOutputStreamBuilder blockSize(long size)

設定區塊大小(以位元組為單位)。

FSDataOutputStreamBuilder recursive()

如果父目錄不存在,則建立父目錄。

FSDataOutputStreamBuilder progress(Progresable prog)

設定報告進度的功能。

FSDataOutputStreamBuilder checksumOpt(ChecksumOpt chksumOpt)

設定檢查和選項。

設定選用或強制參數

FSDataOutputStreamBuilder opt(String key, ...)
FSDataOutputStreamBuilder must(String key, ...)

設定選用或強制參數至建構函數。使用 opt()must(),客戶端可以指定 FS 特定的參數,而無需檢查 FileSystem 的具體類型。

// Don't
if (fs instanceof FooFileSystem) {
    FooFileSystem fs = (FooFileSystem) fs;
    out = dfs.createFile(path)
        .optionA()
        .optionB("value")
        .cache()
        .build()
} else if (fs instanceof BarFileSystem) {
    ...
}

// Do
out = fs.createFile(path)
    .permission(perm)
    .bufferSize(bufSize)
    .opt("foofs:option.a", true)
    .opt("foofs:option.b", "value")
    .opt("barfs:cache", true)
    .must("foofs:cache", true)
    .must("barfs:cache-size", 256 * 1024 * 1024)
    .build();

實作注意事項

具體的 FileSystem 和/或 FSDataOutputStreamBuilder 實作必須驗證實作不可知的參數(例如,"syncable) 或實作特定的參數(例如,"foofs:cache") 獲得支援。FileSystem將盡力滿足選用參數(透過opt(key, …))。如果FileSystem無法滿足強制參數(透過must(key, …)),則在build()` 中必須擲回 IllegalArgumentException

解決建構函數方法(例如,bufferSize())和 opt()/must() 設定的參數之間衝突的行為如下

最後指定的選項定義值及其選用/強制狀態。

HDFS 特定參數。

HdfsDataOutputStreamBuilder extends FSDataOutputStreamBuilder 提供其他 HDFS 特定參數,以進一步自訂檔案建立/附加行為。

FSDataOutpuStreamBuilder favoredNodes(InetSocketAddress[] nodes)

設定新區塊的偏好資料節點。

FSDataOutputStreamBuilder syncBlock()

強制關閉區塊至磁碟裝置。請參閱 CreateFlag#SYNC_BLOCK

FSDataOutputStreamBuilder lazyPersist()

如果可能,在暫時儲存空間建立區塊。

FSDataOutputStreamBuilder newBlock()

將資料附加至新區塊,而非最後一個部分區塊的結尾。

FSDataOutputStreamBuilder noLocalWrite()

建議不要將區塊複本寫入至本機資料節點。

FSDataOutputStreamBuilder ecPolicyName()

強制檔案成為具備刪除編碼政策「policyName」的條紋檔案,不論其父目錄的複寫或刪除編碼政策為何。

FSDataOutputStreamBuilder replicate()

強制檔案為複本檔案,無論其父目錄的複本或刪除編碼政策為何。

Builder 介面

FSDataOutputStream build()

在基礎 FileSystem 上建立新檔案或附加現有檔案,並傳回 FSDataOutputStream 以進行寫入。

先決條件

不支援下列參數組合

if APPEND|OVERWRITE: raise HadoopIllegalArgumentException
if CREATE|APPEND|OVERWRITE: raise HadoopIllegalArgumentExdeption

FileSystem 可能會因為其他原因而拒絕要求並擲回 IOException,請參閱 FileSystem#create(path, ...)FileSystem#append()

後置條件

FS' where :
   FS'.Files'[p] == []
   ancestors(p) is-subset-of FS'.Directories'

result = FSDataOutputStream

結果為 FSDataOutputStream,用於將資料寫入檔案系統。

S3A 特定選項

以下是 S3A Connector 支援的客製化選項。

名稱 類型 意義
fs.s3a.create.performance 布林值 建立效能最佳的檔案
fs.s3a.create.header 字串 使用者提供的標頭前置詞

fs.s3a.create.performance

將檔案建立效能優先於檔案系統一致性的安全檢查。

此選項:1.略過 LIST 呼叫,確保檔案建立在目錄上。風險:檔案建立在目錄上。1.忽略覆寫旗標。1.絕不會發出 DELETE 呼叫來刪除父目錄標記。

可以透過 hasPathCapability(path, "fs.s3a.create.performance") 檢查,來探測 S3A 檔案系統執行個體的此項功能。

使用此選項在現有目錄上建立檔案,可能會導致 S3A 檔案系統用戶端行為不一致。

針對目錄最佳化的操作(例如列示呼叫)可能會看到目錄樹而非檔案;針對檔案最佳化的操作(getFileStatus()isFile())則較可能會看到檔案。不一致的確切形式,以及哪些操作/參數會觸發此情況並未定義,甚至在次要版本之間也可能變更。

使用此選項等同於在後輪驅動車上按住「電子穩定控制」按鈕五秒鐘:安全檢查已關閉。如果駕駛知道自己在做什麼,事情會進行得更快。如果他們不知道,他們按住按鈕的事實將在調查中用作證據,證明他們有意識地決定選擇速度而非安全性,且後果由他們自行承擔。

因此:僅在您確信符合條件時使用。

fs.s3a.create.header 使用者提供的標頭支援

前綴為 fs.s3a.create.header. 的選項會新增至 S3 物件的元資料中,作為「使用者定義的元資料」。所有應用程式都可以看到這些元資料。也可以透過 FileSystem/FileContext listXAttrs()getXAttrs() API 呼叫,加上前綴 header. 來擷取這些元資料。

當物件重新命名時,元資料會傳播到建立的副本。

可以透過 hasPathCapability(path, "fs.s3a.create.header") 檢查,來探查 S3A 檔案系統執行個體的此功能。