14

私は(Java APIで)sparkを使用しており、クラスターにプッシュできる単一のjarが必要ですが、jar自体にsparkを含めることはできません。もちろん、ジョブをデプロイするアプリには、spark が含まれている必要があります。

をお願いします:

  1. sbt run - すべてをコンパイルして実行する必要があります
  2. sbt smallAssembly - Spark なしで jar を作成する
  3. sbt アセンブリ - 展開を容易にするために、すべて (spark を含む) を含む uber jar を作成します。

私は1.と3.が働いています。2.どうすればよいかについてのアイデアはありますか?build.sbt ファイルにどのコードを追加する必要がありますか?

質問はスパークだけに関連するものではありませんが、除外したい他の依存関係も同様です。

4

2 に答える 2

29

% 「提供」構成

ファット jar から jar を除外する最初のオプションは"provided"、ライブラリの依存関係で構成を使用することです。次のように定義されている"provided"Maven の提供スコープから取得されます。

これは によく似compileていますが、JDK またはコンテナーが実行時に依存関係を提供することを期待していることを示しています。たとえば、Java Enterprise Edition 用の Web アプリケーションを構築する場合provided、Web コンテナがこれらのクラスを提供するため、Servlet API および関連する Java EE API への依存関係をスコープに設定します。このスコープは、コンパイルおよびテスト クラスパスでのみ使用でき、推移的ではありません。

コードをコンテナー (この場合は Spark) にデプロイしているため、コメントに反して、おそらく Scala 標準ライブラリとその他のライブラリ jar (使用した場合は Dispatch) が必要になるでしょう。これはrunまたはには影響しませんtest

パッケージビン

ソース コードだけが必要で、Scala 標準ライブラリやその他のライブラリの依存関係が必要ない場合は、packageBinsbt に組み込まれます。このパッケージ化された jar は、sbt-assembly の を使用して作成できる依存関係のみの jar と組み合わせることができますassemblyPackageDependency

アセンブリ内の除外されたジャー

最後のオプションは、次を使用することexcludedJars in assemblyです。

excludedJars in assembly := {
  val cp = (fullClasspath in assembly).value
  cp filter {_.data.getName == "spark-core_2.9.3-0.8.0-incubating.jar"}
}
于 2013-11-22T01:51:09.540 に答える
7

私のような初心者の場合は、単に% ProvidedSpark の依存関係を追加して、それらを uber-jar から除外します。

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0" % Provided
libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.4.0" % Provided

build.sbt

于 2015-07-17T08:55:35.820 に答える