LoginSignup
21
22

More than 5 years have passed since last update.

spark-submitにjarを渡すためにsbt assemblyするためのbuild.sbt

Posted at

簡単簡単といろんな記事で書かれているsbt assemblyがsparkでは全然簡単じゃなくて心が折れそうだったのでメモ

sbt assemblyはscalaプロジェクトをスタンドアローン起動できるjarを作ってくれるsbtプラグイン

sbt assemblyプラグインの設定を書く

project/plugins.sbt
logLevel := Level.Warn
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")

ごくシンプルなWordCountプログラムを書く 第一引数=データファイル 第2引数=検索キーワード

SparkSubmit_sample1.scala
import org.apache.spark
import org.apache.spark.{SparkContext, SparkConf}

/**
 * Created by Siori on 15/05/22.
 */
object SparkSubmit_sample1 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount Application")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(args(0))
    val filterResult = textFile.filter(line => line.contains(args(1)))
    println(filterResult.count())
    sc.stop
  }
}

build.sbtを書く

build.sbt
name := "sparkWorkCount"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  ("org.apache.spark" %% "spark-core" % "1.3.1").
    exclude("org.mortbay.jetty", "servlet-api").
    exclude("com.google.guava","guava").
    //exclude("org.apache.spark","spark-network-common_2.11"). 
    exclude("org.apache.hadoop","hadoop-yarn-api").
    exclude("commons-beanutils", "commons-beanutils-core").
    exclude("commons-collections", "commons-collections").
    exclude("commons-logging", "commons-logging").
    exclude("org.spark-project.spark", "unused"). 
    exclude("com.esotericsoftware.minlog", "minlog")
)

// libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.1"
// libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.6.0"


mainClass in assembly := Some("SparkSubmit_sample1")

Sparkは現状scala2.10x系がデフォルトなので注意。ここではなんとなく最新版にしている。
とりあえずWordCountプログラムであればこの設定で動く。

exclude(訳:締め出す)はコンフリクトを起こしているクラス名を除外している設定である。
そう、簡単と言われているsbt assemblyだが結局ココらへんは手で人間が調整する必要がありはっきりいって全然簡単でもないしストレスが貯まる作業である。

sbt assembly

すると成功すればJARが作成され、失敗すればコンフリクトを起こしているパッケージがずらーと出てくるので
排除したい方をbuild.sbtに記述し、またsbt assemblyを実行し、またエラーが出たら・・・の繰り返しをやる楽しい作業をすることになる。

21
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22