【问题标题】:Add conf file to classpath in Google Dataproc将 conf 文件添加到 Google Dataproc 中的类路径
【发布时间】:2020-02-02 21:39:40
【问题描述】:

我们正在使用 HOCON 配置在 Scala 中构建 Spark 应用程序,该配置称为 application.conf

如果我将application.conf 添加到我的 jar 文件并在 Google Dataproc 上开始工作,它可以正常工作:

gcloud dataproc jobs submit spark \
  --cluster <clustername> \
  --jar=gs://<bucketname>/<filename>.jar \
  --region=<myregion> \
  -- \
  <some options>

我不想将application.conf 与我的 jar 文件捆绑在一起,而是单独提供,但我无法正常工作。

尝试了不同的东西,即

  1. --jars=gs://&lt;bucketname&gt;/application.conf 指定application.conf(应该根据this answer 工作)
  2. 使用--files=gs://&lt;bucketname&gt;/application.conf
  3. 与 1. + 2. 相同,在集群的 Master 实例上使用 /tmp/ 中的应用程序 conf,然后使用 file:///tmp/application.conf 指定本地文件
  4. 使用 --properties=spark.driver.extraClassPath=gs://&lt;bucketname&gt;/application.conf 为 spark 定义 extraClassPath(以及用于执行程序)

使用所有这些选项我得到一个错误,它在配置中找不到密钥:

Exception in thread "main" com.typesafe.config.ConfigException$Missing: system properties: No configuration setting found for key 'xyz'

此错误通常表示 HOCON 配置中有错误(密钥 xyz 未在 HOCON 中定义)或 application.conf 不在类路径中。由于在我的 jar 文件中使用完全相同的配置,因此我认为是后者。

还有其他选项可以将application.conf 放在类路径中吗?

【问题讨论】:

    标签: apache-spark google-cloud-dataproc hocon


    【解决方案1】:

    如果--jars 不能按照this answer 的建议工作,您可以尝试init action。首先将您的配置上传到 GCS,然后编写一个初始化操作将其下载到 VM,将其放入类路径中的文件夹或更新 spark-env.sh 以包含配置的路径。

    【讨论】:

    • 谢谢,这为我指明了正确的方向!如果我理解正确,init 操作仅在创建集群或节点时执行一次。对于 application.conf,我们希望能够经常更改它。只有在创建集群时(通过 --parameter)也可以通过 gcloud 更改 spark-env.sh,但在这里我们可以定义一个文件夹,稍后将保存所有配置,这应该可以工作。为了测试这一点,我手动将 spark.driver.extraClassPath 和 spark.executor.extraClassPath 添加到 /etc/spark/conf.dist/spark-defaults.conf。现在可以了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多