上一个答案的方法有一个限制,即属性文件中的每个属性都应该以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),则在 spark-submit 中提供 APP_ENV 自定义 java 环境变量:
${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")