我试图跟踪群集上提交的作业,到目前为止,我们只找到了使用spark.eventLog.enabled = True的事件日志记录解决方案,它提供了有关任务何时开始和结束的信息(关于here)或log4j的更多信息,它还提供有关任务状态和进度的信息。
我真正想要的是记录运行的任务。因此,这将捕获执行的代码,如:var = sc.range(1000)或min_var = var.min()。从我所看到的,上面解释的其他记录器不能这样做。
例如,如果我运行上面的两个命令( var = sc.range(1000)和 min_var = var.min()),我想要在类似log4j的记录器中看到类似下面的内容:
INFO RUNNING var = sc.range(1000)
INFO RUNNING min_var = var.min()
有没有人遇到像这样的记录器?
答案 0 :(得分:3)
如果您在YARN上运行并且yarn.log-aggregation-enable
设置为true
,则可以执行以下操作:
yarn logs --applicationId <application-id>
并检索任何已完成的应用程序的日志,包括代码生成的日志。
更新:
不幸的是,没有(至少是流行的)库允许你这样做(记录你的阶段间边界代码),但对于其余的你可以利用Spark驱动程序的日志来获得更多东西教育比你现在的。首先通过将log4j设置为DEBUG级别(从模板创建并编辑conf/log4j.properties
)来确保您充分利用日志,如下所示:
log4j.rootCategory=DEBUG, console
然后让日志进行一些过滤(特别是在现有驱动程序的日志上)。比如工作:
user@laptop:~$ cd ~/opt/spark
user@laptop:~/opt/spark$ git clone https://github.com/ehiggs/spark-terasort.git
user@laptop:~/opt/spark$ cd spark-terasort
user@laptop:~/opt/spark/spark-terasort$ mvn package
...
user@laptop:~/opt/spark/spark-terasort$ cd ..
user@laptop:~/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
然后你可以这样做:
user@laptop:~/opt/spark$ cat logs.logs | grep "Registering RDD\|Final stage\|Job" | grep DAG
得到类似的东西:
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
请注意,不会列出不是相位的尾部的窄变换。在这里,您可以使用以下技巧来丰富RDD的名称,而不是在代码中添加日志记录调用:
rdd.setName("more interesting info, or even the algorithm itself")
并将其作为指南显示在Spark日志中。
希望这能为你提供一些接近你期望的想法。