This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
デバッギング #
このページはPyFlinkでデバッグする方法を説明します。
ログ情報 #
クライアント側のログ #
print
またはPython UDFの外部のPyFlinkジョブの標準Pythonログモジュールを介して、コンテキスト情報やデバッグ情報をログに記録できます。ログメッセージはジョブの送信中にクライアントのログファイルに出力されます。
from pyflink.table import EnvironmentSettings, TableEnvironment
# create a TableEnvironment
env_settings = EnvironmentSettings.in_streaming_mode()
table_env = TableEnvironment.create(env_settings)
table = table_env.from_elements([(1, 'Hi'), (2, 'Hello')])
# use logging modules
import logging
logging.warning(table.get_schema())
# use print function
print(table.get_schema())
注意: クライアント側のデフォルトのログレベルはWARNING
のため、ログレベルWARNING
以上のメッセージがクライアントのログに表示されます。
サーバ側のログ #
print
またはPython UDFの標準Pythonログモジュールを介して、コンテキスト情報とデバッグ情報をログに記録できます。
ログメッセージは、ジョブの実行中にTaskManagers
のログアイルに出力されます。
from pyflink.table import DataTypes
from pyflink.table.udf import udf
import logging
@udf(result_type=DataTypes.BIGINT())
def add(i, j):
# use logging modules
logging.info("debug")
# use print function
print('debug')
return i + j
注意: サーバ側のデフォルトのログレベルはINFO
のため、ログレベルINFO
以上のメッセージがTaskManagers
のログファイルに表示されます。
アクセス ログ #
環境変数FLINK_HOME
が設定された場合、ログはFLINK_HOME
の下のログディレクトリに書き込まれます。
それ以外の場合、ログはPyFlinkモジュールのディレクトリに配置されます。次のコマンドを実行して、PyFlinkモジュールのログディレクトリを見つけることができます。
$ python -c "import pyflink;import os;print(os.path.dirname(os.path.abspath(pyflink.__file__))+'/log')"
Python UDFsのデバッグ #
ローカルデバッグ #
PyCharmのようなIDEでpython関数を直接デバッグできます。
リモートデバッグ #
PyCharmのpydevd_pycharm
ツールを利用して、Python UDFをデバッグできます。
-
PyCharmでPython Remote Debugを作成
run -> Python Remote Debug -> + -> choose a port (e.g. 6789)
-
pydevd-pycharm
ツールをインストールします$ pip install pydevd-pycharm
-
Python UDFで以下のコマンドを追加します
import pydevd_pycharm
pydevd_pycharm.settrace(’localhost’, port=6789, stdoutToServer=True, stderrToServer=True)
4. 上記で作成したPython Remote Debug Serverを開始します
5. Pythonコードを実行します
## Python UDFのプロファイリング
プロファイルを有効にして、パフォーマンスのボトルネックを解析できます。
```python
t_env.get_config().set("python.profile.enabled", "true")
その後、logsでプロファイルの結果を確認できます