2015-06-29 3 views
17

Ich möchte die Spark-Argumente wie Eingabedatei, Ausgabedatei in eine Java-Eigenschaftendateien speichern und diese Datei in Spark Driver übergeben. Ich verwende Spark-Submit zum Übergeben des Jobs, konnte jedoch keinen Parameter zum Übergeben der Eigenschaftendatei finden. Hast du irgendwelche Vorschläge?Wie Java-Eigenschaftendatei laden und in Spark verwenden?

+1

haben Sie diese Option müde: --prop schaften-Datei FILE Pfad zu einer Datei, aus der –

Antwort

28

hier fand ich eine Lösung:

Requisiten Datei: (mypropsfile.conf) // Anmerkung: Präfix Ihr Schlüssel mit "Funken." sonst werden Requisiten ignoriert.

spark.myapp.input /input/path 
spark.myapp.output /output/path 

Start

$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf 

wie in Code aufzurufen :(innerhalb Code)

sc.getConf.get("spark.driver.host") // localhost 
sc.getConf.get("spark.myapp.input")  // /input/path 
sc.getConf.get("spark.myapp.output")  // /output/path 
+1

+ zusätzliche Eigenschaften laden zu gleichen Trick funktioniert für funken Shell .... –

+0

Danke :-) Es ein Vergnügen gearbeitet! – diplomaticguru

+0

@ ramisetty.vijay: die Dateierweiterung .conf werden sollte oder wir könnten .properties auch benutzen? – Shankar

3

der vorherigen Antwort Ansatz die Einschränkung hat, dass jede Eigenschaft sollte beginnen mit spark in Eigenschaftendatei -

z.B.

spark.myapp.input
spark.myapp.output

Wenn nehme an, Sie eine Eigenschaft haben, die nicht mit spark startet:

job.property:

app.name = xyz

$SPARK_HOME/bin/spark-submit --properties-file job.property 

Spark alle Eigenschaften ignorieren hat keinen Präfix spark. mit Nachricht:

Warnung: Ignorieren nicht-Funken Config Eigenschaft: app.name = test

Wie ich Eigenschaftendatei in Anwendung des Fahrers und Testamentsvollstrecker verwalten:

${SPARK_HOME}/bin/spark-submit --files job.properties 

Java-Code für den Zugriff auf die Cachedatei (Job.Eigenschaften):

import java.util.Properties; 
import org.apache.hadoop.fs.FSDataInputStream; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.apache.spark.SparkFiles; 

//Load file to propert object using HDFS FileSystem 
String fileName = SparkFiles.get("job.properties") 
Configuration hdfsConf = new Configuration(); 
FileSystem fs = FileSystem.get(hdfsConf); 

//THe file name contains absolute path of file 
FSDataInputStream is = fs.open(new Path(fileName)); 
Properties prop = new Properties(); 
//load properties 
prop.load(is) 
//retrieve properties 
prop.getProperty("app.name"); 

Wenn Sie (dev/test/prod) liefern dann APP_ENV benutzerdefinierte Java-Umgebungsvariable in spark-submit umgebungsspezifischen Eigenschaften haben:

${SPARK_HOME}/bin/spark-submit --conf \ 
"spark.driver.extraJavaOptions=-DAPP_ENV=dev spark.executor.extraJavaOptions=-DAPP_ENV=dev" \ 
--properties-file dev.property 

Ersetzen Sie Ihren Fahrer oder Testamentsvollstrecker Code:

//Load file to propert object using HDFS FileSystem 
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties")