Передача нескольких типов безопасных файлов конфигурации в приложение режима кластера пряжи - PullRequest
1 голос
/ 03 мая 2019

Я изо всех сил пытаюсь использовать несколько (через include) конфигурационных файлов Typesafe в моем приложении Spark, которое я отправляю в очередь YARN в режиме кластера.В основном у меня есть два конфигурационных файла, и макеты файлов представлены ниже:

  1. env-common.properties
  2. application-txn.conf (этот файл использует «include» для ссылки на вышеone)

Оба вышеперечисленных файла являются внешними по отношению к моему application.jar, поэтому я передаю их в yarn с помощью «--files» (можно увидеть ниже)

Iя использую библиотеку конфигурации Typesafe для анализа моего "application-main.conf", и в этом главном conf я пытаюсь использовать свойство из файла env.properties путем подстановки, но имя переменной не разрешается :( и яЯ не уверен почему.

env.properties

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

application-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 Submit Code (вызывается из сценария оболочки):

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 Ответ

1 голос
/ 03 мая 2019

Синтаксис в application-txn.conf неправильный.

Переменная должна быть вне строки, например:

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