你如何 link 在 sbt 中同时使用 spark 和 kafka?
How do you link both spark and kafka in sbt?
我需要在 spark 中使用来自 kafka 项目的符号(使用 DefaultDecoder 而不是 StringDecoder)。由于这些符号在 kafka 中,我需要在我的 sbt 项目中 link 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 文件已经隔离了我面临的问题。
我试图理解 'data' sbt 在 'impossible to get artifacts when data has not been loaded' 中谈论的内容,并且还尝试了一些常见的补救措施(例如明确包括 slf4j-api 1.6.1在我的 libraryDependencies 中)但是到目前为止这让我无处可去。
我真的被困住了,非常感谢任何帮助。谢谢!
这看起来像是常春藤深处某个地方的冲突解决问题。它可以通过手动从 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"
)
我需要在 spark 中使用来自 kafka 项目的符号(使用 DefaultDecoder 而不是 StringDecoder)。由于这些符号在 kafka 中,我需要在我的 sbt 项目中 link 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 文件已经隔离了我面临的问题。
我试图理解 'data' sbt 在 'impossible to get artifacts when data has not been loaded' 中谈论的内容,并且还尝试了一些常见的补救措施(例如明确包括 slf4j-api 1.6.1在我的 libraryDependencies 中)但是到目前为止这让我无处可去。
我真的被困住了,非常感谢任何帮助。谢谢!
这看起来像是常春藤深处某个地方的冲突解决问题。它可以通过手动从 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"
)