This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
ファイルシステム #
Apache Flinkはファイルシステムを使って、アプリケーションの結果と耐障害性と回復の両方の目的でデータを消費し永続的に保存します。 これらは、local、 hadoop-compatible、Amazon S3、Aliyun OSS、Azure Blob Storageなどの一般的なファイルシステムの一部です。
特定のファイルに使われるファイルシステムはURIスキームによって決まります。
例えば、file:///home/user/text.txt
はローカルファイルシステム内のファイルを指しますが、hdfs://namenode:50010/data/user/text.txt
は特定のHDFSクラスタ内のファイルです。
ファイルシステムインスタンスはプロセスごとに1回インスタンス化され、その後キャッシュ/プールされることで、ストリーム作成ごとの設定オーバーヘッドを回避し、接続/ストリーム制限などの特定の制約を強制します。
ローカルファイルシステム #
Flinkには、ローカルファイルシステムにマウントされたNFSまたはSANドライブを含む、ローカルマシーンのファイルシステムのサポートが組み込まれています。 追加の設定をしなくても、デフォルトで使えます。ローカルシステムはfile:// URIスキームを使って参照されます。
プラガブルファイルシステム #
Apache Flinkプロジェクトは、次のファイルシステムをサポートします:
-
Amazon S3オブジェクトストレージは、2つの代替実装でサポートされます:
flink-s3-fs-presto
とflink-s3-fs-hadoop
。 どちらの実装も自己完結型であり、依存関係のフットプリントはありません。 -
**Aliyunオブジェクトストレージサービス**は
flink-oss-fs-hadoop
でサポートされ、oss:// URIスキーマで登録されています。 この実装はHadoopプロジェクトに基づいていますが、依存関係のフットプリントがなく自己完結型です。 -
**Azure Data Lake Store Gen2**は
flink-azure-fs-hadoop
でサポートされ、abfs(s):// URIスキームで登録されています。 この実装はHadoopプロジェクトに基づいていますが、依存関係のフットプリントがなく自己完結型です。 -
**Azure Blob Storage**は
flink-azure-fs-hadoop
でサポートされ、wasb(s):// URIスキームで登録されます。 この実装はHadoopプロジェクトに基づいていますが、依存関係のフットプリントがなく自己完結型です。 -
**Google Cloud Storage**は
gcs-connector
でサポートされ、gs:// URIスキームで登録されます。 この実装はHadoopプロジェクトに基づいていますが、依存関係のフットプリントがなく自己完結型です。
それらのいずれもプラグインとして使えますし、使う必要があります。
プラグ可能なファイルシステムを使うには、Flinkを起動する前に、対応するJARファイルをopt
ディレクトリからFlink配布物のplugins
ディレクトリの下のディレクトリにコピーします。
mkdir ./plugins/s3-fs-hadoop
cp ./opt/flink-s3-fs-hadoop-1.19-SNAPSHOT.jar ./plugins/s3-fs-hadoop/
注意 ファイルシステムのプラグインの仕組みは、プラグイン事に専用のクラスローダーをサポートし、クラスシェーディングの仕組みから以降するために、Flinkバージョン1.9
で導入されました。
対応するJARファイルをlib
ディレクトリをコピーして古い仕組みを介して提供されたファイルシステム(または独自の実装)を引き続き使えます。ただし、1.10以降、s3プラグインはプラグインの仕組みを通じてロードする必要がありっます; これらのプラグインがシェーディングされなくなったため、古い方法は機能しなくなりました(より具体的に言うと、1.10以降クラスは再配置されません)。
それをサポートするファイルシステムでは、プラグインベースの読み込みの仕組みを使うことをお勧めします。lib
ディレクトリからのファイルシステムコンポーネントのロードは、将来のバージョンではサポートされなくなります。
新しいプラグイン可能なファイルシステムの実装 #
ファイルシステムはorg.apache.flink.core.fs.FileSystem
クラスによって表され、そのファイルシステム内のファイルとオブジェクトにアクセスして変更する方法をキャプチャします。
新しいファイルシステムを追加するには:
org.apache.flink.core.fs.FileSystem
のサブクラスであるファイルシステムの実装を追加します。- そのファイルシステムをインスタンス化し、ファイルシステムが登録されるスキームを宣言するファクトリを追加します。これは、
org.apache.flink.core.fs.FileSystemFactory
のサブクラスである必要があります。 - サービスエントリを追加します。ファイルシステムファクトリクラスのクラス名を含む
META-INF/services/org.apache.flink.core.fs.FileSystemFactory
を作成します(詳細はJava Service Loader docsを参照してください)。
プラグインの検出中に、他のプラグインやFlinkコンポーネントとのクラスの競合を避けるために、ファイルシステムファクトリクラスが専用のJavaクラスローダによってロードされます。 ファイルシステムのインスタンス化とファイルシステムのオペレーション呼び出しの際には、同じクラスローダを使う必要があります。
実際には、実装でThread.currentThread().getContextClassLoader()
クラスローダの使用を避ける必要がることを意味します。
Hadoop File System (HDFS)とその他の実装 #
Flinkが直接サポートされているファイルシステムを見つけることができない全てのスキームでは、Hadoopにフォールバックします。
flink-runtime
とHadoopライブラリがクラスパスにある場合、全てのHadoopファイルシステムが自動的に使用可能になります。
このように、Flinkは、org.apache.hadoop.fs.FileSystem
インタフェースを実装する全てのHadoopファイルシステムと、全てのHadoop互換ファイルシステム(HCFS)をシームレスにサポートします。
Hadoop設定には、core-site.xml
ファイルに必要なファイルシステム実装のエントリが必要です。
**Alluxio**の例を参照してください。
別途必要な場合を除き、Flinkの組み込みファイルシステムを使うことをお勧めします。例えば、HadoopファイルシステムをYARNのリソースストレージに使う場合、Hadoopのcore-site.xml
のfs.defaultFS
設定プロパティを介して、Hadoopファイルシステムを使うことが必要になる場合があります。
Alluxio #
Alluxioをサポートするために、次のエントリをcore-site.xml
ファイルに追加します:
<property>
<name>fs.alluxio.impl</name>
<value>alluxio.hadoop.FileSystem</value>
</property>