当前位置: 首页 > 知识库问答 >
问题:

将多个类型安全配置文件传递给纱线群集模式应用程序

柴泰平
2023-03-14

我正在尝试在我的Spark应用程序中使用多个(通过include)类型安全配置文件,我正在集群模式下提交给一个YARN队列。我基本上有两个配置文件,下面提供了文件布局:

    null

上面的两个文件都是我的application.jar的外部文件,所以我使用“--files”(可以在下面看到)将它们传递给yarn

我正在使用Typesafe配置库来解析我的“application-main.conf”,在这个主配置中,我试图通过替换使用env.properties文件中的一个属性,但是变量名没有得到解析:(我不知道为什么。

txn.hdfs.fs.home=hdfs://dev/1234/data

# application-txn.conf
include required(file("env.properties"))

app {
  raw-data-location = "${txn.hdfs.fs.home}/input/txn-raw"
}


//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-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的目录

我相信配置实际上能够读取两个文件...否则它会因为“required”关键字而失败。我通过添加另一个带有虚拟文件名的include语句来验证这一点,应用程序在解析配置时失败。我真的不知道现在发生了什么事:(。

你知道是什么导致了这个决议的失败吗?如果有帮助的话:当我在本地运行多个配置文件时,解析效果很好

共有1个答案

干亮
2023-03-14

application-txn.conf中的语法错误。

变量应该在字符串之外,如下所示:

raw-data-location = ${txn.hdfs.fs.home}"/input/txn-raw"
 类似资料:
  • 我认为传递自定义exitcode是不可能的,因为驱动程序传递的任何exitcode都将转换为yarn状态,而yarn将把任何失败的exitcode转换为1或失败。

  • 我正在使用yarn-cluster Master运行我的spark应用程序。 应用程序是做什么的? 外部服务根据对RESTService的HTTP请求生成jsonFile Spark需要在解析JSON后读取该文件并执行一些工作 我认为将文件作为--files传递会让我忘记保存和删除这个文件。类似于通过-过程-忘记。 那么,如何读取通过-files传递的文件呢?唯一的解决方案是手工创建路径,硬编码“

  • 现在我想在一个集群中用spark-submit(集群模式)运行我的应用程序。我的项目的所有依赖项的jar文件都存储在HDFS上。只要我的配置文件包含在jar文件中,一切都可以正常工作。但这对于测试目的来说是不实际的,因为我总是要重新构建JAR。 因此,我排除了项目的配置文件,并通过“driver-class-path”添加了它们。这在客户端模式下工作,但如果我现在将配置文件移动到HDFS并在集群模

  • 问题内容: 我正在建立一个包括条目之间关系的通讯簿。我为个人,公司,场地和角色有单独的模型。在我的索引页面上,我想列出每个模型的所有实例,然后对其进行过滤。这样一个人可以轻松地搜索和查找条目。我已经能够使用通用视图列出单个模型,并使用get_extra_context显示另一个模型: 我还可以使用自定义视图列出单个模型: 这是这两个测试的urls.py: 所以我的问题是“如何修改此参数以将更多模型

  • 我有一个巨大的文件,里面有大约100万条记录。我的要求是从文件中读取记录,并具有可配置数量的线程,这些线程跨多个线程处理记录。 目前,我正在使用单个线程读取该文件,并将其存储到一个集合中。 如何将集合元素按顺序传递给不同的线程进行进一步处理?

  • 我正在开发一个Spring Boot应用程序,我必须让它作为一个war在我们的Weblogic 12c服务器上运行。 我试图找到一种方法将默认的Spring活动配置文件(此处和此处的信息)传递给应用程序,而不必在机器本身设置环境变量。如果可能的话,我希望能够使用Weblogic管理控制台指定此配置文件。 我尝试使用“Environment/Servers/MyServer/Server Start