2016-08-23 2 views
0

Я изменение Уровень Журнала моих SparkContext с помощью sparkContext.setLogLevel("ERROR"), и когда я запускаю программу, я получаю:Getting Не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder» при использовании SparkContext.setLogLevel

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details 

Все по-прежнему работает, как обычно, но мне интересно, откуда это происходит, поскольку я не ввел вручную никаких зависимостей SLF4J. раздел Моя POM зависимость выглядит следующим образом (где scala.version является 2.11.8 и scala.binaty.version является 2,11):

<dependencies> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>${scala.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-compiler</artifactId> 
     <version>${scala.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.scalatest</groupId> 
     <artifactId>scalatest_${scala.binary.version}</artifactId> 
     <version>2.2.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.10.11</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_${scala.binary.version}</artifactId> 
     <version>${spark.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql_${scala.binary.version}</artifactId> 
     <version>${spark.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-hive_${scala.binary.version}</artifactId> 
     <version>${spark.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.9.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.scalaj</groupId> 
     <artifactId>scalaj-http_${scala.binary.version}</artifactId> 
     <version>2.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>net.liftweb</groupId> 
     <artifactId>lift-json_${scala.binary.version}</artifactId> 
     <version>3.0-M8</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.9</version> 
    </dependency> 
</dependencies> 

Любая идея, что причиной этого, и как я могу это исправить?

ответ

1

Я бы предположил, что одна из ваших зависимостей имеет определенную версию slf4j, которая переопределяет ту, которую использует Spark, что вызывает эту ошибку.

Я советую вам явно поставить slf4j зависимостей в вашем pom.xml

Например:

<properties> 
    <org.slf4j.version>1.7.5</org.slf4j.version> 
</properties> 

<dependencies> 
    <!-- Logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${org.slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>${org.slf4j.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${org.slf4j.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

Кроме того, убедитесь, что у вас есть действующий log4j.xml файл, который хранится в вашем пути к классам, и попытаться установите уровень журнала Spark в xml вместо использования кода.

Например:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
    </appender> 

    <logger name="org.apache.spark"> 
    <level value="error"/> 
    </logger> 

    <logger name="org.spark-project"> 
    <level value="error"/> 
    </logger> 

    <logger name="org.spark-project"> 
    <level value="error"/> 
    </logger> 

    <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
    </root> 

</log4j:configuration> 
+0

все еще получаю ошибку ..:/ – shakedzy

+0

У вас есть 'log4j.xml' конфигурационный файл? –

+0

Нет, только что узнал, что он существует :) Нужна ли мне в той же папке, что и 'pom.xml'? Будет ли основной из https://wiki.apache.org/logging-log4j/Log4jXmlFormat? – shakedzy

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