2017-08-13 8 views
1

以下のプログラムは、ログファイルの「ERROR」の数を計算します。最後に、その値がコンソールに表示されます。プログラムが糸クライアントで実行されるとき、アキュムレータ正しい値509がコンソールに表示されますが、糸クラスターモードで実行されているときは、そのような値は表示されません。糸クラスターモードで印刷する方法は?アキュムレータを糸クラスターモードで印刷するには?

HDPサンドボックス2.4で実行しようと
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)) 
    } 
} 

(1.6.0スパーク)

答えて

1

スパークアプリケーションは糸クラスタモードで動作しているとき、それは糸クラスタモードで印刷されなかった理由は、ドライバがありますクライアントシェルではなくクラスタのいずれかのノードで実行されます。これが理由で、コンソール出力はそれぞれのノードのログファイルに表示されます。 yarn.log-aggregation-enableyarn-site.xmlにtrueの場合、ログは

yarn logs -applicationId [application_id] 

を使用して見ることができますプロパティをfalseとして設定されている場合、彼らはyarn-site.xmlに設定されたログの場所で見ることができます。プロパティは、私の場合は

yarn.nodemanager.log-dirs 

である私は、アプリケーションログファイルに出力アキュムレータ値を見ることができるように凝集が有効になって記録されます。

関連する問題