如何加载java属性文件并在Spark中使用?
2022-09-01 22:40:36
我想将 Spark 参数(如输入文件、输出文件)存储到 Java 属性文件中,并将该文件传递到 Spark 驱动程序中。我正在使用 spark-submit 来提交作业,但找不到传递属性文件的参数。你有什么建议吗?
我想将 Spark 参数(如输入文件、输出文件)存储到 Java 属性文件中,并将该文件传递到 Spark 驱动程序中。我正在使用 spark-submit 来提交作业,但找不到传递属性文件的参数。你有什么建议吗?
在这里我找到了一个解决方案:
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:
应用名称 = xyz
$SPARK_HOME/bin/spark-submit --properties-file job.property
Spark 将忽略所有没有前缀 spark 的属性。
并显示以下消息:
警告:忽略非 spark 配置属性:app.name=test
如何管理应用程序驱动程序和执行器中的属性文件:
${SPARK_HOME}/bin/spark-submit --files job.properties
用于访问缓存文件的 Java 代码(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");
如果您有特定于环境的属性(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")