2016-06-30 1 views
2

J'utilise typesafe ConfigFactory pour charger la configuration dans mon application scala. Je ne veux pas inclure les fichiers de configuration dans mon fichier jar, mais les charger à partir d'un système de fichiers hdfs externe. Cependant, je ne peux pas trouver un moyen simple de charger la configuration de l'objet fsDataInputStream que je reçois de Hadoop:Comment charger typesafe configFactory à partir du fichier sur hdfs?

//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()) 

Cependant, cela jette un EOFException. Existe-t-il un moyen facile de convertir l'objet FSDataInputStream dans le java.io.File requis? J'ai trouvé Converting from FSDataInputStream to FileInputStream, mais ce serait très lourd pour une tâche aussi simple.

Répondre

4

L'utilisation ConfigFactory.parseReader devrait fonctionner (mais je ne l'ai pas testé):

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

fonctionne très bien! Merci – Malte

+0

Pouvons-nous inclure des fichiers à l'intérieur du fichier de configuration typesafe de hdfs. 'include fichier (" hdfs: //home//XYZ.conf ")' –

+0

Je ne sais pas. Pourquoi ne pas l'essayer? –