Вывести имя приложения Spark в журнал драйверов - PullRequest
1 голос
/ 06 февраля 2020

Мне нужно вывести имя приложения Spark (spark.app.name) в каждой строке журнала драйверов (вместе с другими атрибутами, такими как сообщение и дата). До сих пор мне не удалось найти правильную конфигурацию log4j или любые другие подсказки. Как это можно сделать?

Буду признателен за любую помощь.

Использование автономного режима Spark.

1 Ответ

1 голос
/ 06 февраля 2020

Один способ, который, кажется, работает, включает следующие два шага:

  1. Создайте свой пользовательский файл log4j.properties и измените макет .:

    ...
    # this is just an example layout config
    # remember the rest of the configuration
    log4j.appender.stdout.layout.ConversionPattern=${appName}--%d{yyyy-mm-dd HH:mm:ss,SSS} [%-5p] [%c] - %m%n
    

    Это файл должен находиться в root вашего пути к классам (как в src/main/resources для большинства инструментов сборки) или редактировать <spark-home>/conf/log4j.properties на серверах в вашем кластере.

  2. Затем установить свойство с указанным ключом перед загрузкой контекста искры:

    System.setProperty("appName", "application-name");
    SparkSession spark = SparkSession.builder().appName("application-name")
    ...
    

В моем быстром тесте вышеприведенное выдает что-то похожее во всех строках (проверено в локальном режиме):

application-name--2020-53-06 16:53:35,741 [INFO ] [org.apache.spark.SparkContext] - Running Spark version 2.4.4
application-name--2020-53-06 16:53:36,032 [WARN ] [org.apache.hadoop.util.NativeCodeLoader] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
application-name--2020-53-06 16:53:36,316 [INFO ] [org.apache.spark.SparkContext] - Submitted application: JavaWordCount
application-name--2020-53-06 16:53:36,413 [INFO ] [org.apache.spark.SecurityManager] - Changing view acls to: ernest
application-name--2020-53-06 16:53:36,414 [INFO ] [org.apache.spark.SecurityManager] - Changing modify acls to: ernest
application-name--2020-53-06 16:53:36,415 [INFO ] [org.apache.spark.SecurityManager] - Changing view acls groups to: 
application-name--2020-53-06 16:53:36,415 [INFO ] [org.apache.spark.SecurityManager] - Changing modify acls groups to: 
application-name--2020-53-06 16:53:36,416 [INFO ] [org.apache.spark.SecurityManager] - SecurityManager: authentication disabled; ui acls disabled; users  with view permissions: Set(ernest); groups with view permissions: Set(); users  with modify permissions: Set(ernest); groups with modify permissions: Set()
application-name--2020-53-06 16:53:36,904 [INFO ] [org.apache.spark.util.Utils] - Successfully started service 'sparkDriver' on port 33343.
application-name--2020-53-06 16:53:36,934 [INFO ] [org.apache.spark.SparkEnv] - Registering MapOutputTracker
...

Вместо ручной установки переменной в коде, вы можете вызвать spark-submit с чем-то вроде

--conf 'spark.driver.extraJavaOptions=-DappName=application-name'

Для более постоянного изменения, вы можете отредактировать <spark-home>/conf/log4j.properties ( скопируйте шаблон, если файл не существует) с изменением макета, и вызовите spark-submit / spark-shell, et c. с системным свойством.

...