2016-06-30 11 views
2

Ich verwende typsichere ConfigFactory, um die Konfiguration in meine scala-Anwendung zu laden. Ich möchte die Konfigurationsdateien nicht in mein jar aufnehmen, sondern sie stattdessen von einem externen hdfs-Dateisystem laden. Allerdings kann ich nicht auf einfache Weise findet die Config vom fsDataInputStream Objekt, das ich von hadoop erhalten zu laden:Wie man Typesafe ConfigFactory von der Akte auf hdfs lädt?

//get HDFS file 
val hadoopConfig: Configuration = sc.hadoopConfiguration 
val fs: FileSystem = org.apache.hadoop.fs.FileSystem.get(hadoopConfig) 
val file: FSDataInputStream = fs.open(new Path("hdfs://SOME_URL/application.conf")) 
//read config from hdfs 
val config: Config = ConfigFactory.load(file.readUTF()) 

Doch dies wirft ein EOFException. Gibt es eine einfache Möglichkeit, das FSDataInputStream-Objekt in die erforderliche java.io.File zu konvertieren? Ich fand Converting from FSDataInputStream to FileInputStream, aber das wäre für solch eine einfache Aufgabe ziemlich umständlich.

Antwort

4

ConfigFactory.parseReader Mit funktionieren sollte (aber ich habe es nicht getestet):

val reader = new InputStreamReader(file) 
val config = try { 
    ConfigFactory.parseReader(reader) 
} finally { 
    reader.close() 
} 
+0

funktioniert gut! Danke – Malte

+0

Können wir Dateien innerhalb der typsicheren Konfigurationsdatei von den hdfs einschließen. 'Include-Datei (" hdfs: //home//XYZ.conf ")' –

+0

Ich weiß es nicht. Warum versuchst du es nicht? –

Verwandte Themen