Ich habe meine benutzerdefinierte Metrik Source / Sink für meine Spark-Streaming-App geschrieben, und ich versuche, sie aus metrics.properties zu initialisieren - aber das funktioniert nicht von Executoren. Ich habe keine Kontrolle über die Maschinen im Spark-Cluster, daher kann ich die Eigenschaftendatei in $ SPARK_HOME / conf / im Cluster nicht kopieren. Ich habe es im Fettglas, in dem meine App lebt, aber zu dem Zeitpunkt, zu dem mein Fettglas auf Arbeiterknoten im Cluster heruntergeladen wird, sind die Executoren bereits gestartet und ihr Metrics-System ist bereits initialisiert - also nicht meine Datei mit benutzerdefinierter Quellkonfiguration .
Nach diesem Post habe ich angegeben ' spark.files = metrics.properties' und 'spark.metrics.conf = metrics.properties' Aber zu dem Zeitpunkt, zu dem "metrics.properties" an Executoren geliefert wird, ist ihr metrisches System bereits initialisiert.
Wenn ich mein eigenes Metriksystem initialisiere, nimmt es meine Datei auf, aber dann fehlen Metrik / Eigenschaften auf der Master- / Executor-Ebene (zB. executor.sink.mySink.propName = myProp - kann 'propName' nicht lesen von 'mySink'), da sie initialisiert durch Sparks metrisches System.
Gibt es eine (programmatische) Möglichkeit, "metrics.properties" vor Executoren zu senden? initialisieren ihr Metriken-System?
Update1: Ich versuche dies auf dem eigenständigen Spark 2.0.0 Cluster
Update2: Dachte über Hacks, um dies zu erreichen - bevor Sie Ihren "tatsächlichen" Funkenjob starten, starten Sie einen Dummy-Job, um metrics.properties auf jeden Arbeiter zu kopieren. Starten Sie dann Ihren eigentlichen Job mit dem bekannten Dateispeicherort. Nachteile - Wenn ein Arbeiter stirbt und ein anderer Arbeiter seinen Platz einnimmt, hat er diese Datei nicht auf dem vorbekannten Pfad. Lösungsalternative: Wenn ein neuer Arbeitscomputer gestartet wird, ruft er auch metrics.properties von Ihrem git-repo ab und speichert ihn in einem vorbekannten Pfad. Obwohl es funktioniert, ist es schrecklich hacky und eine bevorzugte Lösung ist, dass Spark es intern unterstützt.
Siehe Spark-Metriken im Beispiel für ein Wordcount Grundsätzlich glaube ich, dass Sie --files hinzufügen müssen, um die metrics.properties an alle Worker zu senden
SparkConf lädt nur das lokale System Eigenschaften, wenn sie mit dem Präfix funke beginnen. , hast du ein Tablett, um deine Eigenschaften zu laden und Funken hinzuzufügen?
Tags und Links apache-spark spark-streaming