Как добавить файл конфигурации в путь к классам всех исполнителей Spark в Spark 1.2.0?
Я использую Configafe Config, https://github.com/typesafehub/config, для параметризации задания Spark, выполняющегося в режиме нитевого кластера, с конфигурационным файлом. Поведение Configades Config по умолчанию заключается в поиске пути к классам с именами, соответствующими регулярному выражению, и автоматически загружать их в ваш класс конфигурации с помощью ConfigFactory.load()
(для наших целей предполагаемый файл, который он ищет, называется application.conf
),
Я могу загрузить файл конфигурации в драйвер, используя --driver-class-path <directory containing configuration file>
, но используя --conf spark.executor.extraClassPath=<directory containing configuration file>
, не помещает ресурс на classpath всех исполнителей вроде этого. Исполнители сообщают, что они не могут найти определенный параметр конфигурации для ключа, который существует в файле конфигурации, который я пытаюсь добавить к их классам.
Каков правильный способ добавления файла в пути к классам всех JVM-исполнителей с использованием Spark?
Ответы
Ответ 1
Похоже, что значение свойства spark.executor.extraClassPath
относится к рабочему каталогу приложения НА ИСПОЛНИТЕЛЕ.
Таким образом, чтобы правильно использовать это свойство, следует использовать --files <configuration file>
чтобы сначала --files <configuration file>
Spark, чтобы скопировать файл в рабочий каталог всех исполнителей, затем используйте spark.executor.extraClassPath=./
Чтобы добавить рабочий каталог исполнителя к его классовому пути. Эта комбинация приводит к тому, что исполнитель может считывать значения из файла конфигурации.
Ответ 2
Я использую метод SparkContext addFile
val sc: SparkContext = {
val sparkConf = new SparkConf()
.set("spark.storage.memoryFraction", "0.3")
.set("spark.driver.maxResultSize", "10g")
.set("spark.default.parallelism", "1024")
.setAppName("myproject")
sparkConf.setMaster(getMaster)
val sc = new SparkContext(sparkConf)
sc.addFile("application.conf")
sc
}