【问题标题】:How to pass configuration file that hosted in HDFS to Spark Application?如何将托管在 HDFS 中的配置文件传递给 Spark 应用程序?
【发布时间】:2019-09-25 00:53:28
【问题描述】:

我正在使用 Spark 结构化流。另外,我正在使用Scala。我想将配置文件传递给我的 spark 应用程序。此配置文件托管在HDFS。例如;

spark_job.conf (HOCON)

spark {
  appName: "",
  master: "",
  shuffle.size: 4 
  etc..
}

kafkaSource {
  servers: "",
  topic: "",
  etc..
}

redisSink {
  host: "",
  port: 999,
  timeout: 2000,
  checkpointLocation: "hdfs location",
  etc..
}

如何将其传递给 Spark 应用程序?如何在 Spark 中读取此文件(hosted HDFS)?

【问题讨论】:

  • 我见过这个解决方案。但我正在寻找其他方式。因为这种方式对我来说并不好。另外,我正在使用 Scala。
  • 还有一个等效的 Scala API。如果出于某种原因你不想那样做,你应该解释为什么不这样做。
  • 因为这个方案使用了hadoop配置文件。我的代码没有“hadoop conf”文件。另外,我想将任何“spark conf”传递给 appName 等应用程序。因此我不能使用 spark.sparkContext.hadoopConfiguration。我不知道我该怎么做。
  • 如果您不想将数据读入 Hadoop 配置对象,github.com/lightbend/config 是一种流行的通用 HOCON 配置读取器。您仍然需要使用 Scala HDFS API 读取文件。

标签: apache-spark hadoop configuration apache-spark-sql spark-structured-streaming


【解决方案1】:

您可以通过以下方式从 HDFS 读取 HOCON 配置:

import com.typesafe.config.{Config, ConfigFactory}
import java.io.InputStreamReader
import java.net.URI
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.conf.Configuration

val hdfs: FileSystem = FileSystem.get(new URI("hdfs://"), new Configuration())

val reader = new InputStreamReader(hdfs.open(new Path("/path/to/conf/on/hdfs")))

val conf: Config = ConfigFactory.parseReader(reader)

您还可以将您的名称节点的 URI 传递给 FileSystem.get(new URI("your_uri_here")),代码仍会读取您的配置。

【讨论】:

  • new Path("/path/to/conf/on/hdfs") 中,地址应该是hdfs://path/to/conf 还是只是path/to/conf?另外,非常感谢!
  • 只有hdfs上没有hdfs://前缀的路径。例如 /user/a-better-world/conf/spark_job.conf
  • import com.typesafe.config.{Cofig, ConfigFactory} 中的错字 .. 应该是“配置”。这个改动太小了,无法在帖子中编辑
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2015-07-22
  • 2021-11-17
  • 2018-07-23
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多