「sbt编译java」sbt编译打包

博主:adminadmin 2022-11-25 05:36:09 52

本篇文章给大家谈谈sbt编译java,以及sbt编译打包对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

scala程序怎么形成jar包 sbt

一、编写第一个用scala写的spark应用:

仿照spark的 quick-start的Self-Contained Applications写出第一个scala完整程序

链接如下:

即:

/* SimpleApp.scala */import org.apache.spark.SparkContextimport org.apache.spark.SparkContext._import org.apache.spark.SparkConfobject SimpleApp {

def main(args: Array[String]) {

val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system

val conf = new SparkConf().setAppName("Simple Application")

val sc = new SparkContext(conf)

val logData = sc.textFile(logFile, 2).cache()

val numAs = logData.filter(line = line.contains("a")).count()

val numBs = logData.filter(line = line.contains("b")).count()

println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))

}}

整个程序作用是:找到这个文件

YOUR_SPARK_HOME/README.md

中有几个a和几个b。

二、用sbt进行打包成jar:

命令:sbt package

具体步骤见

中的Self-Contained Applications

打包时候几点注意:

1、

目录结构一定要对

目录结构可以通过find .来看

有点类似cmake的感觉

2、

总时间,近30分钟,开始打开会terminal没现象10分钟,然后开始要各种resolve,之后要下载很多库,我这边网速超慢

sbt是个联网编译器,

Spark的应用用到了很多RDD的变换,来编译这些库都得去网上下相应的包

最后显示,编译时间11s

这时成功完成SimpleApp

三、在本机上测试:

命令为:

YOUR_SPARK_HOME/bin/spark-submit \

--class "SimpleApp" \

--master local[4] \

target/scala-2.10/simple-project_2.10-1.0.jar

我对jar的理解就是一个可执行文件了,这个可执行文件在JVM上就可以跑了,local中4是指设置成4个线程,但具体原因我也不知道

注意submit的参数:

--class中 SimpleApp是包名

上传的的jar的地址别写错

一、编写第一个用scala写的spark应用:

仿照spark的 quick-start的Self-Contained Applications写出第一个scala完整程序

链接如下:

即:

/* SimpleApp.scala */import org.apache.spark.SparkContextimport org.apache.spark.SparkContext._import org.apache.spark.SparkConfobject SimpleApp {

def main(args: Array[String]) {

val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system

val conf = new SparkConf().setAppName("Simple Application")

val sc = new SparkContext(conf)

val logData = sc.textFile(logFile, 2).cache()

val numAs = logData.filter(line = line.contains("a")).count()

val numBs = logData.filter(line = line.contains("b")).count()

println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))

}}

整个程序作用是:找到这个文件

YOUR_SPARK_HOME/README.md

中有几个a和几个b。

二、用sbt进行打包成jar:

命令:sbt package

具体步骤见

中的Self-Contained Applications

打包时候几点注意:

1、

目录结构一定要对

目录结构可以通过find .来看

有点类似cmake的感觉

2、

总时间,近30分钟,开始打开会terminal没现象10分钟,然后开始要各种resolve,之后要下载很多库,我这边网速超慢

sbt是个联网编译器,

Spark的应用用到了很多RDD的变换,来编译这些库都得去网上下相应的包

最后显示,编译时间11s

这时成功完成SimpleApp

三、在本机上测试:

命令为:

YOUR_SPARK_HOME/bin/spark-submit \

--class "SimpleApp" \

--master local[4] \

target/scala-2.10/simple-project_2.10-1.0.jar

我对jar的理解就是一个可执行文件了,这个可执行文件在JVM上就可以跑了,local中4是指设置成4个线程,但具体原因我也不知道

注意submit的参数:

--class中 SimpleApp是包名

上传的的jar的地址别写错

阅读全文

Spark 中用 Scala 和 java 开发有什么区别

1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程

2,对于spark中的API来说,Java和Scala有差别,但差别并不大

3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询

4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高

建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制

Scala相对Java语法更丰富,更简洁,写起来更像脚本,能够提高开发效率。

使用Java的话代码会规范些,不过太臃肿,代码量更大。

另外Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。

Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。

另外,如果喜欢,可以混合Java和Scala,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。

从表面上看,无论采用哪种语言,都能完成一样的功能,只是代码量有多有少,开发人员根据自己的情况选择使用Java还是Scala都可。

据说目前最新的Java 8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁

sbt编译时怎么匹配scala版本

build.sbt中写入:

scalaVersion := "2.10.5"

就会使用对应的版本的库进行编译

apache kafka源码怎么编译

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.(Kafka是一个分布式的、可分区的(partitioned)、基于备份的(replicated)和commit-log存储的服务.。它提供了类似于messaging system的特性,但是在设计实现上完全不同)。kafka是一种高吞吐量的分布式发布订阅消息系统,它有如下特性:

(1)、通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

(2)、高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。

(3)、支持通过kafka服务器和消费机集群来分区消息。

(4)、支持Hadoop并行数据加载。

一、用Kafka里面自带的脚本进行编译

下载好了Kafka源码,里面自带了一个gradlew的脚本,我们可以利用这个编译Kafka源码:

1 # wget

2 # tar -zxf kafka-0.8.1.1-src.tgz

3 # cd kafka-0.8.1.1-src

4 # ./gradlew releaseTarGz

运行上面的命令进行编译将会出现以下的异常信息:

01 :core:signArchives FAILED

02

03 FAILURE: Build failed with an exception.

04

05 * What went wrong:

06 Execution failed for task ':core:signArchives'.

07 Cannot perform signing task ':core:signArchives' because it

08 has no configured signatory

09

10 * Try:

11 Run with --stacktrace option to get the stack trace. Run with

12 --info or --debug option to get more log output.

13

14 BUILD FAILED

这是一个bug(),可以用下面的命令进行编译

1 ./gradlew releaseTarGzAll -x signArchives

这时候将会编译成功(在编译的过程中将会出现很多的)。在编译的过程中,我们也可以指定对应的Scala版本进行编译:

1 ./gradlew -PscalaVersion=2.10.3 releaseTarGz -x signArchives

编译完之后将会在core/build/distributions/里面生成kafka_2.10-0.8.1.1.tgz文件,这个和从网上下载的一样,可以直接用。

二、利用sbt进行编译

我们同样可以用sbt来编译Kafka,步骤如下:

01 # git clone

02 # cd kafka

03 # git checkout -b 0.8 remotes/origin/0.8

04 # ./sbt update

05 [info] [SUCCESSFUL ] org.eclipse.jdt#core;3.1.1!core.jar (2243ms)

06 [info] downloading ...

07 [info] [SUCCESSFUL ] ant#ant;1.6.5!ant.jar (1150ms)

08 [info] Done updating.

09 [info] Resolving org.apache.hadoop#hadoop-core;0.20.2 ...

10 [info] Done updating.

11 [info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

12 [info] Done updating.

13 [info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

14 [info] Done updating.

15 [success] Total time: 168 s, completed Jun 18, 2014 6:51:38 PM

16

17 # ./sbt package

18 [info] Set current project to Kafka (in build file:/export1/spark/kafka/)

19 Getting Scala 2.8.0 ...

20 :: retrieving :: org.scala-sbt#boot-scala

21 confs: [default]

22 3 artifacts copied, 0 already retrieved (14544kB/27ms)

23 [success] Total time: 1 s, completed Jun 18, 2014 6:52:37 PM

对于Kafka 0.8及以上版本还需要运行以下的命令:

01 # ./sbt assembly-package-dependency

02 [info] Loading project definition from /export1/spark/kafka/project

03 [warn] Multiple resolvers having different access mechanism configured with

04 same name 'sbt-plugin-releases'. To avoid conflict, Remove duplicate project

05 resolvers (`resolvers`) or rename publishing resolver (`publishTo`).

06 [info] Set current project to Kafka (in build file:/export1/spark/kafka/)

07 [warn] Credentials file /home/wyp/.m2/.credentials does not exist

08 [info] Including slf4j-api-1.7.2.jar

09 [info] Including metrics-annotation-2.2.0.jar

10 [info] Including scala-compiler.jar

11 [info] Including scala-library.jar

12 [info] Including slf4j-simple-1.6.4.jar

13 [info] Including metrics-core-2.2.0.jar

14 [info] Including snappy-java-1.0.4.1.jar

15 [info] Including zookeeper-3.3.4.jar

16 [info] Including log4j-1.2.15.jar

17 [info] Including zkclient-0.3.jar

18 [info] Including jopt-simple-3.2.jar

19 [warn] Merging 'META-INF/NOTICE' with strategy 'rename'

20 [warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename'

21 [warn] Merging 'META-INF/maven/org.xerial.snappy/snappy-java/LICENSE'

22 with strategy 'rename'

23 [warn] Merging 'LICENSE.txt' with strategy 'rename'

24 [warn] Merging 'META-INF/LICENSE' with strategy 'rename'

25 [warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'

26 [warn] Strategy 'discard' was applied to a file

27 [warn] Strategy 'rename' was applied to 5 files

28 [success] Total time: 3 s, completed Jun 18, 2014 6:53:41 PM

当然,我们也可以在sbt里面指定scala的版本:

01 !--

02 User: 过往记忆

03 Date: 14-6-18

04 Time: 20:20

05 bolg:

06 本文地址:

07 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货

08 过往记忆博客微信公共帐号:iteblog_hadoop

09 --

10 sbt "++2.10.3 update"

11 sbt "++2.10.3 package"

12 sbt "++2.10.3 assembly-package-dependency"

scala maven sbt 哪个

SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣,但完成的工作基本是类似的。

虽然Maven同样可以管理Scala项目的依赖并进行构建, 但SBT的某些特性却让人如此着迷,比如:

* 使用Scala作为DSL来定义build文件(one language rules them all);

* 通过触发执行(trigger execution)特性支持持续的编译与测试;

* 增量编译;^[SBT的增量编译支持因为如此优秀,已经剥离为Zinc,可被Eclipse, Maven,Gradle等使用]

* 可以混合构建Java和Scala项目;

* 并行的任务执行;

* 可以重用Maven或者ivy的repository进行依赖管理;

等等这些,都是SBT得以在Scala的世界里广受欢迎的印记。

SBT的发展可以分为两个阶段, 即SBT_0.7.x时代以及SBT_0.10.x以后的时代。

目前来讲, SBT_0.7.x已经很少使用, 大部分公司和项目都已经迁移到0.10.x以后的版本上来,最新的是0.12版本。 0.10.x之后的版本build定义采用了新的Settings系统,与最初0.7.x版本采用纯Scala代码来定义build文件大相径庭,虽然笔者在迁移之前很抵触(因为0.7.x中采用Scala定义build文件的做法可以体现很好的统一性),但还是升级并接纳了0.10.x以后的版本,并且也逐渐意识到, 虽然新的版本初看起来很复杂,但一旦了解了其设计和实现的哲学跟思路,就会明白这种设计可以更便捷的定义build文件。而且可选的build文件方式也同样运行采用Scala代码来定义,即并未放弃统一性的思想。

以上是SBT的简单介绍,如果读者已经急于开始我们的SBT之旅,那么让我们先从SBT的安装和配置开始吧!

## SBT安装和配置

SBT的安装和配置可以采用两种方式,一种是所有平台都通用的安装配置方式,另一种是跟平台相关的安装和配置方式,下面我们分别对两种方式进行详细介绍。

### 所有平台通用的安装配置方式

所有平台通用的安装和配置方式只需要两步:

1. 下载sbt boot launcher

- 本书采用最新的sbt0.12,其下载地址为;;

2. 创建sbt启动脚本(启动脚本是平台相关的)

- 如果是Linux/Unit系统,创建名称为sbt的脚本,并赋予其执行权限,并将其加到PATH路径中; sbt脚本内容类似于

``java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"``, 可以根据情况调整合适的java进程启动参数;

- 如果是Windows系统,则创建sbt.bat命令行脚本,同样将其添加到PATH路径中。 脚本内容类似于``set SCRIPT_DIR=%~dp0 \n

java -Xmx512M -jar "%SCRIPT_DIR%sbt-launch.jar" %*``

以上两步即可完成sbt的安装和配置。

### 平台相关的安装配置方式

笔者使用的是Mac系统,安装sbt只需要执行``brew install sbt``即可(因为我已经安装有homebrew这个包管理器),使用macport同样可以很简单的安装sbt - ``sudo port install sbt``;

如何配置sbt的build.sbt使得编译时将依赖包也打包进去

首先问题解决了,就是sbt-assembly插件的配置问题。这个文档自己前两次读表示看不懂意思。过2天又仔细看了一遍大致明白了,敢动手操作了。

assembly插件的目的是:

The goal is simple: Create a fat JAR of your project with all of its dependencies.

即将项目依赖的大文件也打包到生成的jar中。我的报错Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka/KafkaUtils$就是因为包含KafkaUtil的jar包没打包到jar中。

配置使用插件

下面是我的scala项目目录结构:

.

├── assembly.sbt

├── build.sbt

├── project

├── README.md

├── run-assembly.sh

├── run.sh

├── src

└── target

插件的配置取决于sbt的版本,详情见这里

我的是sbt 0.13.8,所以在project/assembly.sbt添加(assembly.sbt)要自己创建:

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

配置assembly的参数

参数在项目根目录下新建assembly.sbt。

直接引入插件就可以用

sbt assembly

编译了,但是由于我的sbt下载了大量的依赖包,在编译的时候遇到了编译包冲突的问题。这个时候需要配置Merge Strategy(合并策略)

sbt编译java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于sbt编译打包、sbt编译java的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。