2016-06-14 19 views
0

Ich habe eine samza Arbeit, die ich versuche, auf Garn Cluster laufe mitProbleme beim Laden der Eigenschaften von Dateien aus samza Job auf Garn Cluster ausgeführt

./bin/run-job.sh --config- Fabrik = org.apache.samza.config.factories.PropertiesConfigFactory --config-path = file: ///home/anshu/samzaJob.properties

Die Aufgabe löst und läuft mit dieser Konfiguration in Ordnung.

Jetzt, nachdem der Job gestartet wurde, habe ich einige anwendungsspezifische Konfigurationen (in Form von separaten Eigenschaftendateien), die ich mithilfe der Apache Commons-Konfigurationsbibliothek laden möchte. Dazu habe ich einen appconfig Ordner erstellt und versucht, alle Dateien in diesem Ordner

CONFIGURATION_FILE_PATH = System.getProperty ("user.dir") + "/ config/appconfig" zu lesen;

Dies funktioniert auf meinem lokalen Box, aber wenn dies auf Garn Cluster ausgeführt wird, dies löst zu

/var/lib/Hadoop-Garn/data/samza-Garn/usercache/anshu/AppCache/application_1462311090906_0973/container_e19_1462311090906_0973_01_000003/config/appconfig

, die nicht korrekt ist.

Wie finde ich den richtigen Pfad zum Laden der Datei? Oder gibt es eine andere Möglichkeit, dies zu tun?

Antwort

0

Nun, es sieht so aus, als ob die Art, wie ich das versuchte, nicht korrekt war.

Es wurde an der lokalen Box gearbeitet, da der Pfad für die angegebene Eigenschaftendatei korrekt war und die Datei sich tatsächlich dort befand. Aber beim Versuch, auf dem Garn-Cluster zu laufen, funktionierte dieser Ansatz, den absoluten Pfad zu Eigenschaften zu geben, nicht, da System.getProperty ("user.dir") immer den Pfad zum samza-Container angibt und wenn die Eigenschaftendatei nicht da ist Standort wird es fehlschlagen.

Der ideale Ansatz ist es, die Datei an einer Stelle zu setzen, die in Classpath geladen wird, um sicher zu stellen, dass sie immer da sein, wenn man sie

Classloader verwenden versuchen, die Klasse zu laden und laden loader = Thread.currentThread(). getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream (propertiesFilePath)); FileConfiguration Konfiguration = neu PropertiesConfiguration(); configuration.load (ressourceStream);