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

実行モード #

Python APIは、ユースケースの要件やジョブの特性に応じて選択できる様々な実行モードをサポートします。Pythonランタイムの実行モードは、Pythonのユーザ定義関数がどのように実行されるかを定義します。

リリース 1.15より前には、PROCESS実行モードと呼ばれる実行モードだけがありました。PROCESSモードは、Pythonのユーザ定義関数が別のPythonプロセスで実行されることを意味します。

リリース 1.15で、THREAD実行モードと呼ばれる新しい実行モードが導入されました。THREADモードは、Pythonのユーザ定義関数がJVMで実行されることを意味します。

注意E: 同じJVMで実行される複数のPythonユーザ定義関数は、依然としてGILの影響を受けます。

いつTHREAD実行モードを使用できるか、使うべきですか? #

THREADモードの導入の目的は、PROCESSモードでのプロセス間通信に導入されるシリアル化/逆シリアル化とネットワーク通信のオーバーヘッドを克服することです。 したがって、パフォーマンスが気にならない場合やPythonのユーザ定義関数の計算ロジックがジョブのパフォーマンスのボトルネックである場合は、 PROCESSモードはTHREADモードと比較して最良の分離を提供するため、PROCESSモードが最適な選択となります。

Python実行モードの設定 #

実行モードはpython.execution-mode設定を介して設定できます。 可能な値は2つあります:

  • PROCESS: Pythonのユーザ定義関数は、別のPythonプロセスで実行されます。(デフォルト)
  • THREAD: Pythonのユーザ定義関数はJVMで実行されます。

以下のようにして、Python Table APIやPython DataStream APIジョブで実行モードを指定できます:

## Python Table API
# Specify `PROCESS` mode
table_env.get_config().set("python.execution-mode", "process")

# Specify `THREAD` mode
table_env.get_config().set("python.execution-mode", "thread")


## Python DataStream API

config = Configuration()

# Specify `PROCESS` mode
config.set_string("python.execution-mode", "process")

# Specify `THREAD` mode
config.set_string("python.execution-mode", "thread")

# Create the corresponding StreamExecutionEnvironment
env = StreamExecutionEnvironment.get_execution_environment(config)

サポートされるケース #

Python Table API #

以下の表は、THREAD実行モードがPython Table APIでサポートされる場所を示しています。

UDFs PROCESS THREAD
Python UDF Yes Yes
Python UDTF Yes Yes
Python UDAF Yes いいえ
Pandas UDF & Pandas UDAF Yes いいえ

Python DataStream API #

以下の表は、PROCESS実行モードとTHREAD時刻モードがPythonでサポートされる場所を示しています。

オペレータ PROCESS THREAD
マップ Yes Yes
FlatMap Yes Yes
フィルター Yes Yes
Reduce Yes Yes
和集合 Yes Yes
Connect Yes Yes
CoMap Yes Yes
CoFlatMap Yes Yes
処理関数 Yes Yes
Window Apply Yes Yes
Window Aggregate Yes Yes
Window Reduce Yes Yes
Window Process Yes Yes
Side Output Yes Yes
状態 Yes Yes
Iterate いいえ いいえ
Window CoGroup いいえ いいえ
ウィンドウ結合 いいえ いいえ
インターバル結合 いいえ いいえ
非同期 I/O いいえ いいえ

現時点では、全ての場所でTHREAD実行モードでPython UDFを実行することはサポートされていません。 このような場合は、PROCESS実行モードに戻ります。そのため、THREAD実行モードで実行するようにジョブを設定しても、実際にはPROCESS実行モードで時刻される場合があります。
THREAD実行モードは、Python 3.8+でのみサポートされます。

Executionの挙動 #

このセクションでは、THREAD実行モードの実行動作の概要を説明し、PROCESS実行モードと対比します。詳細については、この機能を紹介したFLIPを参照してください: FLIP-206

PROCESS実行モード #

PROCESS実行モードでは、Pythonのユーザ定義関数は別のPythonワーカープロセスで実行されます。 Javaオペレータプロセスでは、様々なGrpcサービスを使ってPythonワーカープロセスと通信します。

Process Execution Mode

THREAD実行モード #

THREAD実行モードでは、Pythonのユーザ定義関数はJavaオペレータと同じプロセスで実行されます。PyFlinkは、サードパーティライブラリPEMJAを使ってJavaアプリケーションにPythonを埋め込みます。

Embedded Execution Mode
inserted by FC2 system