我通过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,我现在才意识到。
答案 0 :(得分:2)
这会出现在驱动程序的标准输出中。作为示例,请参阅SparkPi。我知道在Yarn上,当处于客户端模式时,它会在stdout中本地出现,或者在群集模式下出现在应用程序主stdout日志中。本地模式应该出现在正常的标准输出上(虽然可能混入大量的测井噪声)。
答案 1 :(得分:1)
我不能肯定地说Spark,但是基于Spark是什么,我会假设它启动子进程,并且这些进程的标准输出不会被发送回主进程供您查看。您可以通过多种方式解决此问题,例如打开要写入消息的文件,或通过localhost
到另一个显示其收到消息的进程的网络连接。如果您只是想学习基础知识,这可能就足够了。但是,如果您打算做一个更大的项目,我强烈建议您对Spark社区为此目的开发的内容进行一些研究,因为从长远来看,它将使您受益于更强大的调试设置