2016-12-08 4 views
1

PySparkで適切なログ設定を設定しようとしています。私は、さまざまなログハンドラを設定するYAML設定ファイルを持っています。これらのハンドラは、コンソール、ファイル、SQLite DBで構成され、形式は"%(asctime)s - %(name)s - %(levelname)s - %(message)s"です。PySparkログのキャプチャ

# SETUP LOGGING 
with open(cfile, 'rt') as f: 
    config = yaml.safe_load(f.read()) 
logging.config.dictConfig(config) 
lg = logging.getLogger("mylog." + self.__name__()) 

だから私は、呼び出すたびはlg.xxxx('message')すべてが非常にうまく処理されます。

今私はlog_handler = sc._jvm.org.apache.log4jを使ってPySparkからlog4jを取得する方法についてかなりの記事を見つけました。しかし、今は私の既存のセットアップにこのハンドラを追加し、PySparkコンソールで発生したすべてのメッセージをキャッチしてファイルとSQLite DBに保存する方法については分かりません。

答えて

1

pythonハンドラでspark jvmログを捕捉することはできません。これらは両方とも分離環境です。 2つのオプションがあります:sc._jvmからlog4jを使用してpythonメッセージをログに記録し、log4jハンドラを設定するか、ジョブが終了した後に別のハンドラとマージログ(たとえばsqlite)を使用します。