Jak wczytać plik właściwości Javy i używać go w Spark?

Chcę zapisać argumenty Spark, takie jak plik wejściowy, plik wyjściowy do pliku właściwości Java i przekazać ten plik do sterownika Spark. Używam Spark-submit do przesyłania zadania, ale nie mogłem znaleźć parametru, aby przekazać plik właściwości. Masz jakieś sugestie?

Author: diplomaticguru, 2015-06-29

2 answers

Tutaj znalazłem jedno rozwiązanie:

Plik rekwizytów : (mypropsfile.conf) / / uwaga: przedrostek klucza oznacza " spark."w przeciwnym razie rekwizyty zostaną zignorowane.

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

Start

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

Jak wywołać w kodzie : (w kodzie)

sc.getConf.get("spark.driver.host")  // localhost
sc.getConf.get("spark.myapp.input")       // /input/path
sc.getConf.get("spark.myapp.output")      // /output/path
 36
Author: vijay kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-29 14:48:38

Podejście poprzedniej odpowiedzi ma ograniczenie, że każda właściwość powinna zaczynać się od spark w pliku właściwości-

Np.

Iskra.myapp.input
spark.myapp.wyjście

Jeśli Załóżmy, że masz właściwość, która nie zaczyna się od spark:

Praca.własność:

App. name = xyz

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

Spark zignoruje wszystkie właściwości nie posiadające prefiksu {[7] } z Komunikatem:

Warning: Ignoring non-spark Config property: app. name=test

Jak zarządzam plikiem właściwości w driverze i executorze aplikacji:

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

Kod Java umożliwiający dostęp do pliku pamięci podręcznej (job.właściwości):

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");

Jeśli masz właściwości specyficzne dla środowiska (dev/test/prod), podaj zmienną środowiskową java APP_ENV w spark-submit:

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

Wymień kod sterownika lub wykonywacza:

//Load file to propert object using HDFS FileSystem
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties")
 7
Author: Rahul Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-01 05:21:31