在sbt中,如何指定spark依赖的hadoop版本?
In sbt, how can we specify the version of hadoop on which spark depends?
我有一个使用 spark 和 spark sql 的 sbt 项目,但我的集群使用 hadoop 1.0.4 和 spark 1.2 以及 spark-sql 1.2,目前我的 build.sbt看起来像这样:
libraryDependencies ++= Seq(
"com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
"com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
"com.datastax.spark" % "spark-cassandra-connector_2.10" % "1.2.1",
"org.apache.spark" % "spark-core_2.10" % "1.2.1",
"org.apache.spark" % "spark-sql_2.10" % "1.2.1",
)
事实证明我是运行 hadoop 2.2.0 的应用程序,但我希望在我的依赖项中看到 hadoop-*-1.0.4。请问我该怎么办?
您可以排除 Spark 对 hadoop 的依赖,并添加一个具有您需要的版本的显式依赖,大致如下:
libraryDependencies ++= Seq(
"com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
"com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
"com.datastax.spark" % "spark-cassandra-connector" %% "1.2.1",
"org.apache.spark" % "spark-sql_2.10" % "1.2.1" excludeAll(
ExclusionRule("org.apache.hadoop")
),
"org.apache.hadoop" % "hadoop-client" % "2.2.0"
)
你可能不需要 spark-core
的依赖,因为 spark-sql
应该传递给你。
此外,请注意 spark-cassandra-connector
可能还依赖于 spark,它可能会再次传递回 hadoop => 您可能还需要在那里添加排除规则。
最后说明:一个很好的工具,用于调查哪个依赖来自哪里 https://github.com/jrudolph/sbt-dependency-graph
我有一个使用 spark 和 spark sql 的 sbt 项目,但我的集群使用 hadoop 1.0.4 和 spark 1.2 以及 spark-sql 1.2,目前我的 build.sbt看起来像这样:
libraryDependencies ++= Seq(
"com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
"com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
"com.datastax.spark" % "spark-cassandra-connector_2.10" % "1.2.1",
"org.apache.spark" % "spark-core_2.10" % "1.2.1",
"org.apache.spark" % "spark-sql_2.10" % "1.2.1",
)
事实证明我是运行 hadoop 2.2.0 的应用程序,但我希望在我的依赖项中看到 hadoop-*-1.0.4。请问我该怎么办?
您可以排除 Spark 对 hadoop 的依赖,并添加一个具有您需要的版本的显式依赖,大致如下:
libraryDependencies ++= Seq(
"com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
"com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
"com.datastax.spark" % "spark-cassandra-connector" %% "1.2.1",
"org.apache.spark" % "spark-sql_2.10" % "1.2.1" excludeAll(
ExclusionRule("org.apache.hadoop")
),
"org.apache.hadoop" % "hadoop-client" % "2.2.0"
)
你可能不需要 spark-core
的依赖,因为 spark-sql
应该传递给你。
此外,请注意 spark-cassandra-connector
可能还依赖于 spark,它可能会再次传递回 hadoop => 您可能还需要在那里添加排除规则。
最后说明:一个很好的工具,用于调查哪个依赖来自哪里 https://github.com/jrudolph/sbt-dependency-graph