org.apache.hadoop.fs.FSDataOutputStreamBuilder
FSDataOutputStream
とそのサブクラスのビルダーパターン。これは、FileSystem
上の新しいファイルを作成するか、既存のファイルを開いて書き込みを行うために使用されます。
FSDataOutputStreamBuilder
インターフェースは、build()
が呼び出されるまで、パラメーターを検証したり、FileSystem
の状態を変更したりしません。
FSDataOutputStreamBuilder create()
FileSystem
にファイルを作成するFSDataOutputStreamBuilder
を指定します。CreateFlag#CREATE
と同等です。
FSDataOutputStreamBuilder append()
FileSystem
上の既存のファイルに追加するFSDataOutputStreamBuilder
を指定します。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()
を使用すると、クライアントはFileSystem
の具体的な型を検査せずに、FS固有のパラメーターを指定できます。
// 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
の実装は、実装に依存しないパラメーター (つまり、「同期可能」) または実装固有のパラメーター (つまり、「foofs:cache」) がサポートされていることを検証する必要があります。FileSystem
は、オプションのパラメーター (opt(key, …)
を使用) をベストエフォートで満たします。必須のパラメーター (must(key, …)
を使用) がFileSystem
で満たせない場合は、build()
でIllegalArgumentException
がスローされる必要があります。
ビルダーメソッド (つまり、bufferSize()
) およびopt()
/must()
によって設定されたパラメーター間の競合を解決する動作は次のとおりです。
最後に指定されたオプションが、値とそのオプション/必須の状態を定義します。
HdfsDataOutputStreamBuilder extends FSDataOutputStreamBuilder
は、ファイルの作成/追加の動作をさらにカスタマイズするためのHDFS固有の追加パラメーターを提供します。
FSDataOutpuStreamBuilder favoredNodes(InetSocketAddress[] nodes)
新しいブロックに推奨されるDataNodeを設定します。
FSDataOutputStreamBuilder syncBlock()
クローズされたブロックをディスクデバイスに強制的に書き込みます。CreateFlag#SYNC_BLOCK
を参照してください。
FSDataOutputStreamBuilder lazyPersist()
可能な場合は、一時ストレージにブロックを作成します。
FSDataOutputStreamBuilder newBlock()
最後の部分ブロックの最後ではなく、新しいブロックにデータを追加します。
FSDataOutputStreamBuilder noLocalWrite()
ブロックレプリカがローカルDataNodeに書き込まれないように指示します。
FSDataOutputStreamBuilder ecPolicyName()
親ディレクトリのレプリケーションポリシーまたはイレイジャーコーディングポリシーに関係なく、ファイルがイレイジャーコーディングポリシー「policyName」のストライプファイルになるように強制します。
FSDataOutputStreamBuilder replicate()
親ディレクトリのレプリケーションポリシーまたはイレイジャーコーディングポリシーに関係なく、ファイルが複製ファイルになるように強制します。
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コネクターがサポートするカスタムオプションを次に示します。
名前 | タイプ | 意味 |
---|---|---|
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()
) は、ファイルを表示する可能性が高くなります。矛盾の正確な形式と、どの操作/パラメーターがこれをトリガーするかは定義されておらず、マイナーリリース間でも変更される可能性があります。
このオプションを使用することは、後輪駆動車で「横滑り防止装置」ボタンを5秒間長押しするのと同等です。つまり、安全チェックが無効になります。ドライバーが操作を理解していれば、より速く走行できます。理解していなかった場合、ボタンを長押ししたという事実は、スピードを安全よりも優先するという意識的な決定を下したこと、そして結果は自己責任であるという証拠として検視で用いられるでしょう。
したがって、条件が満たされていると確信できる場合にのみ使用してください。
fs.s3a.create.header
ユーザー指定ヘッダーのサポートfs.s3a.create.header.
のプレフィックスを持つオプションは、「ユーザー定義メタデータ」としてS3オブジェクトのメタデータに追加されます。このメタデータはすべてのアプリケーションから参照できます。また、FileSystem/FileContextのlistXAttrs()
およびgetXAttrs()
API呼び出しで、プレフィックスheader.
を指定して取得することもできます。
オブジェクトの名前が変更されると、メタデータは作成されたコピーに伝播されます。
S3Aファイルシステムのインスタンスがこの機能を持っているかどうかは、hasPathCapability(path, "fs.s3a.create.header")
チェックを通じて確認できます。