2017-01-05 16 views
1

私は手動でDSXユーザーインターフェイスを実行し、Cloudantデータベースのデータを入力するDSXノートブックを持っています。DSXスケジュールノートブックのトラブルシューティング方法

ノートブックを毎時実行するようにスケジュールしました。一晩、私は仕事が何度も実行されていると思っていたが、Cloudantデータベースは更新されていない。

スケジュールされたジョブをどのようにデバッグできますか?ノートブックが実際に実行されたことを確認するためにチェックできるログはありますか?ノートブックの出力はログファイルに保存されていますか?これらのファイルはどこにありますか?

答えて

2

ノートブックカーネルのカーネルログを調べることも可能です。そのためには、Pythonノートブックを使う必要があります。

あなたのPythonのノートにgpfsの次の場所を確認してください:

!ls /gpfs/fs01/user/USERID/logs/notebook/ 

USERIDは、次のコードを実行し取得するには:

!whoami 

あなたは各カーネルのログファイルを見つける必要があり、例えばkernel-python3-20170105_102510

+0

「!」に簡略化することはできますか? ls $ HOME/logs/notebook'? –

+0

はい、それも可能です。 –

1

ノートブックの実行ログは、~/notebook/logs/にあります。あなたのノートブックが夜間に複数回実行された場合、いくつかのログエントリ(ls -la ~/notebook/logs/)が見つかります。関連するログファイルの1つを(タイムスタンプに従って)開き、ノートブックにCloudantやその他のものとの接続の問題があるかどうかを確認します(cat ~/notebook/logs/kernel-pyspark-20170105_095103.log)。

2

1つのゴチャはprint()です。ステートメントはログファイルには作成されませんので、スパークログ機能を使用する必要があります。

# utility method for logging 
log4jLogger = sc._jvm.org.apache.log4j 

# give a meaningful name to your logger (mine is CloudantRecommender) 
LOGGER = log4jLogger.LogManager.getLogger("CloudantRecommender") 

def info(*args): 
    print(args) # sends output to notebook 
    LOGGER.info(args) # sends output to kernel log file 

def error(*args): 
    print(args) # sends output to notebook 
    LOGGER.error(args) # sends output to kernel log file 

機能を使用するので、同じように私のノートで:pysparkでは、私は、ログファイルに出力を送信するだけでなく、ノートブックが手動で実行されたときにノートブックにそれを印刷しユーティリティ関数を作成し

info("some log output") 

私は、ログファイルをチェックすると、私は私のログアウトが書かれてきている見ることができます。

! grep 'CloudantRecommender' $HOME/logs/notebook/*pyspark* 

kernel-pyspark-20170105_164844.log:17/01/05 10:49:08 INFO CloudantRecommender: [Starting load from Cloudant: , 2017-01-05 10:49:08] 
kernel-pyspark-20170105_164844.log:17/01/05 10:53:21 INFO CloudantRecommender: [Finished load from Cloudant: , 2017-01-05 10:53:21] 

例外は、どちらかのログファイルに送信されます表示されませんので、あなたはコードをラップする必要があります。 tryブロックに格納し、エラーを記録します。

import traceback 
try: 
    # your spark code that may throw an exception 
except Exception as e: 
    # send the exception to the spark logger 
    error(str(e), traceback.format_exc(), ts()) 
    raise e 

注意:デバッグ中に私を襲ったもう一つの落とし穴は、スケジュールされたジョブは、ノートブックの特定のバージョンを実行することです。ノートブックの新しいバージョンを保存するときにスケジュールジョブを更新することを確認します。

関連する問題