【问题标题】:Where do 'normal' println go in a scala jar, under Spark在 Spark 下,“正常”println 在 scala jar 中的位置
【发布时间】:2015-06-09 05:38:40
【问题描述】:

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

但是,在 Spark 下运行时,println 语句的输出无处可寻。

jar 中的主类是这样开始的:

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

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

如果重要的话,我已经在本地以及在 Mesos 下测试了这个正在运行的 spark

更新

作为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

所以你有它,我所有的标准输出都进入了一个文件,而“正常”的火花输出仍然出现,因为它是标准错误,我现在才意识到。

【问题讨论】:

    标签: scala jar apache-spark


    【解决方案1】:

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

    【讨论】:

    • 这并没有真正帮助我,因为我在其他地方犯了错误,但它回答了问题
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-18
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2011-11-05
      • 2019-11-22
      相关资源
      最近更新 更多