プログラムのパッケージングと分散実行

以前説明したように、Flinkのプログラムはリモート環境を使ってクラスタ上で実行することができます。別のやり方として、プログラムは実行のためにJARファイル(Java書庫)にパッケージすることができます。プログラムのパッケージ化はコマンドライン インタフェースを使ってそれらを実行する必須条件です。

プログラムのパッケージ化

コマンドラインあるいはwebインタフェースを使ってパッケージ化されたJARファイルからの実行をサポートするには、プログラムは StreamExecutionEnvironment.getExecutionEnvironment()によって取得された環境を使う必要があります。。この環境はJARがコマンドラインあるいはwebインタフェースにサブミットされた時に、クラスタの環境として振舞うでしょう。もしFlinkのプログラムがこれらのインタフェースと異なる起動をされた場合、その環境はローカル環境のように振舞うでしょう。

プログラムをパッケージ化するためには、単純に全ての起動されるクラスをJARファイルとしてexportします。JAR ファイルの manifest はプログラムのentry point (public main メソッドを持つクラス)を含むクラスを示す必要があります。これを行う最も簡単な方法はmain-class エントリを(main-class: org.apache.flinkexample.MyProgramのように)manifestに入れることです。main-class 属性は、コマンドjava -jar pathToTheJarFileを使ってJARファイルを実行する時にmainメソッドを見つけるためにJava仮想マシーンで使われるものと同じです。ほとんどのIDEはJARファイルをexportする時に自動的にその属性を含むことを提供します。

Planを使ってプログラムをパッケージ化

更に、Plansとしてプログラムのパッケージ化をサポートします。mainメソッド内でプログラムを定義し、環境上でexecute() を呼ぶ代わりに、planのパッケージ化はProgram Planを返します。これはプログラムのデータフローの説明です。そうするためには、プログラムはgetPlan(String...)メソッドを実装してorg.apache.flink.api.common.Program インタフェースを実装しなければなりません。メソッドに渡される文字列はコマンドラインの引数です。プログラムのplanはExecutionEnvironment#createProgramPlan() メソッドを使って環境から作成することができます。プログラムのplanをパッケージ化する時に、JARの manifest はmainメソッドを持つクラスの代わりに、org.apache.flink.api.common.Program インタフェースを実装するクラスを指し示さなければなりません。

概要

パッケージ化されたプログラムを起動する全般的な手順は以下のようなものです:

  1. JARの manifest は main-class あるいは program-class 属性のために検索されます。両方の属性が見つかった場合、program-class 属性は main-class属性よりも優先されます。JARのmanifestがどちらの属性も含まない場合のために、コマンドラインおよびwebインタフェースの両方とも手動でエントリ ポイントクラス名を渡すためのパラメータをサポートします。

  2. もしエントリポイントクラスがorg.apache.flink.api.common.Programを実装する場合、システムは実行するためのプログラム planを取得するためにgetPlan(String...)メソッドを呼びます。

  3. もしエントリポイントクラスがorg.apache.flink.api.common.Program インタフェースを実装しない場合、システムはクラスのmainメソッドを起動するでしょう。

上に戻る

TOP
inserted by FC2 system