Как подавить сообщения INFO для искрового блока, работающего на EMR?

Я запускаю Spark на EMR, как описано в Запустить Spark и Spark SQL на Amazon Elastic MapReduce:

В этом учебном пособии вы познакомитесь с установкой и использованием Spark, быстрой и общий двигатель для крупномасштабной обработки данных на Amazon EMR кластер. Вы также создадите и запросите набор данных в Amazon S3, используя Spark SQL и узнайте, как контролировать Spark на кластере EMR Amazon с Amazon CloudWatch.

Я пытаюсь подавить журналы INFO, редактируя $HOME/spark/conf/log4j.properties безрезультатно.

Результат выглядит так:

$ ./spark/bin/spark-sql
Spark assembly has been built with Hive, including Datanucleus jars on classpath
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/.versions/2.4.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/.versions/spark-1.1.1.e/lib/spark-assembly-1.1.1-hadoop2.4.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2014-12-14 20:59:01,819 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1009)) - mapred.input.dir.recursive is deprecated. Instead, use mapreduce.input.fileinputformat.input.dir.recursive
2014-12-14 20:59:01,825 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1009)) - mapred.max.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.maxsize
2014-12-14 20:59:01,825 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1009)) - mapred.min.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize
2014-12-14 20:59:01,825 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1009)) - mapred.min.split.size.per.rack is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.rack

Как подавить сообщения INFO выше?

Ответ 1

Вы также можете просто добавить параметр конфигурации при создании кластера, если знаете, что хотите подавить ведение журнала для нового кластера EMR.

EMR принимает параметры конфигурации как JSON, которые вы можете вводить непосредственно в консоль AWS или передавать через файл при использовании CLI.

В этом случае, чтобы изменить уровень журнала на WARN, здесь JSON:

[
  {
    "classification": "spark-log4j",
    "properties": {"log4j.rootCategory": "WARN, console"}
  }
]

В консоли вы должны добавить это на первом шаге создания:

конфигурация в консоли AWS

Или, если вы создаете кластер с помощью CLI:

aws emr create-cluster <options here> --configurations config_file.json

Вы можете прочитать в документации EMR.

Ответ 2

Я смог сделать это, отредактировав $HOME/spark/conf/log4j.properties по желанию и вызывая spark-sql с --driver-java-options следующим образом:

./spark/bin/spark-sql --driver-java-options "-Dlog4j.configuration=file:///home/hadoop/spark/conf/log4j.properties"

Я мог проверить, что правильный файл использовался, добавляя -Dlog4j.debug к параметрам:

./spark/bin/spark-sql --driver-java-options "-Dlog4j.debug -Dlog4j.configuration=file:///home/hadoop/spark/conf/log4j.properties"

Ответ 3

spark-sql --driver-java-options "-Dlog4j.configuration = file:///home/hadoop/conf/log4j.properties"

cat conf/log4j.properties

# Set everything to be logged to the console
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=WARN
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=WARN