如何加载java属性文件并在Spark中使用?
我想将Spark参数(如输入文件、输出文件)存储到Java属性文件中,并将该文件传递到Spark驱动程序中。我正在使用spark submit提交作业,但找不到传递属性文件的参数。你有什么建议吗?在这里,我找到了一个解决方案: 道具文件:(mypropsfile.conf)/注意:在密钥前面加上“spark”。否则道具将被忽略。如何加载java属性文件并在Spark中使用?,java,apache-spark,properties-file,Java,Apache Spark,Properties File,我想将Spark参数(如输入文件、输出文件)存储到Java属性文件中,并将该文件传递到Spark驱动程序中。我正在使用spark submit提交作业,但找不到传递属性文件的参数。你有什么建议吗?在这里,我找到了一个解决方案: 道具文件:(mypropsfile.conf)/注意:在密钥前面加上“spark”。否则道具将被忽略。 spark.myapp.input /input/path spark.myapp.output /output/path 发布 $SPARK_HOME/bin/sp
spark.myapp.input /input/path
spark.myapp.output /output/path
发布
$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf
如何调用代码:(内部代码)
前面答案的方法有一个限制,即每个属性都应该在属性文件中以
spark
开头-
e、 g
spark.myapp.inputspark.myapp.output 如果假设您的属性不是以
spark
开头:
作业。属性:
${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")
app.name=xyz
Spark将忽略所有没有前缀的属性。Spark。并显示消息:
${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")
警告:忽略非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\u 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")
更换驱动程序或执行器代码:
${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")
您是否厌倦了此选项:--要从中加载额外数据的文件的属性文件路径properties@ramisetty.vijay:文件扩展名应该是.conf,或者我们也可以使用.properties?它也适用于.properties文件。但是里面的格式应该是spark.my.key\t MyValue如何添加多个属性文件?最好是在.Warning目录中,使用--properties文件会覆盖以前定义的任何spark-defaults.conf(),因此可能需要创建自己的合并版本。使用--properties文件可以覆盖spark-defaults.conf中定义的任何设置,这些设置对于每个环境都可能不同。您需要确保属性文件是合并版本吗?它是如何连接到HDFS文件系统的?在我的例子中,我使用的是HDFS。您也可以使用JavaIO读取属性文件。