Chcę przechowywać argumenty Spark, takie jak plik wejściowy, plik wyjściowy do plików właściwości Java i przekazać ten plik do sterownika Spark. Korzystam z funkcji przesyłania z iskrą do przesłania zadania, ale nie mogę znaleźć parametru, który przekazałby plik właściwości. Czy masz jakieś sugestie?Jak załadować plik właściwości Java i użyć go w Sparku?
Odpowiedz
tutaj znalazłem jedno rozwiązanie: Plik
rekwizyty (mypropsfile.conf) // uwaga: prefiks klucz z "iskrą". inne rekwizyty będą ignorowane.
spark.myapp.input /input/path
spark.myapp.output /output/path
launch
$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf
jak zadzwonić w kodzie :(wewnątrz kodu)
sc.getConf.get("spark.driver.host") // localhost
sc.getConf.get("spark.myapp.input") // /input/path
sc.getConf.get("spark.myapp.output") // /output/path
+ ta sama sztuczka zadziała również w przypadku iskrzenia-skorupy .... –
dziękuję :-) To działało! – diplomaticguru
@ ramisetty.vijay: rozszerzenie pliku powinno być .conf lub możemy również użyć .properties? – Shankar
podejście poprzednią odpowiedź zawiera ograniczenie, które jest każda nieruchomość powinna zacząć z spark
w pliku właściwości -
np.
spark.myapp.input
spark.myapp.output
Jeśli Załóżmy, że masz nieruchomość, która nie rozpoczyna się spark
:
job.property:
app.name = xyz
$SPARK_HOME/bin/spark-submit --properties-file job.property
Spark zignoruje wszystkie właściwości nie posiada prefiksu spark.
z komunikatem:
Ostrzeżenie: Zignorowanie non-iskra nieruchomość config: app.name = test
Jak ja zarządzaj plikiem właściwości w sterowniku aplikacji i executorze:
${SPARK_HOME}/bin/spark-submit --files job.properties
Kod Java umożliwiający dostęp do pliku pamięci podręcznej (zadanie.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;
//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");
Jeśli masz środowiska specyficzne właściwości (dev/test/prod)
następnie dostarczyć APP_ENV niestandardową zmienną środowiskową java 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ń sterownika lub wykonawcy kod:
//Load file to propert object using HDFS FileSystem
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties")
czy zmęczyłeś tę opcję: --prop erties-file FILE Ścieżka do pliku, z którego można załadować dodatkowe właściwości –