Advanced Configuration
This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.

高度な設定のトピック #

Flink配布の構造 #

Flink自体は、Flinkのランタイムの中核を形成するクラスと依存関係のセットで構成され、Flinkアプリケーションの起動時に存在する必要があります。システムの実行に必要なクラスと依存関係は、調整、ネットワーキング、チェックポイント、フェイルオーバー、API、オペレータ(ウィンドウ処理など)、リソース管理などの領域を処理します。

これらのコアクラスと依存会計はflink-dist.jarにパッケージ化されています。これは、ダウンロードしたディストリビューションの/libフォルダで入手でき、基本的なFlinkコンテナイメージの一部です。 これらの依存関係は、StringListなどのクラスを含む、Javaコアライブラリに似ていると考えることができます。

コアの依存関係を可能な限り小さく保ち、依存関係の衝突を避けるため、クラスパス内のクラスと依存関係のデフォルト数が過剰になるのを避けるために、Flinkコアの依存関係にはコネクタやライブラリ(つまり、CEP、SQL、ML)が含まれていません。

Flinkディストリビューションの/libディレクトリには、Tableジョブを実行するためのモジュールで必要とされる全てとコネクタとフォーマットのセットなど、一般的に使われるモジュールを含む様々なJARがさらに含まれています。 それらはデフォルトでロードされ、/libフォルダから削除するだけでクラスパスから削除することができます。

Flinkは、/optフォルダの下に追加のオプションの依存関係も同梱しています。これらはJARを/libフォルダに移動することで有効にできます。

クラスローディングの詳細については、Flinkでのクラスローディングのセクションを参照してください。

Scalaのバージョン #

Scalaの異なるバージョンには、相互にバイナリ互換性がありません。Scalaに(他動的に)依存する全てのFlink依存関係は、そのビルド対象のScalaバージョンが接尾辞として付けられています(つまり、flink-streaming-scala_2.12)。

FlinkのJava APIだけを使っている場合は、どのScalaバージョンも使えます。FlinkのScala APIを使っている場合は、アプリケーションのScalaバージョンに一致するScalaバージョンを選択する必要があります。

特定のScalaバージョン用のFlinkをビルドする方法についての詳細は、ビルドガイドを参照してください。

2.12.8以降のScalaバージョンは、以前の2.12.xバージョンとバイナリ互換性がありません。これにより、Flinkプロジェクトが2.12.xビルドを2.12.8以降にアップグレードできなくなります。ビルドガイドに従って、新しいScalaバージョンのFlinkをローカルでビルドすることができます。 これを機能させるためには、ビルド中にバイナリ互換性のチェックをスキップするために-Djapicmp.skipを追加する必要があります。

詳細は、Scala 2.12.8リリースノートを参照してください。 関連するセクションには次のように記載されています:

The second fix is not binary compatible: the 2.12.8 compiler omits certain methods that are generated by earlier 2.12 compilers. However, we believe that these methods are never used and existing compiled code will continue to work. See the pull request description for more details.

テーブルの依存関係の構造 #

Flinkディストリビューションには、Flink SQLジョブを実行するために必要なJAR(/libフォルダにあります)をデフォルトで含みます。特に: in particular:

  • flink-table-api-java-uber-1.19-SNAPSHOT.jar → 全てのJAR APIが含まれます
  • flink-table-runtime-1.19-SNAPSHOT.jar → テーブルランタイムが含まれます
  • flink-table-planner-loader-1.19-SNAPSHOT.jar → クエリプランナが含まれます
以前は、これらのJARは全てflink-table.jarにパッケージ化されていました。。Flink 1.15以降、ユーザflink-table-planner-loader-1.19-SNAPSHOT.jarflink-table-planner_2.12-1.19-SNAPSHOT.jarを交換できるように3つのJARに分割されました。

Table Java APIアーティファクトはディストリビューションに組み込まれていますが、Table Scala APIアーティファクトはデフォルトでは含まれていません。Flink Scala APIでフォーマットとコネクタを使う場合は、それらのJARを手動でダウンロードして/libフォルダに含める(推奨)か、Flink SQLジョブのuber/fat JARの依存関係としてパッケージ化する必要があります。

詳細は、外部システムに接続する方法を確認してください。

Table PlannerとTable Planner Loader #

Flink 1.15以降、配布物には次の2つのプランナが含まれます:

  • /opt内のflink-table-planner_2.12-1.19-SNAPSHOT.jarには、クエリプランナが含まれます
  • flink-table-planner-loader-1.19-SNAPSHOT.jarはデフォルトで/libにロードされ、分離されたクラスパス(io.apache.flink.table.plannerに直接アドレスを指定することはできません)の背後に隠されたクエリプランナが含まれています。

この2つのプランナのJARには同じコードが含まれていますが、別々にパッケージ化されています。最初のケースでは、同じScalaバージョンのJARを使う必要があります。 same Scala version of the JAR. 2番目のケースでは、ScalaはJAR内に隠されているため、Scalaについて考慮する必要はありません。

デフォルトでは、flink-table-planner-loaderはディストリビューションによって使われます。クエリプランナの内部にアクセスして使う必要がある場合は、(配布物の/libフォルダ内のflink-table-planner_2.12.jarをコピー&ペーストして)JARを交換できます。 使用しているFlinkディストリビューションのScalaバージョンの使用に制限されることに注意してください。

2つのプランナはクラスパス内で同時に共存できません。両方を/libにロードすると、Table Jobsが失敗します。
今後のFlinkバージョンでは、Flinkディストリビューションのflink-table-planner_2.12アーティファクトの同梱を停止します。 プライなの内部に依存せずに、ジョブとカスタムコネクタ/フォーマットを移行して、APIモジュールで動作することを強くお勧めします。 現在APIモジュールを通じて公開されていないプランナの機能が必要な場合は、チケットを開いて、コミュニティと話し合ってください。

Hadoop依存関係 #

一般規則: アプリケーションに直接Hadoop依存関係を追加する必要はありません。 HadoopでFlinkを使う場合は、アプリケーションの依存関係としてHadoopを追加するのではなく、Hadoopの依存関係を含むFlinkセットアップが必要です。言い換えると、Hadoopはアプリケーションを含むユーザコードではなくFlinkシステム自体の依存関係である必要があります。FlinkはHADOOP_CLASSPATH環境変数で指定されるHadoop依存関係を使い、次のように設定されます:

export HADOOP_CLASSPATH=`hadoop classpath`

この設計には主に2つの理由があります:

  • Flinkコアの一部のHadoopのやり取りは、おそらくユーザアプリケーションが開始される前に発生します。 これには、チェックポイント用のHDFSのセットアップ、Hadoopのkerberosトークンを介した認証、またはYARNでのデプロイが含まれます。。

  • Flinkの逆クラスローディングの方法は、多くの推移的な依存関係をコアの依存関係から隠します。 これは、Fliink自体のコアの依存関係だけではなく、セットアップに存在するHadoopの依存関係にも当てはまります。このようにすることで、アプリケーションは依存関係の競合が発生することなく、同じ依存関係の異なるバージョンを使うことができます。これは、依存関係のツリーが非常に大きくなる場合に非常に便利です。

IDE内での開発またはテスト(HDFSアクセスなど)中に、Hadoopの依存関係が必要な場合は、これらの依存関係を依存関係の範囲と同様に設定する必要があります(つまり、test またはprovidedまで)。

inserted by FC2 system