'normal' println 在 Spark 下的 scala jar 中去哪里

Where do 'normal' println go in a scala jar, under Spark

我正在 运行通过 spark 创建一个简单的 jar,一切正常,但作为一种粗略的调试方式,我经常发现 println 非常有用,除非我真的必须附加调试器

然而,println 语句的输出在 Spark 运行 下无处可寻。

jar 中的主要 class 是这样开始的:

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

为什么像这样简单的东西没有显示在驱动程序进程中。

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

下测试了这个 运行ning spark

更新

as 我已经简化了问题场景,我实际上是通过 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

就是这样,我所有的 stdout 都转到一个文件,而“正常”spark 输出仍然出现,因为它是 stderr,我现在才意识到这一点。

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

这将出现在驱动程序的标准输出中。例如,请参阅 SparkPi。我知道在 Yarn 上,这在客户端模式下出现在本地标准输出中,或者在集群模式下出现在应用程序主标准输出日志中。本地模式应该只出现在正常的 stdout 上(尽管可能混入了大量的日志记录噪音)。