2015-07-01 2 views
1

Я запускаю Spark на кластере из пряжи и имеет log4j.properties, настроенный таким образом, что все журналы по умолчанию переходят в файл журнала. Однако для некоторых искровых заданий я хочу, чтобы журналы запускались на консоль без изменения файла log4j и кода фактического задания. Каков наилучший способ достичь этого? Спасибо всем.Переопределить конфигурации Spark log4j

+0

Так что я немного запутался, ваша цель, чтобы сделать это для общих рабочих мест или просто рабочие места, которые вы пишете сам? Если у вас есть собственные задания, вы не хотите изменять какие-либо из этих файлов? И какой тип кластера вы используете (пряжа, мезо, автономный)? – Holden

+0

Hi Holden. Извините за путаницу. Я запускаю Spark в кластере из пряжи с кучей других людей. Поскольку log4j является глобальным, я не хочу его изменять. Некоторые из заданий не являются моими, поэтому я не хочу менять исходный код. – neutralino

+0

А это делает его немного сложнее, спасибо за разъяснение. – Holden

ответ

0

За документации: upload a custom log4j.properties using spark-submit, by adding it to the --files list of files to be uploaded with the application.

Я просто попытался с log4j.properties файл на пряжу кластера, и она работает просто отлично.

spark-submit --class com.foo.Bar \ 
    --master yarn-cluster \ 
    --files path_to_my_log4j.properties \ 
    my.jar 
1

Я знаю, что для решения этой проблемы существует не менее 4 решений.

  1. Вы можете изменить ваши log4j.properties в искру машины

  2. При выполнении задания на искру лучше прикрепить файл log4j как файл конфигурации представляет искру пример

    бен/spark-submit --class com.viaplay.log4jtest.log4jtest --conf "spark.driver.extraJavaOptions = -Dlog4j.configuration = файл: /Users/feng/SparkLog4j/SparkLog4jTest/target/log4j2.properties" --master local [ *] /Users/feng/SparkLog4j/SparkLog4jTest/target/SparkLog4jTest-1.0-jar-with-dependencies.jar

  3. Попробуйте импортировать log4j в свой логический код.

    import org.apache.log4j.Logger; import org.apache.log4j.Level;

    положить этот регистратор в свою функцию SparkContext() Logger.getLogger («org»). SetLevel (Level.INFO); Logger.getLogger («akka»). SetLevel (Level.INFO);

  4. использование Спарк spark.sql.SparkSession

    импорт org.apache.spark.sql.SparkSession; искра = SparkSession.builder.getOrCreate() spark.sparkContext.setLogLevel («ERROR»)

Смежные вопросы