2017-06-30 5 views
1

私は、Apacheのスパーク2.1.0.cloudera1インストールとClouderaのクラスタを使用しますが、私は、最新の新しいクラスを必要とするが、Apacheのスパークgitリポジトリからコミット:ClouderaのCDHクラスタで使用されているバージョンとは異なるSparkバージョンの使用方法は?

BlockMatrix.scala

私はちょうどコピー貼り付け、ファイル全体を私のsbt Scalaのプロジェクトに

から

org.apache.spark.mllib.linalg.distributed.BlockMatrix 

:しかし、私は、クラスター提供されるクラスを除外するために、SBT-アセンブリMergeStrategyを作成する方法がわかりません

org.apache.spark/spark-mllib_2.11/jars/spark-mllib_2.11-2.1.0.cloudera1.jar 

新しく追加されたプロジェクトクラスを使用します。

マイsbt.buildファイル:

val sparkVersion = "2.1.0.cloudera1" 

lazy val providedDependencies = Seq(
    "org.apache.spark" %% "spark-core" % sparkVersion, 
    "org.apache.spark" %% "spark-sql" % sparkVersion, 
    "org.apache.spark" %% "spark-mllib" % sparkVersion 
) 

libraryDependencies ++= providedDependencies.map(_ % "provided") 

assemblyMergeStrategy in assembly := { 
    case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard 
    case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first 
    case _ => MergeStrategy.first 
} 

答えて

1

お使いの環境で単一ユーバージャー内だけsbt assemblyすべてのスパークの依存関係を使用して、バージョンに対応していないスパークを使用する場合と​​それは。

sbt-assemblyをインストールし、スパークの依存関係(正確に私たちが目指すものに反しているassemblyからそれらを除外すると言う)providedをマーク行を削除します。

libraryDependencies ++= providedDependencies.map(_ % "provided") 

あなたはすなわち、次の行は、(問題のBlockMatrix.scalaとバージョンを反映するために)あまりにも変更する必要があり、スパークの適切なバージョンを使用する必要があります。

val sparkVersion = "2.1.0.cloudera1" 

これには、ローカルで作成したスパークを使用することもできます。ポイントは、すべての依存関係を単一のuber-jarに入れて、デプロイメント環境の内容を上書きすることです。

+0

ありがとうございますが、新しいライブラリから1つのクラス(元のパッケージを含む)だけをコピーすることができますので、sshを使ってfat jarを送信することは避けられますか? – fpopic

+0

そうは思わない。それはうまくいくかもしれませんが、私はそれを偶然と考えています。 –

関連する問題