Je veux stocker les arguments Spark tels que le fichier d'entrée, le fichier de sortie dans un fichier de propriétés Java et passer ce fichier dans le pilote Spark. J'utilise spark-submit pour soumettre le travail, mais je n'ai pas trouvé de paramètre pour transmettre le fichier de propriétés. Avez vous des suggestions?
ici j'ai trouvé une solution:
fichier d'accessoires: (mypropsfile.conf) // note: préfixez votre clé avec "spark". sinon les accessoires seront ignorés.
spark.myapp.input /input/path
spark.myapp.output /output/path
lancement
$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf
comment appeler le code :( dans le code)
sc.getConf.get("spark.driver.Host") // localhost
sc.getConf.get("spark.myapp.input") // /input/path
sc.getConf.get("spark.myapp.output") // /output/path
L'approche de la réponse précédente a la restriction selon laquelle chaque propriété doit commencer par spark
dans le fichier de propriétés -
par exemple.
spark.myapp.input
spark.myapp.output
Si supposons que vous ayez une propriété qui ne commence pas par spark
:
job.property:
app.name = xyz
$SPARK_HOME/bin/spark-submit --properties-file job.property
Spark ignorera toutes les propriétés n'ayant pas de préfixe spark.
avec message:
Avertissement: Ignorer la propriété de configuration non-spark: app.name = test
Comment je gère le fichier de propriétés dans le pilote et l'exécuteur de l'application:
${SPARK_HOME}/bin/spark-submit --files job.properties
code Java pour accéder au fichier cache (job.properties):
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;
import Java.io.InputStream;
import Java.io.FileInputStream;
//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));
// Or use Java IO
InputStream is = new FileInputStream("/res/example.xls");
Properties prop = new Properties();
//load properties
prop.load(is)
//retrieve properties
prop.getProperty("app.name");
Si vous avez des propriétés spécifiques à l'environnement (dev/test/prod)
puis fournissez APP_ENV personnalisé Java dans spark-submit
:
${SPARK_HOME}/bin/spark-submit --conf \
"spark.driver.extraJavaOptions=-DAPP_ENV=dev spark.executor.extraJavaOptions=-DAPP_ENV=dev" \
--properties-file dev.property
Remplacez votre code pilote ou exécuteur:
//Load file to propert object using HDFS FileSystem
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties")