scala apache-spark intellij-idea sbt

Advertencias durante la construcción del proyecto Scala/Spark con SBT



apache-spark intellij-idea (3)

¿Hay una mejor manera de estructurar build.sbt (agregar otros resolvedores, por ejemplo?), Para que pueda deshacerme de las advertencias?

Una forma es decirle a sbt manualmente qué dependencias prefiere para su caso:

dependencyOverrides ++= Set( "io.netty" % "netty" % "3.9.9.Final", "commons-net" % "commons-net" % "2.2", "com.google.guava" % "guava" % "11.0.2" )

También recomiendo leer sobre el manejo de conflictos en sbt .

¿Debería preocuparme por las advertencias?

En su caso, no, ya que sus conflictos surgen del uso exclusivo de artefactos relacionados con chispas lanzados bajo la misma versión. Spark es un proyecto con una gran base de usuarios y la posibilidad de que Jar Hell se haya introducido debido a dependencias transitivas es bastante bajo (aunque técnicamente no está garantizado).

En general, tal vez. Por lo general, está bien en la mayoría de los casos, pero existe una pequeña posibilidad de que surja un problema que requiera una cuidadosa resolución de dependencia manual (si es posible). En estos casos, es realmente difícil saber si hay un problema antes de ejecutar su aplicación y encontrarse con algún problema como falta de clase, método, firma de método que no coincide o algún problema relacionado con la reflexión.

Estoy intentando construir un proyecto de Scala / Spark en IntelliJ Idea con el siguiente build.sbt :

name := "try" version := "1.0" scalaVersion := "2.11.8" val sparkVersion = "2.2.0" resolvers ++= Seq( "apache-snapshots" at "http://repository.apache.org/snapshots/" ) libraryDependencies ++= Seq( "org.apache.spark" %% "spark-core" % sparkVersion, "org.apache.spark" %% "spark-sql" % sparkVersion, "org.apache.spark" %% "spark-mllib" % sparkVersion, "org.apache.spark" %% "spark-streaming" % sparkVersion, "org.apache.spark" %% "spark-hive" % sparkVersion )

y recibiendo un montón de advertencias:

8/6/17 1:29 PM SBT project import [warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible: [warn] * io.netty:netty:3.9.9.Final is selected over {3.6.2.Final, 3.7.0.Final} [warn] +- org.apache.spark:spark-core_2.11:2.2.0 (depends on 3.9.9.Final) [warn] +- org.apache.zookeeper:zookeeper:3.4.6 (depends on 3.6.2.Final) [warn] +- org.apache.hadoop:hadoop-hdfs:2.6.5 (depends on 3.6.2.Final) [warn] * commons-net:commons-net:2.2 is selected over 3.1 [warn] +- org.apache.spark:spark-core_2.11:2.2.0 (depends on 2.2) [warn] +- org.apache.hadoop:hadoop-common:2.6.5 (depends on 3.1) [warn] * com.google.guava:guava:11.0.2 is selected over {12.0.1, 16.0.1} [warn] +- org.apache.hadoop:hadoop-yarn-client:2.6.5 (depends on 11.0.2) [warn] +- org.apache.hadoop:hadoop-yarn-api:2.6.5 (depends on 11.0.2) [warn] +- org.apache.hadoop:hadoop-yarn-common:2.6.5

Tengo varias preguntas, tal vez tontas:

  1. ¿Hay una mejor manera de estructurar build.sbt (agregar otros resolvedores, por ejemplo?), Para que pueda deshacerme de las advertencias?
  2. ¿Debería preocuparme por las advertencias?

En sbt , Spark normalmente aparece como una dependencia Provided , es decir,

"org.apache.spark" %% "spark-core" % sparkVersion % Provided

Es posible que estés atrayendo dependencias recursivas innecesarias y conflictivas.


Si todo funciona bien, puede desactivar estas advertencias agregando esto a la configuración de compilación:

evictionWarningOptions in update := EvictionWarningOptions.default .withWarnTransitiveEvictions(false)