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 angepasster Quellkonfiguration .Benutzerdefinierte Quellen-/Senke-Konfigurationen werden nicht erkannt
Nach dieser post, ich habe angegeben ‚spark.files = metrics.properties‘ und ‚spark.metrics.conf = metrics.properties‘ sondern durch die Zeit ‚metrics.properties‘ zu Vollstreckern ausgeliefert, deren metrische System bereits initialisiert.
Wenn ich mein eigenes Metriksystem initialisiere, wird es meine Datei aufnehmen, aber dann fehlen Metrik/Eigenschaften auf der Master-/Executor-Ebene (zB. Executor.sink.mySink.propName = myProp - kann 'propName' nicht lesen von 'mySink'), da sie initialized von Sparks metrischem System sind.
Gibt es einen (programmatischen) Weg, der vorsieht, dass 'metrics.properties' vor den Executoren initialize ihrem Metrikensystem ausgeliefert wird?
Update1: Ich versuche, diese auf Stand-alone-Spark-2.0.0-Cluster
Update2: Gedanken von Hacks auf dieses Ziel zu erreichen - vor Ihrem 'tatsächlichen' Funken Job starten, starten Sie einen Dummy-Job metrics.properties kopieren auf jeden Arbeiter. 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 furchtbar hacky und eine bevorzugte Lösung ist, dass Spark es intern unterstützt.
Ich habe das versucht. 2 Probleme - 1) Es kopiert nicht die "metrics.properties" auf den Treiber-Rechner - da es Dateien nur im Executor-Arbeitsverzeichnis kopieren soll. 2) Zu dem Zeitpunkt, als es diese Dateien auf Executoren kopiert, hätte das Metrics-System versucht zu initialisieren und ist fehlgeschlagen - wegen fehlender Dateien. –