2017-06-13 113 views
0

我有一个scala jar文件,它从hive视图中读取数据并在hdfs中创建一个csv文件,这个jar在从CLI调用时处于Spark集群模式,但是从Oozie的触发工作流时,它抛出以下错误spark动作抛出'Classpath包含多个SLF4J绑定'来自oozie的错误

SLF4J : Classpath contains multiple SLF4J bindings. 
SLF4J : Found binding in [jar:file:/data/hadoop-data/9/yarn/nm/filecache/7505/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J : Found binding in [jar:file:/data/hadoop-data/1/yarn/nm/usercache/cntr/filecache/216569/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J : Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.8.3-1.cdh5.8.3.p2256.2455/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

SLF4J : Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 

我已经做了一些搜索和发现,在pom.xml中的依赖关系添加排除会做伎俩,所以下面我已经加入到我在pom.xml中排除

<exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
</exclusions> 

,但我依然得到同样的错误触发从Oozie的工作流程

火花罐子当任何建议,欢迎

+0

它的原因是您的类路径中有多个'slf4j-log4j12-1.7.5.jar',就像您在错误中看到的一样。我想这不是一个错误,它只是一个信息,不是吗? –

+0

嗨@RameshMaharjan,它来自oozie stderr,并因为这个火花行动是失败的,因为罐子在命令行界面运行时成功运行群集 – major

回答

0

这里是另一种方式来检查绑定。我假设你使用eclipse进行开发,并且这是一个maven项目。

  • 转到您的pom.xml
  • 在依赖标签,搜索的结合,你的情况SLF4J。
  • 右键单击所有并排除它们。

它的作用基本上就是像你在那里提到的那样向你的pom.xml添加排除块,好处是你能够看到这个依赖是否来自任何其他库。

让我知道这是否有帮助。 干杯。

+0

您好@chitral verma我试图寻找slf4j在依赖项选项卡中pom.xml,并没有找到任何排除 – major

+0

而不是依赖关系选项卡你可以做同样的依赖关系层次选项卡? –

0

这是由于多个jarsslf4j使用不同的其他人jars。更简单的解决方案是在您的依赖项中添加最新版本或更高版本的slf4j,该版本强制只使用最新的jar,这些版本将向后兼容。

您还可以运行mvn dependency:tree和搜索SLF4J的实施和排除作为

<exclusions> 
     <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     </exclusion> 
     <exclusion> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     </exclusion> 
    </exclusions> 

希望这有助于!

0

经过对日志文件的进一步研究,我发现问题是由于hive-site.xml未正确传递给spark动作,spark动作期望从oozie工作流中的hive-site.xml,因为我的spark工作包含引用配置表格。在通过hive-site.xml后,问题得到解决

谢谢大家的时间和建议。