入力ファイル、出力ファイルなどのSpark引数をJavaプロパティファイルに格納し、そのファイルをSparkドライバーに渡します。ジョブの送信にspark-submitを使用していますが、プロパティファイルを渡すパラメーターが見つかりませんでした。何か提案はありますか?
ここで私は1つの解決策を見つけました:
props file:(mypropsfile.conf)// 注:キーの前に「spark」を付けます。それ以外の場合、propsは無視されます。
spark.myapp.input /input/path
spark.myapp.output /output/path
起動
$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf
コードの呼び出し方法 :(コード内)
sc.getConf.get("spark.driver.Host") // localhost
sc.getConf.get("spark.myapp.input") // /input/path
sc.getConf.get("spark.myapp.output") // /output/path
前の回答のアプローチには、すべてのプロパティがプロパティファイルのspark
で始まるという制限があります。
例えば.
spark.myapp.input
spark.myapp.output
spark
で始まらないプロパティがある場合:
job.property:
app.name = xyz
$SPARK_HOME/bin/spark-submit --properties-file job.property
Sparkは、接頭辞spark.
が付いていないすべてのプロパティを無視します:
警告:非スパーク設定プロパティを無視:app.name = test
アプリケーションのドライバーとエグゼキューターでプロパティファイルを管理する方法:
${SPARK_HOME}/bin/spark-submit --files job.properties
キャッシュファイル(job.properties)にアクセスするJavaコード:
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");
環境固有のプロパティ(dev/test/prod)
がある場合は、APP_ENV custom Java spark-submit
の環境変数):
${SPARK_HOME}/bin/spark-submit --conf \
"spark.driver.extraJavaOptions=-DAPP_ENV=dev spark.executor.extraJavaOptions=-DAPP_ENV=dev" \
--properties-file dev.property
ドライバーまたはエグゼキューターのコードを置き換えます:
//Load file to propert object using HDFS FileSystem
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties")