Wie effizient arbeiten mit SBT, Funke und "vorgesehen" Abhängigkeiten?

Baue ich ein Apache-Spark-Applikation in Scala und ich bin mit SBT, um es zu bauen. Hier ist die Sache:

  1. wenn ich die Entwicklung unter IntelliJ IDEA, ich will Funken Abhängigkeiten in den classpath (ich bin der Einführung eine regelmäßige Anwendung mit einer main-Klasse)
  2. wenn ich die Anwendung Verpacken (Dank der sbt-Montage) plugin, ich nicht möchten Spark-Abhängigkeiten aufgenommen zu werden in mein Fett JAR
  3. wenn ich unit-tests durch sbt test möchte ich Spark Abhängigkeiten in den classpath (gleiche wie #1, aber von den SBT)

Passend Einschränkung #2, ich bin deklarieren Funke Abhängigkeiten als provided:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
  ...
)

Dann, sbt-Montage-Dokumentation schlägt vor, fügen Sie die folgende Zeile, um die Abhängigkeiten für unit-tests (Einschränkung #3):

run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))

Lässt mich mit Einschränkung #1 nicht voll gefüllt, d.h. ich kann nicht führen Sie die Anwendung in IntelliJ IDEA als Funke Abhängigkeiten nicht abgeholt wird.

Mit Maven, war ich mit einem bestimmten Profil zu bauen, die uber JAR. So, ich war die Deklaration Funke Abhängigkeiten als regelmäßige Abhängigkeiten für das main-Profil (IDE-und unit-tests), während Sie deklarieren Sie als provided für das fat-JAR-Verpackung. Sehen https://github.com/aseigneurin/kafka-sandbox/blob/master/pom.xml

Was ist der beste Weg, dies zu erreichen mit SBT?

  • nur um daran zu erinnern, bei der Verwendung von spark-submit spark verwenden libs von spark-Installations-Pfad, nicht die libs, die Sie verpackt in Ihre Versammlung jar. es sei denn, Sie ausdrücklich gesagt, es zu. die config heißt `` Beide sbt und Assembler Maven-plugins. Beim erstellen von Montage-Gläser, Liste Spark und Hadoop wie Abhängigkeiten; diese müssen nicht gebündelt werden, da diese Angaben werden von der cluster-manager zur Laufzeit. Sobald Sie ein zusammengesetztes Glas, das Sie aufrufen die bin/Funke-submit-Skript, wie hier gezeigt, während Sie Ihr Glas.``
Schreibe einen Kommentar