Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
1. sbt-assembly 추가(project/assembly.sbt파일에 아래 내용을 추가함)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
2. project.sbt(혹은 build.sbt) 파일에 아래의 내용을 추가한다.
(scala 2.10.4에 spark 1.5.0을 사용하는 하는 프로그램을 작성하는 경우임)
import sbtassembly.AssemblyPlugin._
name := "icbms"
version := "1.0"
//scalaVersion := "2.11.8"
scalaVersion := "2.10.4"
resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
libraryDependencies ++= Seq(
("org.apache.spark" %% "spark-core" % "1.5.0" % "provided")
.exclude("org.mortbay.jetty", "servlet-api").
exclude("commons-beanutils", "commons-beanutils-core").
exclude("commons-collections", "commons-collections").
exclude("commons-logging", "commons-logging").
exclude("com.esotericsoftware.minlog", "minlog").exclude("com.codahale.metrics", "metrics-core")
,
"org.apache.spark" %% "spark-sql" % "1.5.0" ,
"org.apache.spark" % "spark-streaming_2.10" % "1.6.2",
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.2" ,
"org.apache.avro" % "avro" % "1.7.7"
)
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)
}
3. fat jar만들기(프로젝트의 project 폴더에서 아래의 명령을 실행한다)
sbt clean
sbt update
sbt compile
sbt package
sbt assembly
혹은 sbt clean update compile package assembly 를 연속 실행해도 된다.
* 참고 : https://github.com/sbt/sbt-assembly/