Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在集群上运行spark作业时,如何传递外部资源yml/属性文件?_Apache Spark_Apache Spark Sql_Spark Streaming_Databricks_Spark Submit - Fatal编程技术网

Apache spark 在集群上运行spark作业时,如何传递外部资源yml/属性文件?

Apache spark 在集群上运行spark作业时,如何传递外部资源yml/属性文件?,apache-spark,apache-spark-sql,spark-streaming,databricks,spark-submit,Apache Spark,Apache Spark Sql,Spark Streaming,Databricks,Spark Submit,我使用的是spark sql 2.4.1版本,jackson jars&Java 8 在我的spark程序/作业中,我从外部“conditions.yml”文件中读取了一些配置/属性,该文件位于Java项目的“resource”文件夹中,如下所示 ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); try { driverConfig = mapper.readValue(

我使用的是spark sql 2.4.1版本,jackson jars&Java 8

在我的spark程序/作业中,我从外部“conditions.yml”文件中读取了一些配置/属性,该文件位于Java项目的“resource”文件夹中,如下所示

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        try {
            driverConfig = mapper.readValue(
                    Configuration.class.getClassLoader().getResourceAsStream("conditions.yml"),Configuration.class);

        }
如果我想在提交spark作业时从外部传递“conditions.yml”文件,如何传递该文件?它应该放在哪里

在我的程序中,我从“resources”目录(即getresourceastream(“conditions.yml”)…读取数据……如果我从spark submit传递此属性文件……作业将从此处从resources或外部路径获取

如果我想作为外部文件传递,我需要更改上面的代码吗

更新问题:

在我的spark驱动程序中,我将属性文件作为程序参数读取 正在加载的文件如下所示

 Config props = ConfigFactory.parseFile(new File(args[0]));
在shell脚本中运行spark作业时 我给如下

$SPARK_HOME/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--name MyDriver  \
--jars "/local/jars/*.jar" \
--files hdfs://files/application-cloud-dev.properties,hdfs://files/condition.yml \
--class com.sp.MyDriver \
--executor-cores 3 \
--executor-memory 9g \
--num-executors 5 \
--driver-cores 2 \
--driver-memory 4g \
--driver-java-options -Dconfig.file=./application-cloud-dev.properties \
--conf spark.executor.extraJavaOptions=-Dconfig.file=./application-cloud-dev.properties \
--conf spark.driver.extraClassPath=. \
--driver-class-path . \
 ca-datamigration-0.0.1.jar application-cloud-dev.properties condition.yml
错误:

没有加载属性。。。这里怎么了?将程序Args传递给Spark Job Java程序的正确方法是什么?

您必须在Spark submit命令中使用文件的--file path才能传递任何文件。请注意这是

语法是

 "--file /home/user/config/my-file.yml" 
如果在hdfs上,则提供hdfs路径

这应该将文件复制到类路径,并且您的代码应该能够从驱动程序中找到它

读取文件的实现应该通过以下方式完成

def readProperties(propertiesPath: String) = {

val url = getClass.getResource("/" + propertiesPath)
assert(url != null, s"Could not create URL to read $propertiesPath properties file")
val source = Source.fromURL(url)
val properties = new Properties
properties.load(source.bufferedReader)

properties
}

希望这就是您正在寻找的

谢谢,现在我正在代码中硬编码,从参考资料文件夹中读取,如果我使用--file给出其他路径,驱动程序如何理解它应该从--file获取此文件,而不是代码资源文件路径中提到的内容?当您提供文件选项时。。spark将把它复制到类路径。。在代码中,您应该将其读取为/yourfilename.yml