как отправить пользовательский файл log4j.xml с помощью spark-submit в кластере с несколькими узлами, используя HDFS с автономным диспетчером кластера spark

Я отправляю java jar, используя spark-submit, чтобы запустить автономный менеджер кластера. Но я не могу предоставить ему собственный файл log4j.xml. Если я использовал параметр --files, то мне нужно скопировать этот файл log4j на все машины в той же позиции, или если я передам его, используя путь hdfs://, тогда он не примет этот файл как log4j и переключится на файл log4j по умолчанию.

Я также использовал -Dlog4j.configuration как с локальным, так и с hdfs-путем, но возникает та же проблема, что и при использовании --files.

Помогите пожалуйста если кто знает решение

Заранее спасибо.


person Prakul Singhal    schedule 11.01.2017    source источник


Ответы (1)


Spark не поддерживает запись журналов в HDFS с использованием log4j, вместо этого вы можете записывать журналы локально в своем ящике Unix.

Параметры для указания log4j в команде spark-submit:

--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration= Location of your log4j.properties file"

--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration= location of your log4j.properties file"

Вы должны создать собственный файл log4j.properties, а не log4j.xml в вашем локальном ящике Unix.

Если вы хотите создавать пользовательские журналы в HDFS, вы можете создать интерфейс в java или типаж в scala, чтобы указать уровни ведения журнала и записать журнал в HDFS для получения дополнительной справки, вы можете проверить это вопрос.

person Abhinandan Bhattacharjee    schedule 11.01.2017
comment
Я пишу журнал в поле unix, я просто читаю файл log4j из местоположения HDFS. При использовании log4j.configuration он ищет файл из локальной файловой системы, поэтому мне нужно скопировать файл saem на все мои рабочие узлы. Поэтому я ищу способ отправить файл log4j из HDFS или с клиентского компьютера, чтобы его не нужно было копировать на всех узлах. - person Prakul Singhal; 11.01.2017
comment
нет необходимости копировать файл log4j на все узлы. Узел, с которого вы отправляете задания, должен быть исправлен, поэтому файл должен находиться только в этом узле, и всякий раз, когда вы отправляете его, искра задания загружает внешние файлы jar r, которые вы указываете в spark-submit, в кластер для запуска в распределенном режиме. - person Abhinandan Bhattacharjee; 11.01.2017
comment
да, я использую фиксированный узел, но когда я указал путь к файлу log4j, он будет искать этот путь на узле драйвера, который отличается от представленного узла, из-за чего я получил следующую ошибку: log4j: ERROR Не удалось проанализировать URL-адрес [файл :/данные/log4j.xml]. java.io.FileNotFoundException: /data/log4j.xml (Нет такого файла или каталога) - person Prakul Singhal; 11.01.2017
comment
Укажите файл log4j.properties через указанные выше параметры в моем ответе, а не через параметр --files. не могли бы вы показать мне вашу команду spark-submit? - person Abhinandan Bhattacharjee; 11.01.2017
comment
Я использую переменную -Dlog4j.configuration. Команда spark-submit выглядит следующим образом: spark-submit --conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///data/log4j.xml --deploy-mode cluster --master $SPARK_MASTER --class com.main hdfs://xyz.jar - person Prakul Singhal; 11.01.2017
comment
это должна быть команда spark-submit --class xyz --master "yarn" --deploy-mode "client" --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=../conf/spark-log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=../conf/spark-log4j.properties" ../lib/xyz.jar - person Abhinandan Bhattacharjee; 11.01.2017
comment
Мне нужно использовать автономный менеджер кластера spark. Приведенная выше команда уже работает для диспетчера кластеров пряжи, используя параметр --files для файла log4j.xml. - person Prakul Singhal; 11.01.2017
comment
да, эта команда для режима клиента или автономного режима. По сути, в каком бы узле вы ни хранили свою банку, файл свойств также не должен храниться во всех узлах. - person Abhinandan Bhattacharjee; 11.01.2017
comment
да, это будет работать, если я использовал клиентский режим, но моя работа - это длительная работа, которую нужно запускать в кластерном режиме, чтобы я мог отслеживать ее с помощью пользовательского интерфейса искры, и вся обработка ресурсов будет выполняться самой искрой. Так что клиентский режим не решил мою проблему. - person Prakul Singhal; 12.01.2017