如何加载java属性文件并在Spark中使用?

2022-09-01 22:40:36

我想将 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

答案 2

前面的答案的方法有一个限制,即每个属性都应该在属性文件中以开头 -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")

推荐