Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在纱线簇模式下打印累加器?_Scala_Apache Spark_Yarn - Fatal编程技术网

Scala 如何在纱线簇模式下打印累加器?

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

我有下面的程序来计算日志文件中的“错误”计数。最后,它的值将打印在控制台中。当程序在纱线客户机中运行时,它会在控制台中显示累加器正确值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 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
在我的例子中,日志聚合是启用的,因此我可以看到应用程序日志文件中打印的累加器值