web-dev-qa-db-ja.com

SBTでScala / Sparkプロジェクトを構築する際の警告

次のbuild.sbtを使用して、IntelliJ IdeaでScala/Sparkプロジェクトを構築しようとしています。

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
)

そして、たくさんの警告を受け取ります:

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 

私はいくつかの、おそらく愚かな質問があります:

  1. 警告を取り除くことができるように、build.sbt(他のリゾルバを追加するなど)を構成するより良い方法はありますか?
  2. 警告を気にする必要はありますか?
31

Build.sbtを構造化するより良い方法はありますか(他のリゾルバを追加しますか?)、警告を取り除くことができますか?

1つの方法は、あなたのケースのために、あなたが好む依存関係を手動でsbtに伝えることです:

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

sbtの競合管理 について読むこともお勧めします。

警告を気にする必要はありますか?

あなたの場合-いいえ、競合は同じバージョンでリリースされたスパーク関連のアーティファクトのみを使用することに起因するため。 Sparkは大きなユーザーベースのプロジェクトであり、推移的な依存関係によりjar hellが導入される可能性はかなり低い(ただし、技術的には保証されません)。

一般的な場合-多分。通常、ほとんどの場合は問題ありませんが、手動の依存関係を慎重に解決する必要がある可能性があります(これが可能な場合)。これらの場合、アプリを実行する前に問題があるかどうかを判断し、クラス、メソッド、メソッドシグネチャの不一致、リフレクション関連の問題などの問題にぶつかることは非常に困難です。

24
Eugene Loy

sbtでは、Sparkは通常Provided依存関係としてリストされます。つまり、

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

不要で競合する再帰的な依存関係をプルしている可能性があります。

4

すべてが正常に機能する場合は、ビルド設定にこれを追加してこれらの警告を無効にできます。

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