sbt assembly a fat jar for spark-submit cluster model

在用spark-submit提交作业时,用sbt package打包好的jar程序,可以很好的运行在client模式,当在cluster模式,

一直报错:Exception in thread "main" java.lang.ClassNotFoundException。决定利用sbt assembly插件把所有的依赖打成一个jar。

我的工程结构:

  myProject/build.sbt

  myProject/project/assembly.sbt

  myProject/src/main/scala/com/lasclocker/java/SparkGopProcess.java

上面褐色部分是java源程序的包名。

build.sbt的内容:

lazy val root = (project in file(".")).
  settings(
    name := "my-project",
    version := "1.0",
    scalaVersion := "2.11.7",
    mainClass in Compile := Some("com.lasclocker.java.SparkGopProcess")  // 这里是主类名字
  )

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.1" % "provided"    //这里是依赖的spark-core

unmanagedBase := baseDirectory.value / "custom_spark_lib"  // 这里是第三方依赖包,我直接放在myProject的custom_spark_lib目录下面

// META-INF discarding
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
   {
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case x => MergeStrategy.first
   }
}

其中custom_spark_lib目录下的jar包有:guava-10.0.1.jar, hadoopCustomInputFormat.jar.

assembly.sbt的内容:

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

在myProject目录下,执行:

sbt clean assembly

最后生成a fat jar包:target/scala-2.11/my-project-assembly-1.0.jar.

最后附上我的spark-submit cluster模式的shell脚本(脚本中的ip地方被xx了):

inPath=/LPR
outPath=/output
minPartitionNum=4
sparkURL=spark://xx.xx.xx.xx:7077
hdfsFile=hdfs://xx.xx.xx.xx:9000/user/root
ldLib=/opt/hadoop/lib #这里放一些动态库, 比如JNI中的.so文件            

spark-submit  --class ${yourAppClass}  --master ${sparkURL}  --driver-library-path $ldLib  --deploy-mode cluster  $hdfsFile/my-project-assembly-1.0.jar $inPath $outPath $minPartitionNum

参考: sbt-assembly,  How to build an Uber JAR (Fat JAR) using SBT within IntelliJ IDEA?

时间: 2024-10-07 02:17:49

sbt assembly a fat jar for spark-submit cluster model的相关文章

Spark submit依赖包管理!

Spark submit依赖包管理! 使用spark-submit时,应用程序的jar包以及通过-jars选项包含的任意jar文件都会被自动传到集群中. spark-submit --class   --master  --jars  Spark使用了下面的URL格式允许不同的jar包分发策略. 1.文件file方式: 绝对路径且file:/URIs是作为driver的HTTP文件服务器,且每个executor会从driver的HTTP服务器拉取文件: 2.hdfs方式: http:,https

Spark Submit提交应用程序

英文标题:Submitting Applications 英文原址:http://spark.apache.org/docs/latest/submitting-applications.html Spark Version:1.3.0 Spark根目录的bin目录下spark-submit脚本用于在集群上启动应用程序,它通过统一接口使用Spark所支持的所有集群管理器,因此无需特殊配置每一个应用程序. 1,绑定应用程序依赖 如果代码依赖于其它项目,为了将代码分发到Spark集群,就需要将这些依

spark submit 参数

spark submit 参数及其调优https://blog.csdn.net/guohecang/article/details/52088117 Spark配置参数详解 一.yarn模式下一个示例:./bin/spark-submit \ --master yarn-cluster \ --num-executors 100 \ --executor-memory 6G \ --executor-cores 4 \ --driver-memory 1G \ --conf spark.def

eclipse集成fat jar失败总结

按照网上千篇一律的教程,eclipse一直不出现fat jar的图标.我的eclipse版本较新,4.5.1:fat jar 版本是.31.后来找到解决办法如下: 可能是eclipse版本过高 Help -> Install New Software -> Work With: The Eclipse Project Updates : http:// ... -> 选中Eclipse Tests, Tools, Examples, and Extras里的Eclipse 2.0 sty

安装Eclipse打包插件Fat Jar

安装方法: 1. Eclipse在线更新方法 Help > Install New Software > Add, name:Fat Jar location:http://kurucz-grafika.de/fatjar 2. Eclipse插件手动安装方法 下载地址:http://downloads.sourceforge.net/fjep/net.sf.fjep.fatjar_0.0.27.zip?modtime=1195824818&big_mirror=0 将解压出的plug

netbeans下将所有jar包打成一个,俗称fat jar

netbeans的java项目中,默认会将配置好的外部引用jar包,拷贝到dist目录的lib目录中去.如果需要发布出去,就需要将dist目录生成的jar和lib目录都拷贝出去发布,不方便. 有很多办法可以将所有需要的jar合成一个,俗称fat jar. 较简单的办法是修改 build.xml文件 注意默认的build.xml里面有一些注释,其中有一行: -post-jar:                 called after JAR building  在jar编译完成之后调用 于是在b

2017.5.1 使用fat jar插件来打包有引用外部jar包的项目

如果在程序开发时用到了第三方提供的API.jar包或者其他附属资源.在导出并生成项目的jar文件时,必须将第三方的文件一并导出,否则无法正确运行. 可以使用fat jar插件,下载地址:http://sourceforge.net/projects/fjep/ 1.下载 下载完成后,解压至文件夹,结构如图: 2.安装 (1)将plugin下的jar包放到eclipse的plugin下,重启eclipse. (2)重启后,windows->preferences,如果有fat jar,表示安装成功

SBT Assembly - Deduplicate error &amp; Exclude error

sbt assembly java.lang.RuntimeException: deduplicate: different file contents found in the following: 三种方法: 1. seq(assemblySettings: _*) name := "StreamTest" version := "1.0" scalaVersion := "2.10.4" libraryDependencies += **

Eclipse中打包插件Fat Jar的安装与使用

转自:https://www.cnblogs.com/wbyp/p/6222182.html Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,Fat Jar的功能非常强大. 首先要下载Fat Jar,下载地址:https://sourceforge.net/projects/fjep/files/ 下载后的文件是net.sf.fjep.fatjar_0.0.31.zip,解压下载好的ZIP包,将里面的jar文件复制到Eclipse安装路径下的plugins文件夹中. 如