在哪里做正常的' println进入一个scala jar,在Spark

时间:2015-06-08 20:27:41

标签: scala jar apache-spark

我通过spark运行一个简单的jar,一切正常,但作为一种粗略的调试方式,我经常发现println非常有帮助,除非我真的需要附加一个调试器

但是,在Spark下运行时,无法找到println语句的输出。

jar中的主要类开头是这样的:

import ...
object SimpleApp {
  def main(args: Array[String]) {
    println("Starting up!")
    ...

为什么在驱动程序进程中没有显示这么简单的内容。

如果重要的话,我已经在本地以及Mesos

下测试了这个运行火花

更新

作为Proper way to provide spark application a parameter/arg with spaces in spark-submit我已经愚弄了问题场景,我实际上是通过SSH提交(spark-submit)命令。 实际值参数是来自BigDataBenchmark的查询,即:

"SELECT pageURL, pageRank FROM rankings WHERE pageRank > 1000"

现在没有在远程ssh命令上正确转义:

ssh host spark-submit ... "$query"

成为主持人:

spark-submit ... SELECT pageURL, pageRank FROM rankings WHERE pageRank > 1000

所以你有它,我的所有标准输出都是一个文件,而#34;正常"火花输出仍然出现,因为它是stderr,我现在才意识到。

2 个答案:

答案 0 :(得分:2)

这会出现在驱动程序的标准输出中。作为示例,请参阅SparkPi。我知道在Yarn上,当处于客户端模式时,它会在stdout中本地出现,或者在群集模式下出现在应用程序主stdout日志中。本地模式应该出现在正常的标准输出上(虽然可能混入大量的测井噪声)。

答案 1 :(得分:1)

我不能肯定地说Spark,但是基于Spark是什么,我会假设它启动子进程,并且这些进程的标准输出不会被发送回主进程供您查看。您可以通过多种方式解决此问题,例如打开要写入消息的文件,或通过localhost到另一个显示其收到消息的进程的网络连接。如果您只是想学习基础知识,这可能就足够了。但是,如果您打算做一个更大的项目,我强烈建议您对Spark社区为此目的开发的内容进行一些研究,因为从长远来看,它将使您受益于更强大的调试设置