目次
Flink は、JAR ファイルとしてパッケージ化されたプログラムを実行し、その実行を制御するためのコマンドライン インターフェイス (CLI) bin/Flink を提供します。CLI は Flink セットアップの一部であり、ローカルの単一ノード セットアップと分散セットアップの両方で使用できます。conf/flink-conf.yaml で指定された実行中の JobManager に接続します。
CLIリスト
操作する | 使用 |
糸セッション.sh | yarn-session.shを使用して常駐Flinkクラスターを起動し、クライアントから送信されたタスクを受け入れます。 |
走る | Flinkジョブを送信する: ジョブは常駐のFlinkクラスターに送信することも、スタンドアロン モードで実行することもできます。 |
アプリケーションの実行 | アプリケーションモードでジョブを実行します。 |
情報 | 印刷ジョブの実行グラフが最適化されました。ここでも、ジョブのjar を渡す必要があります。 |
リスト | すべてのジョブをリストします ( JobIDを含む) |
セーブポイント | 特定のジョブのセーブポイントを作成または処理するために使用されます。state.savepoints.dirパラメーターがconf/flink-conf.yamlで指定されていない場合は、 JobID の外部にセーブポイント ディレクトリを指定する必要がある場合があります。 |
キャンセル | ジョブをキャンセルする |
停止 | ジョブの停止 (ストリーミング ジョブのみ) |
ジョブのライフサイクル管理
Flink CLIを使用するための前提条件は、 Kubernetes 、YARN 、またはその他の利用可能なオプションにデプロイされた実行中のFlinkクラスターがあることです。Flinkクラスターをローカルで起動し、自分のマシンでコマンドを試すことができます。
ジョブを送信する
ジョブの送信とは、ジョブのJARおよび関連する依存関係をFlinkクラスターにアップロードし、ジョブの実行を開始することを意味します。たとえば、 examples/streaming/StateMachineExample.jarなどの長時間実行ジョブを選択しました。example/フォルダーから他のjarファイルを選択して、独自のジョブをデプロイできます。
$ ./bin/flink run \
--detached \
./examples/streaming/StateMachineExample.jar
--detachedを指定してジョブを送信すると、コミットの完了後にコマンドが返され、出力には新しく送信されたジョブのID が含まれます。
ジョブは JobID cca7bc1061d61cf15238e92312c2fc2 0で送信されました。
印刷された使用法情報には、ジョブ関連のパラメーターがリストされており、必要に応じてジョブ送信コマンドの最後に追加できます。
アプリケーション モードでジョブを実行するために使用できるrun-applicationコマンドもあります。これはrunと同様に機能します。
runおよびrun-applicationコマンドは、 -Dを介した追加の構成パラメーターの受け入れをサポートしています。たとえば、ジョブの並列処理の最大度は、-Dpipeline.maxParallelism=120を設定することで設定できます。このパラメーターは、構成ファイルを変更せずにクラスターに構成パラメーターを渡すことができるため、ジョブごとまたはアプリケーションモードで役立ちます。
セッションモードでジョブを送信する場合、構成パラメーターのみがサポートされます。
ジョブの検出
次のコマンドを使用して、実行中のジョブを検出できます。
$ ./bin/flink list
送信されたが実行されていないすべてのジョブは、「スケジュールされたジョブ」の下にリストされます。
セーブポイントの作成
ジョブの現在の状態を保存するためにセーブポイントを作成できます。JobIDだけ:
$ ./bin/flink savepoint \
$JOB_ID \
/tmp/flink-savepoints
セーブポイント フォルダーはオプションであり、state.savepoints.dir が設定されていない場合は指定する必要があります。
セーブポイントへのパスは、後でFlinkジョブを再開するために使用できます。
セーブポイントを削除する
セーブポイントを削除するには、--disposeコマンドを、対応するセーブポイント パスとともに追加する必要があります。
$ ./bin/flink savepoint \
--dispose \
/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
$JOB_ID
カスタム状態インスタンス (カスタム削減 状態やRocksDB状態など) を使用する場合は、セーブポイントのトリガーに使用されるプログラムJARへのパスを指定する必要があります。そうしないと、 ClassNotFoundException が発生します。
$ ./bin/flink savepoint \
--dispose <savepointPath> \
--jarfile <jarFile>
Savepoint操作を介してSavepoint処理をトリガーすると、ストレージからデータが削除されるだけでなく、FlinkによってSavepointに関連付けられたメタデータがクリーンアップされます。
ジョブを終了する
ジョブを正常に停止して最終セーブポイントを作成します
これは、実行中のストリーミング ジョブ、つまりソースからシンクへのフローを終了する、より適切な方法です。ユーザーがジョブの停止を要求すると、すべてのソースは最後のチェックポイント バリアの送信を要求され、それによってチェックポイントがトリガーされ、チェックポイントが正常に完了した後、 cancel () を呼び出してジョブの終了が完了します。
$ ./bin/flink stop \
--savepointPath /tmp/flink-savepoints \
$JOB_ID
ジョブ「cca7bc1061d61cf15238e92312c2fc20」をセーブポイントで一時停止しています。
セーブポイントが完了しました。パス: ファイル:/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab
state.savepoints.dirが設定されていない場合は、 --savepointPathでセーブポイント フォルダーを指定する必要があります。
--drainフラグが指定されている場合、 MAX_WATERMARK は最後のチェックポイント バリアの前に出力されます。これにより、登録されているすべてのイベント時間タイマーがトリガーされ、ウィンドウなどの特定のウォーターマークを待機している状態がクリアされます。ジョブは、すべてのソースが適切にシャットダウンされるまで実行されます。これにより、ジョブはすべての実行中のデータの処理を完了できるため、ジョブを停止したときにセーブポイント以降のデータを処理できるようになります。
ジョブを永久に終了したい場合は、--drainフラグを使用します。後でジョブを再開する場合は、誤った結果が生じる可能性があるため、--drain を使用しないでください。
ジョブをキャンセルする
ジョブのキャンセルは、cancel 操作で実行できます。
$ ./bin/flink cancel $JOB_ID
ジョブ cca7bc1061d61cf15238e92312c2fc20 をキャンセルしています。
ジョブ cca7bc1061d61cf15238e92312c2fc20 がキャンセルされました。
該当するジョブのステータスが「実行中」から「キャンセル」に遷移します。あらゆる計算が停止します。
セーブポイントからジョブを開始する
ジョブは、run (およびrun-application ) アクションを使用してセーブポイントから開始できます。
$ ./bin/flink run \
--detached \
--fromSavepoint /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
./examples/streaming/StateMachineExample.jar
このコマンドは、 --fromSavepoint パラメーターを除いて最初の実行コマンドと同じであるように見えます。 --fromSavepoint パラメーターは、以前に停止したジョブのステータスを参照するために使用され、メンテナンス ジョブに使用できる新しいジョブ ID を生成します。
デフォルトでは、セーブポイントの状態全体を送信中のジョブと一致させようとします。復元できないセーブポイント状態のスキップを許可したい場合は、 --allowNonRestoredStateフラグを設定できます。セーブポイントがトリガーされたときにプログラムの一部であったオペレーターがプログラムから削除されたが、引き続きセーブポイントを使用したい場合は、これを許可する必要があります。
$ ./bin/flink run \
--fromSavepoint <savepointPath> \
--allowNonRestoredState ...
これは、プログラムがセーブポイントの一部であった演算子を削除する場合に便利です。
3 つのジョブ送信モード
モデル |
説明する |
特徴 |
セッション モデル |
Seesionモードでは、設定したリソース パラメータに従ってFlinkクラスターが作成され、すべてのジョブがこのクラスターに送信されて実行されます。ジョブの実行終了後、クラスターは自動的に解放されません。 たとえば、ジョブで例外が発生し、タスク マネージャーがシャットダウンされた場合、タスク マネージャーで実行されている他のすべてのジョブは失敗します。さらに、同じクラスター内にはジョブ マネージャーが1 つしかないため、ジョブの数が増えると、それに応じてジョブ マネージャーへの負荷も増加します。 |
利点: ジョブを送信するときに、リソース割り当てによって生じる時間のオーバーヘッドが他のモードよりも小さくなります。 欠点: すべてのジョブがクラスター内で実行されるため、リソースの競合やジョブ間の相互作用が発生します。 上記の特性に基づき、このモードは起動時間や実行時間が比較的短いジョブのデプロイに適しています。 |
ジョブごとのクラスター モデル |
ジョブごとのクラスターモードを使用する場合、 Flinkジョブが送信されるたびに、 YARNはそのジョブ用に新しいFlinkクラスターを開始し、ジョブを実行します。ジョブの実行が終了するかキャンセルされると、ジョブが属するFlinkクラスターも解放されます。 |
利点: ジョブ間のリソースが分離されているため、1 つのジョブの異常な動作が他のジョブに影響を与えません。各ジョブはジョブマネージャーと1対1に対応しているため、複数のジョブを実行することによりジョブマネージャーが過負荷になるという問題はありません。 欠点: ジョブを実行するたびに専用のFlinkクラスターを開始する必要があり、ジョブ開始のオーバーヘッドが大きくなります。 上記の特性に基づいて、このモードは通常、長時間実行されるジョブに適しています。 |
アプリケーションモード |
アプリケーションモードを使用する場合、 Flink アプリケーションが送信されるたびに(アプリケーションには1 つ以上のジョブが含まれます)、YARNはアプリケーションの新しいFlinkクラスターを開始します。アプリケーションが終了またはキャンセルされると、アプリケーションが属するFlinkクラスターも解放されます。 このモードとジョブごとのモードの違いは、アプリケーションに対応するJARパッケージ内のmain()メソッドがクラスター内のジョブ マネージャーで実行されることです。 送信されたJARパッケージに複数のジョブが含まれている場合、これらのジョブはアプリケーションが属するクラスターで実行されます。 |
利点: ジョブを送信する際のクライアントの負担を軽減できます。 欠点: Flink アプリケーションを実行するたびに、専用のFlinkクラスターを起動する必要があり、アプリケーションの起動にかかる時間が長くなります。 |
課題を提出および表示するための 3 つのモード
セッションモードで課題を送信および表示する
- 次のコマンドを実行して、YARN セッションを開始します。
yarn-session.sh --detached
- 次のコマンドを実行してジョブを投入します。
flink run /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
注:この記事では、Flink 自体が提供する、長時間実行されるストリーミング ジョブである TopSpeedWindowing の例を使用します。
送信が成功すると、送信された Flink ジョブの YARN アプリケーション ID が返されます。次のような情報が返されます。
- ジョブのステータスを表示するには、次のコマンドを実行します。
flink list -t yarn-session -Dyarn.application.id=<application_XXXX_YY>
Web UI を通じてジョブのステータスを表示することもできます。
- 以下のコマンドを実行してジョブを停止します。
flink cancel -t yarn-session -Dyarn.application.id=<application_XXXX_YY> <jobId>
ジョブごとのクラスター モードでジョブを送信および表示する
- 次のコマンドを実行してジョブを投入します。
flink run -t yarn-per-job --detached /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
送信が成功すると、送信された Flink ジョブの YARN アプリケーション ID が返されます。次のような情報が返されます。
- ジョブのステータスを表示するには、次のコマンドを実行します。
flink list -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY>
この記事の例の <application_XXXX_YY> は、ジョブの実行後に返されるアプリケーション ID であることに注意してください。
Web UI を使用してジョブ ステータスを表示することもできます。詳細については、「Web UI を使用したジョブ ステータスの表示」を参照してください。
- 以下のコマンドを実行してジョブを停止します。
flink cancel -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY> <jobId>
ジョブを送信および表示するアプリケーション モード
- 次のコマンドを実行してジョブを投入します。
flink run-application -t yarn-application /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
送信が成功すると、送信された Flink ジョブの YARN アプリケーション ID が返されます。次のような情報が返されます。
- ジョブのステータスを表示するには、次のコマンドを実行します。
flink list -t yarn-application -Dyarn.application.id=<application_XXXX_YY>
Web UI を使用してジョブ ステータスを表示することもできます。詳細については、「Web UI を使用したジョブ ステータスの表示」を参照してください。
- 以下のコマンドを実行してジョブを停止します。
flink cancel -t yarn-application -Dyarn.application.id=<application_XXXX_YY> <jobId>