【发布时间】:2019-05-02 23:50:20
【问题描述】:
我在尝试在我的 Spark 应用程序中使用多个(通过包含)Typesafe 配置文件时遇到了一些困难,我在集群模式下提交到 YARN 队列。我基本上有两个配置文件,下面提供了文件布局:
- env-common.properties
- application-txn.conf(此文件使用“包含”来引用上述文件)
以上两个文件都在我的 application.jar 外部,所以我使用“--files”将它们传递给 yarn(如下所示)
我正在使用 Typesafe 配置库来解析我的“application-main.conf”,在这个主 conf 中,我试图通过替换使用 env.properties 文件中的属性,但变量名没有得到解析:(我不知道为什么。
env.properties
txn.hdfs.fs.home=hdfs://dev/1234/data
应用程序-txn.conf:
# application-txn.conf
include required(file("env.properties"))
app {
raw-data-location = "${txn.hdfs.fs.home}/input/txn-raw"
}
Spark 应用代码:
//propFile in the below block maps to "application-txn.conf" from the app's main method
def main {
val config = loadConfig("application-txn.conf")
val spark = SparkSession.builkder.getOrCreate()
//Code fails here:
val inputDF = spark.read.parquet(config.getString("app.raw-data-location"))
}
def loadConf(propFile:String): Config = {
ConfigFactory.load()
val cnf = ConfigFactory.parseResources(propFile)
cnf.resolve()
}
Spark 提交代码(从 shell 脚本调用):
spark-submit --class com.nic.cage.app.Transaction \
--master yarn \
--queue QUEUE_1 \
--deploy-mode cluster \
--name MyTestApp \
--files application-txn.conf,env.properties \
--jars #Typesafe config 1.3.3 and my app.jar go here \
--executor-memory 2g \
--executor-cores 2 \
app.jar application-txn.conf
当我运行上述程序时,我能够解析配置文件,但我的应用程序在尝试从 HDFS 读取文件时失败,因为它找不到具有以下名称的目录: ${txn.hdfs.fs.home}/input/txn-raw
我相信配置实际上能够读取这两个文件......否则它会因为“必需”关键字而失败。我通过添加另一个包含虚拟文件名的包含语句来验证这一点,并且应用程序在解析配置时失败。真的不知道现在发生了什么:(。
任何想法可能导致此解决方案失败? 如果有帮助:当我使用多个配置文件在本地运行时,分辨率工作正常
【问题讨论】:
标签: apache-spark hadoop-yarn typesafe-config