Debugging
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をデバッグできます。

  1. PyCharmでPython Remote Debugを作成

    run -> Python Remote Debug -> + -> choose a port (e.g. 6789)

  2. pydevd-pycharmツールをインストールします

    $ pip install pydevd-pycharm
    
  3. 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でプロファイルの結果を確認できます

inserted by FC2 system