Scala 如何在纱线簇模式下打印累加器?
我有下面的程序来计算日志文件中的“错误”计数。最后,它的值将打印在控制台中。当程序在纱线客户机中运行时,它会在控制台中显示累加器正确值509,但当它在纱线簇模式下运行时,不会显示此类值。如何在纱线簇模式下打印Scala 如何在纱线簇模式下打印累加器?,scala,apache-spark,yarn,Scala,Apache Spark,Yarn,我有下面的程序来计算日志文件中的“错误”计数。最后,它的值将打印在控制台中。当程序在纱线客户机中运行时,它会在控制台中显示累加器正确值509,但当它在纱线簇模式下运行时,不会显示此类值。如何在纱线簇模式下打印 object ErrorLogsCount{ def main(args:Array[String]){ val sc = new SparkContext(); val logsRDD = sc.textFile(args(0),4) val erro
object ErrorLogsCount{
def main(args:Array[String]){
val sc = new SparkContext();
val logsRDD = sc.textFile(args(0),4)
val errorsAcc = sc.accumulator(0,"Errors Accumulator")
val errorsLogRDD = logsRDD.filter(x => x.contains("ERROR"))
errorsLogRDD.persist()
errorsLogRDD.foreach(x => errorsAcc += 1)
errorsLogRDD.collect()
//printing accumulator
println(errorsAcc.name+" = "+errorsAcc)
//Saving results in HDFS
errorsLogRDD.coalesce(1).saveAsTextFile(args(1))
}
}
尝试在HDP Sandbox 2.4(Spark 1.6.0)中运行未在纱线群集模式下打印的原因是当Spark应用程序在纱线群集模式下运行时,驱动程序正在群集的一个节点中运行,而不是在客户端外壳中运行。这就是原因,其控制台输出可以在相应节点的日志文件中看到。如果
warn.log aggregation enable
在warn site.xml
中为true,则可以使用
yarn logs -applicationId [application_id]
如果属性设置为false,则可以在warn site.xml
中设置的日志位置查看它们。财产是
yarn.nodemanager.log-dirs
在我的例子中,日志聚合是启用的,因此我可以看到应用程序日志文件中打印的累加器值