2016-03-23 8 views
2

私はクラスタ上で送信されているジョブを追跡しようとしていますが、spark.eventLog.enabled = Trueを使用してイベントログのログソリューションを見つけました。フィニッシュ(詳細はhere)またはlog4jはタスクの状態と進行状況に関する情報も提供します。スパークジョブのログ

私が本当に望むのは、実行されているタスクを記録することです。これは、var = sc.range(1000)またはmin_var = var.min()のように実行されたコードをキャプチャします。私が見たものから、上で説明した他のロガーはこれを行うことができません。私は(VAR = sc.range(1000)min_var = var.min())上記の2つのコマンドを実行した場合の例として

、私はlog4j-に次のようなものを見たいと思いますロガーのように:

情報VAR = sc.range(1000)

INFO RUNNING min_var = var.min()

は、誰もがこのようなロガー間で走ったのを実行していますか?

yarn logs --applicationId <application-id> 

をし、あなたのコードによって生成されたログを含む任意の完成したアプリケーションのためのログを取得:

+0

あなたの質問が十分ではありません。あなたは内部のスパークではなくあなたのコードからログが来ることを意味しますか? – mauriciojost

+0

私は自分のコードやSparkの内部からログを取得するのではなく、実行されたコードを記録したいと思っています。したがって、実際のコマンドrdd_name.filter(lambda x:x)を保持し、FilteredRDDではなく、すべてのコマンドの周りにコードロガーを記述する必要はありません。私はもう少し意味があることを願っています。 – flipper144

+0

ログにコードを文書化したいのですか? – mauriciojost

答えて

3

あなたがYARNとyarn.log-aggregation-enable上で実行している場合は、あなたができるtrueに設定されています。


UPDATE:

は、残念ながら、あなたは(あなたの中-間のステージ・境界コードをログに記録する)ことを行うことができます何も(少なくとも人気)ライブラリがありませんが、残りのためにあなたがスパークを悪用する可能性があります運転士のログを使用して、あなたが現在持っているものよりも教育的なものを得ることができます。

log4j.rootCategory=DEBUG, console 

が続いてログが(特別な存在ドライバーのログ上の)いくつかのフィルタリングを行う持つ:まず、あなたは次のように(テンプレートから作成してconf/log4j.propertiesを編集)DEBUGレベルまでのlog4jを設定することで、ログを最大限に活用することを確認してください。ジョブのインスタンスの場合:狭い変換ははの尾ではないことをことを

16/03/24 23:47:44 INFO DAGScheduler: Registering RDD 0 (newAPIHadoopFile at TeraSort.scala:60) 
16/03/24 23:47:44 INFO DAGScheduler: Final stage: ResultStage 1 (sortByKey at TeraSort.scala:61) 
16/03/24 23:48:41 INFO DAGScheduler: Job 0 finished: sortByKey at TeraSort.scala:61, took 56.468248 s 
16/03/24 23:48:41 INFO DAGScheduler: Registering RDD 1 (partitionBy at TeraSort.scala:61) 
16/03/24 23:48:41 INFO DAGScheduler: Final stage: ResultStage 4 (saveAsNewAPIHadoopFile at TeraSort.scala:62) 
16/03/24 23:50:35 INFO DAGScheduler: Job 1 finished: saveAsNewAPIHadoopFile at TeraSort.scala:62, took 114.042019 s 

注:

[email protected]:~/opt/spark$ cat logs.logs | grep "Registering RDD\|Final stage\|Job" | grep DAG 

をなど何かを得る:

[email protected]:~$ cd ~/opt/spark 
[email protected]:~/opt/spark$ git clone https://github.com/ehiggs/spark-terasort.git 
[email protected]:~/opt/spark$ cd spark-terasort 
[email protected]:~/opt/spark/spark-terasort$ mvn package 
... 
[email protected]:~/opt/spark/spark-terasort$ cd .. 
[email protected]:~/opt/spark$ ./bin/spark-submit --class com.github.ehiggs.spark.terasort.TeraSort spark-terasort/target/spark-terasort-1.0-SNAPSHOT-jar-with-dependencies.jar ~/data/terasort_in ~/data/terasort_out &> logs.logs 

は、その後、あなたは何ができますフェーズはリストされません。ここでは、むしろあなたのコードへのロギングの呼び出しを追加するよりも、あなたは以下のトリックを利用しRDDの名前豊かにできます

rdd.setName("more interesting info, or even the algorithm itself") 

をし、それはスパークに表示されますガイドとして自分自身を記録します。

希望すれば、これはあなたが期待するものに近づくためのアイデアです。

+1

この解決法は、この質問に答えてくれないようです。 – PinoSan

+0

ありがとう@PinonSan、私はそれを更新しました。 – mauriciojost

+0

素敵なアップデート。私は-1を取り除いて+1をくれました – PinoSan

関連する問題