2016-10-21 3 views
3

Я работаю с моими искрами в режиме «клиент» во время разработки. Я использую «--file» для обмена конфигурационными файлами с исполнителями. Драйвер читал файлы конфигурации локально. Теперь я хочу развернуть это задание в режиме «кластера». У меня возникли трудности с совместным использованием файлов конфигурации с драйвером.Поделиться конфигурационными файлами с помощью функции «исправить-отправить» в режиме кластера

Ex, я передаю имя файла конфигурации как extraJavaOptions как для драйвера, так и для исполнителей. Я читаю этот файл с помощью SparkFiles.get()

val configFile = org.apache.spark.SparkFiles.get(System.getProperty("config.file.name")) 

Это хорошо работает на исполнителях, но терпит неудачу на водителе. Я думаю, что файлы разделяются только с исполнителями, а не с контейнером, в котором работает драйвер. Одним из вариантов является сохранение файлов конфигурации в S3. Я хотел проверить, может ли это быть достигнуто с помощью spark-submit.

> spark-submit --deploy-mode cluster --master yarn --driver-cores 2 
> --driver-memory 4g --num-executors 4 --executor-cores 4 --executor-memory 10g \ 
> --files /home/hadoop/Streaming.conf,/home/hadoop/log4j.properties \ 
> --conf **spark.driver.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --conf **spark.executor.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --class .... 

ответ

1

Вы должны попробовать опцию --properties-file в команде отправки Spark.

Например файл свойств содержимого

spark.key1=value1 
spark.key2=value2 

Все клавиши должно быть prefixed с spark.

затем используйте команду spark-submit, чтобы передать файл свойств.

bin/spark-submit --properties-file propertiesfile.properties 

Затем в коде, вы можете получить ключи, используя ниже sparkcontext getConf метода.

sc.getConf.get("spark.key1") // returns value1 

Как только вы получите значения ключа, вы можете использовать его везде.

+1

Благодарим за отзыв! У меня уже есть файл конфигурации в другом формате (typafe config). Существует несколько преимуществ для сохранения конфигураций, а не для размещения их в виде пары KV в файле. Не может быть, чтобы мой файл конфигурации был совместно с драйвером? – Cheeko

+0

@Cheeko: Что вы имеете в виду, делясь файлами conf с драйвером? что есть в конфиде? также, если вы можете читать у исполнителя, почему вы не читали его в драйвере? прочитайте то же самое в драйвере и передайте его исполнителю в качестве широковещательной переменной .. поэтому вы можете использовать его в обоих местах .. – Shankar

+0

Конфигурационный файл не находится в местоположении, доступном для всех узлов. Поэтому я использую spark-submit с файлами -files, чтобы передать файл всем исполнителям. Похоже, что -файлы не передают файл драйверу, который запускает другой узел в режиме «кластера». – Cheeko