你如何在sbt中链接spark和kafka?

时间:2015-02-21 21:51:39

标签: scala sbt apache-spark apache-kafka

我需要在spark中使用kafka项目中的符号(使用DefaultDecoder而不是StringDecoder)。由于这些符号是kafka,我需要在我的sbt项目中链接kafka和spark。这是减少sbt文件,隔离我的确切问题:

name := """spark-kafka"""                                                                                           

version := "1.0"                                                                                                         

scalaVersion := "2.10.4"                                                                                                 

lazy val root = (project in file("."))                                                                                   

libraryDependencies ++= Seq(                                                                                             
  "org.apache.kafka"           % "kafka_2.10"           % "0.8.2.0",                                                     
  "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2",                                                       
  "org.apache.spark"              %% "spark-core"       % "1.2.1" % "provided"                                           
)   

如果我尝试使用sbt compile构建它,我会收到此错误:

> compile
[info] Updating {file:/home/rick/go/src/defend7/sparksprint/tools/consumer/}root...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[error] impossible to get artifacts when data has not been loaded. IvyNode = org.slf4j#slf4j-api;1.6.1
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) java.lang.IllegalStateException: impossible to get artifacts when data has not been loaded. IvyNode = org.slf4j#slf4j-api;1.6.1
[error] Total time: 8 s, completed Feb 21, 2015 1:37:05 PM

这是我在不那么孤立的大型sbt项目中遇到的同样的错误,所以我认为这个较小的sbt文件已经隔离了我所面临的问题。

我试图了解'数据' sbt正在谈论在没有加载数据的情况下无法获取工件。并且还尝试了一些常见的补救措施(例如在我的libraryDependencies中明确包含slf4j-api 1.6.1),但到目前为止,这让我无处可去。

我真的被困住了,非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

在常春藤的某个地方看起来像是一个冲突解决问题。可以通过手动排除Kafka的slf4j依赖关系并明确添加对最新版本的依赖来修复它:

libraryDependencies ++= Seq(                                                                                             
  "org.apache.kafka"           % "kafka_2.10"           % "0.8.2.0" excludeAll(
    ExclusionRule(organization = "org.slf4j")
  ),                                                     
  "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2",      
  "org.slf4j"                  % "slf4j-api"            % "1.7.10", 
  "org.apache.spark"           %% "spark-core"          % "1.2.1" % "provided"                                           
)