我有一个在集群模式下运行的简单Spark应用程序。
val funcGSSNFilterHeader = (x: String) => {
println(!x.contains("servedMSISDN")
!x.contains("servedMSISDN")
}
val ssc = new StreamingContext(sc, Seconds(batchIntervalSeconds))
val ggsnFileLines = ssc.fileStream[LongWritable, Text, TextInputFormat]("C:\\Users\\Mbazarganigilani\\Documents\\RA\\GGSN\\Files1", filterF, false)
val ggsnArrays = ggsnFileLines
.map(x => x._2.toString()).filter(x => funcGSSNFilterHeader(x))
ggsnArrays.foreachRDD(s => {println(x.toString()})
我需要在map函数中打印!x.contains(“servedMSISDN”)以进行调试,但这不会在控制台上打印
答案 0 :(得分:3)
您的代码包含驱动程序(主/主)和执行程序(在群集模式下以节点运行)。
在“map”中运行的函数在执行程序
上运行即。当你处于集群模式时,在map函数中执行print将导致打印到节点控制台(你将看不到)。
为了调试程序,您可以:
以“本地”模式运行代码,当“执行者在同一台机器上运行”时,“地图功能”中的打印件将打印到“主/主节点”的控制台上
将“print to console”替换为save to file / save to elastic / etc
请注意,除本地 vs 群集模式外,您的代码中似乎有拼写错误:
ggsnArrays.foreachRDD(s => {println(x.toString()})
应该是:
ggsnArrays.foreachRDD(s => {println(x.toString)})
答案 1 :(得分:0)
两种可能性: 您的日志位于工作节点上,因此您必须检查工作日志以获取这些日志消息。如前所述,您可以在本地模式下运行应用程序以检查计算机上的日志。顺便说一句,最好使用SLF4j而不仅仅是println,但我认为这只是为了学习:)
在代码段中,没有ssc.start()
和ssc.awaitTermination()
。你运行这些命令了吗?如果没有,foreachRDD将不会被执行。如果示例正常,请在脚本末尾添加这些行并重试,但请检查工作节点日志:)