7

progetto di installazione:SBT non può importare Kafka classi encoder/decoder

  • 1 produttori - serialises oggetti & invia byte alla Kafka
  • 1 scintilla dei consumatori - dovrebbero utilizzare DefaultDecoder nel pacchetto kafka.serializer di consumare byte

Problema:

  • SBT importa le librerie corrette (kafka-clients + kafka_2.10) ma è non riesce a trovare alcuna classe nel jar kafka_2.10.
  • Sembra che stia cercando con il percorso sbagliato (org.apache.spark.streaming.kafka anziché org.apache.kafka).

Messaggio di errore::

object serializer is not a member of package org.apache.spark.streaming.kafka [error] 
import kafka.serializer.DefaultDecoder. 

sbt-albero

[info] +-org.apache.spark:spark-streaming-kafka_2.10:1.6.1 
    [info] | +-org.apache.kafka:kafka_2.10:0.8.2.1 [S] <-- **DefaultDecoder is in here 
but SBT can't find it (org.apache.kafka.serialization.DefaultDecoder)** 
    [info] | | +-org.apache.kafka:kafka-clients:0.8.2.1 

built.sbt:

lazy val commonSettings = Seq(
    organization := "org.RssReaderDemo", 
    version := "0.1.0", 
    scalaVersion := "2.10.6" 
) 

resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases" 

val spark = "org.apache.spark" % "spark-core_2.10" % "1.6.1" 
val sparkStreaming = "org.apache.spark" % "spark-streaming_2.10" % "1.6.1" 
val sparkStreamKafka = "org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.1" 

// Needed to be able to parse the generated avro JSON schema 
val jacksonMapperAsl = "org.codehaus.jackson" % "jackson-mapper-asl" % "1.9.13" 

val scalactic = "org.scalactic" %% "scalactic" % "2.2.6" 
val scalatest = "org.scalatest" %% "scalatest" % "2.2.6" % "test" 

val avro = "org.apache.avro" % "avro" % "1.8.0" 

lazy val root = (project in file(".")). 
    settings(commonSettings: _*). 
    settings(
    libraryDependencies += spark, 
    libraryDependencies += sparkStreaming, 
    libraryDependencies += sparkStreamKafka, 
    libraryDependencies += jacksonMapperAsl, 
    libraryDependencies += scalactic, 
    libraryDependencies += scalatest, 
    libraryDependencies += avro 
) 
+0

codice che causa l'errore in SBT: import kafka.serializer.DefaultDecoder – mds91

risposta

19

Questo non ha nulla a che fare con SBT. È probabile che qualcosa di simile

import org.apache.spark.streaming._ 
import kafka.serializer.DefaultDecoder 

Perché esiste org.apache.spark.streaming.kafka pacchetto, questa importazione decide di org.apache.spark.streaming.kafka.serializer.DefaultDecoder. È possibile importare la classe corretta come segue: import _root_.kafka.serializer.DefaultDecoder. Vedi https://wiki.scala-lang.org/display/SYGN/Language+FAQs#LanguageFAQs-HowdoIimport per maggiori dettagli sulle importazioni di Scala.

+0

Grazie - sembra che era il caso. – mds91

+0

Grazie. il mio codice è stato compilato con il tuo suggerimento – Suresh

+0

Grazie - questo mi ha fatto andare nella giusta direzione. Ho risolto il problema con l'essere un po 'più esplicito nei miei importazioni. importazione org.apache.spark.streaming {secondi, StreamingContext} importazione kafka.serializer.StringDecoder Questa sarebbe la mia preferenza stile, ma entrambi dovrebbero lavorare . – reverend

0

È necessario "import kafka.serializer.StringDecoder" prima di "import org.apache.spark.streaming._". L'ordine di importazione può risolvere il problema.

Works -

import kafka.serializer.StringDecoder 
import org.apache.spark.streaming._ 

Eccezione -

import org.apache.spark.streaming._ 
import kafka.serializer.StringDecoder 
Problemi correlati