繁体   English   中英

记录Spark作业

[英]Logging Spark Jobs

我试图跟踪正在集群上提交的作业,到目前为止,仅使用spark.eventLog.enabled = True找到了事件日志的日志记录解决方案,它提供了有关任务何时开始和完成的信息(有关该信息的更多信息) 此处 )或log4j,它还提供有关任务状态和进度的信息。

我真正想要的是记录正在运行的任务。 因此,这将捕获执行的代码,例如:var = sc.range(1000)或min_var = var.min()。 据我所见,上面解释的其他记录器无法做到这一点。

例如,如果我运行上面的两个命令( var = sc.range(1000)min_var = var.min() ),我希望在类似于log4j的记录器中看到类似以下的内容:

INFO RUNNING var = sc.range(1000)

信息运行min_var = var.min()

有没有人遇到过这样的记录器?

如果您在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日志本身中作为指导。

希望这能给您一些想法,使他们更接近您的期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM