2016-07-12 10 views
1

私は以下のようにsbtファイルを持つSparkアプリケーションを持っています。
ローカルマシンで動作します。私は瓶に

Build.sbtを取得するには、 "SBT-パッケージ" を使用していますspark-core 1.6.1&lift-json 2.6.3 java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError: net/liftweb/json/JsonAST$JValue 

::私はEMRランニングスパーク1.6.1に提出したときに以下のようなしかし、エラーが発生しました

organization := "com.foo" 
name := "FooReport" 

version := "1.0" 

scalaVersion := "2.10.6" 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "1.6.1" 
    ,"net.liftweb" % "lift-json_2.10" % "2.6.3" 
    ,"joda-time" % "joda-time" % "2.9.4" 
) 

あなたは何が起こっているか考えていますか?

答えて

0

解決策を見つけました。それは機能しています!

この問題はすべて約sbt packageであり、出力jarへのすべての依存jarを含まない。これを克服するために私はsbt-assemblyを試しましたが、実行したときに "deduplicate"というエラーが発生しました。

結局のところ、私はこのブログの投稿に出てきて、すべてを明白にしました。
(火花提出経由)スパーククラスタへのスパークジョブを送信するためにhttp://queirozf.com/entries/creating-scala-fat-jars-for-spark-on-sbt-with-sbt-assembly-plugin

、 あなたがそうでなければ、あなたがされません、 ジャーに(自分自身をスパーク以外の)すべての依存関係を含める必要があなたの仕事のそれらを使用することができます。

  1. /projectフォルダの下に "assembly.sbt"を作成します。
  2. あなたbuild.sbt

assemblyMergeStrategy in assembly := { case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last case PathList("javax", "activation", xs @ _*) => MergeStrategy.last case PathList("org", "apache", xs @ _*) => MergeStrategy.last case PathList("com", "google", xs @ _*) => MergeStrategy.last case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last case PathList("com", "codahale", xs @ _*) => MergeStrategy.last case PathList("com", "yammer", xs @ _*) => MergeStrategy.last case "about.html" => MergeStrategy.rename case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last case "META-INF/mailcap" => MergeStrategy.last case "META-INF/mimetypes.default" => MergeStrategy.last case "plugin.properties" => MergeStrategy.last case "log4j.properties" => MergeStrategy.last case x => val oldStrategy = (assemblyMergeStrategy in assembly).value oldStrategy(x) }

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")

  • は次に下のassemblyMergeStrategyコードを貼り付け、この行を追加します。そして、あなたは大きな脂肪の瓶を持っている今sbt assembly

    を実行しますすべての依存関係があります。それは、依存ライブラリに基づいて数百MBになる可能性があります。私の場合は、Spark 1.6.1が既にインストールされているAws EMRを使用しています。

    organization := "com.foo" 
    name := "FooReport" 
    
    version := "1.0" 
    
    scalaVersion := "2.10.6" 
    
    libraryDependencies ++= Seq(
        "org.apache.spark" %% "spark-core" % "1.6.1" % "provided" 
        ,"net.liftweb" % "lift-json_2.10" % "2.6.3" 
        ,"joda-time" % "joda-time" % "2.9.4" 
    ) 
    
    assemblyMergeStrategy in assembly := { 
        case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last 
        case PathList("javax", "activation", xs @ _*) => MergeStrategy.last 
        case PathList("org", "apache", xs @ _*) => MergeStrategy.last 
        case PathList("com", "google", xs @ _*) => MergeStrategy.last 
        case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last 
        case PathList("com", "codahale", xs @ _*) => MergeStrategy.last 
        case PathList("com", "yammer", xs @ _*) => MergeStrategy.last 
        case "about.html" => MergeStrategy.rename 
        case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last 
        case "META-INF/mailcap" => MergeStrategy.last 
        case "META-INF/mimetypes.default" => MergeStrategy.last 
        case "plugin.properties" => MergeStrategy.last 
        case "log4j.properties" => MergeStrategy.last 
        case x => 
        val oldStrategy = (assemblyMergeStrategy in assembly).value 
        oldStrategy(x) 
    } 
    

    "org.apache.spark" %% "spark-core" % "1.6.1" % "provided" 
    

    ここでは、最終的なbuild.sbtファイルです:キーワードは「提供」は、使用することができ、あなたのjarファイルから火花コアのlibを除外するには

  • 関連する問題