2017-08-13 24 views
1

我有下面的程序来计算日志文件中的“错误”的计数。最后,它的值被打印在控制台中。当纱线客户端程序运行时,它将在控制台中显示累加器正确值509,但当它在纱线簇模式下运行时,不会显示此值。如何以纱线丛集模式打印?如何在纱线丛集模式下打印累加器?

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沙盒2.4运行(火花1.6.0)

回答

1

为什么它在不打印在纱线簇模式时火花应用程序在纱线簇模式下运行的原因,驱动器是运行在集群的其中一个节点上,而不是在客户端shell中。这是它的原因,它的控制台输出可以在各个节点的日志文件中看到。如果yarn.log-aggregation-enableyarn-site.xml是真实的,日志可以使用可见

yarn logs -applicationId [application_id] 

如果属性被设置为假,他们可以在yarn-site.xml设置日志位置查看。房地产是

yarn.nodemanager.log-dirs 

在我的情况,记录聚集启用,所以我可以看到在应用程序日志文件打印的累加值。

相关问题