如何从 Java Spark 应用程序中读取 app.properties 文件

Posted

技术标签:

【中文标题】如何从 Java Spark 应用程序中读取 app.properties 文件【英文标题】:How to read app.properties file from Java Spark application 【发布时间】:2021-02-14 18:04:12 【问题描述】:

我实现了 Java Spark 应用程序,我使用 spark-submit 命令在 EMR 集群上运行该应用程序。 我想传递我在应用程序中使用的 app.properties。 app.properties 如下所示:

local_fetcher = false
local_storage = false
local_db = true
.
.
.

我希望能够在我的应用程序中获取这些数据。 我的问题是:

    app.properties 应该放在哪里? 如何在我的 Spark 应用程序中读取它的内容? 我应该能够从驱动程序和执行程序中读取它吗?

我尝试使用--properties-file 标志,但我知道它会覆盖默认的 Spark 配置,这不是我想要的。 我看到我可能会使用--file 标志,但不明白该文件应该放在哪里以及如何在我的应用程序中读取它。

【问题讨论】:

【参考方案1】:

第一个选项:--files

--files FILES 逗号分隔的文件列表,放置在每个执行器的工作目录中。这些文件在执行器中的文件路径可以通过 SparkFiles.get(fileName) 访问。

spark-submit --files /path/to/app.properties /path/to/your/fat/jar.jar

您可以使用SparkFiles获取上传文件的确切位置。

第二个选项:getResourceAsStream

将您的 app.properties 放入作业的 JAR 文件中,然后像这样加载它:

val appPropertiesStream = scala.io.Source.fromInputStream(
  classOf[yourObject].getClassLoader.getResourceAsStream("/app.properties")

val appPropertiesString = scala.io.Source.fromInputStream(appPropertiesStream ).mkString

(请注意“app.properties”之前的正斜杠,据我所知它很重要)

【讨论】:

奥列格感谢您的评论。如果我理解正确的话,在第一个选项中,驱动程序将无权访问此文件。那么第二个选项呢?

以上是关于如何从 Java Spark 应用程序中读取 app.properties 文件的主要内容,如果未能解决你的问题,请参考以下文章

Spark steaming 从 Kafka 读取并在 Java 中应用 Spark SQL 聚合

从Greenplum上的表中读取数据时,如何在Spark-jdbc应用程序的选项“dbtable”中指定子查询? [复制]

在 java spark 中从 REST API 读取 csv

Apache Spark Java - 如何遍历行数据集并删除空字段

Spark - 从 S3 读取分区数据 - 分区是如何发生的?

Spark-从Kafka读取数据