【问题标题】:How to print accumulator in yarn-cluster mode?如何在纱线集群模式下打印累加器?
【发布时间】:2017-08-14 15:07:16
【问题描述】:

我有以下程序计算日志文件中“错误”的计数。最后,它的值会打印在控制台中。当程序在 yarn-client 中运行时,它会在控制台中显示累加器正确的值 509,但是当它在 yarn-cluster 模式下运行时,不会显示这样的值。如何以纱线集群模式打印它?

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) 中运行

【问题讨论】:

    标签: scala apache-spark hadoop-yarn


    【解决方案1】:

    它没有在 yarn-cluster 模式下打印的原因是当 spark 应用程序在 yarn-cluster 模式下运行时,驱动程序运行在集群的一个节点中,而不是在客户端 shell 中。这就是原因,它的控制台输出可以在各个节点的日志文件中看到。如果yarn.log-aggregation-enableyarn-site.xml 中为真,则可以使用

    查看日志
    yarn logs -applicationId [application_id]
    

    如果属性设置为 false,则可以在 yarn-site.xml 中设置的日志位置查看它们。属性是

    yarn.nodemanager.log-dirs
    

    在我的例子中,日志聚合已启用,因此我可以看到应用程序日志文件中打印的累加器值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2016-04-09
      • 2015-10-22
      • 2018-10-25
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多