问题导读:
1.什么是sbt?
2.sbt项目环境如何建立?
3.如何使用sbt编译打包scala?

sbt介绍
sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要java1.6以上。

sbt项目环境建立
sbt编译需要固定的目录格式,并且需要联网,sbt会将依赖的jar包下载到用户home的.ivy2下面,目录结构如下:

    |--build.sbt
|--lib
|--project
|--src
| |--main
| | |--scala
| |--test
| |--scala
|--sbt
|--target

以上建立目录如下:

    mkdir -p ~/spark_wordcount/lib
mkdir -p ~/spark_wordcount/project
mkdir -p ~/spark_wordcount/src/main/scala
mkdir -p ~/spark_wordcount/src/test/scala
mkdir -p ~/spark_wordcount/target

然后拷贝spark安装目录的sbt目录的 sbt脚本和sbt的jar包

cp /path/to/spark/sbt/sbt* ~/spark_wordcount/

由于spark的sbt脚本默认查找./sbt目录,修改如下

    JAR=sbt/sbt-launch-${SBT_VERSION}.jar
to
JAR=sbt-launch-${SBT_VERSION}.jar

拷贝spark的jar包到,sbt的lib目录

    cp /path/to/spark/assembly/target/scala-2.10/spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar \
> ~/spark_wordcount/lib/

建立build.sbt配置文件,各行需要有一个空行分割

     name := "WordCount"
[this is bank line]
version := "1.0.0"
[this is bank line]
scalaVersion := "2.10.3"

由于spark的sbt脚本需要到project的build.properties文件找sbt的版本号,我们建立该文件,增加如下内容:

sbt.version=0.12.4

Spark WordCount程序编写及编译
建立WordCount.scala源文件,假设需要包为spark.example

    mkdir -p ~/spark_wordcount/src/main/scala/spark/example
vi -p ~/spark_wordcount/src/main/scala/spark/example/WordCount.scala

添加具体的程序代码,并保存

     package spark.example

     import org.apache.spark._
import SparkContext._ object WordCount {
def main(args: Array[String]) {
//命令行参数个数检查
if (args.length == 0) {
System.err.println("Usage: spark.example.WordCount <input> <output>")
System.exit(1)
}
//使用hdfs文件系统
val hdfsPathRoot = "hdfshost:9000"
//实例化spark的上下文环境
val spark = new SparkContext(args(0), "WordCount",
System.getenv("SPARK_HOME"),SparkContext.jarOfClass(this.getClass))
//读取输入文件
val inputFile = spark.textFile(hdfsPathRoot + args(1))
//执行WordCount计数
//读取inputFile执行方法flatMap,将每行通过空格分词
//然后将该词输出该词和计数的一个元组,并初始化计数
//为 1,然后执行reduceByKey方法,对相同的词计数累
//加
val countResult = inputFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
//输出WordCount结果到指定目录
countResult.saveAsTextFile(hdfsPathRoot + args(2))
}
}

到spark_wordcount目录,执行编译:

    cd ~/spark_wordcount/
./sbt compile

打成jar包

./sbt package

编译过程,sbt需要上网下载依赖工具包,jna,scala等。编译完成后可以在target/scala-2.10/目录找到打包好的jar

    [root@bd001 scala-2.10]# pwd
/usr/local/hadoop/spark_wordcount/target/scala-2.10
[root@bd001 scala-2.10]# ls
cache classes wordcount_2.10-1.0.0.jar

WordCount执行
可以参考Spark分布式运行于hadoop的yarn上的方法,写一个执行脚本

     #!/usr/bin/env bash

     SPARK_JAR=./assembly/target/scala-2.10/spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar \
./bin/spark-class org.apache.spark.deploy.yarn.Client \
--jar ~/spark_wordcount/target/scala-2.10/wordcount_2.10-1.0.0.jar \
--class spark.example.WordCount \
--args yarn-standalone \
--args /testWordCount.txt \
--args /resultWordCount \
--num-workers 3 \
--master-memory 4g \
--worker-memory 2g \
--worker-cores 2

然后,拷贝一个名为testWordCount.txt的文件进hdfs

hdfs dfs -copyFromLocal ./testWordCount.txt /testWordCount.txt

执行脚本,过一会就可以看到结果了

最新文章

  1. javascript面向对象(三):非构造函数的继承
  2. Python标准库01 正则表达式(re包)
  3. NEFU 84 五指山 (扩展欧几里得)
  4. 启用jboss热部署
  5. DBA_Oracle性能优化的基本方法概述(方法论)
  6. Java之绘制艺术图案
  7. ORACLE 更新关联多张表
  8. 特效TD 的工作准则
  9. nyoj 96 一个水题目
  10. 数据结构之后缀数组suffix array
  11. poj 2263&amp;&amp; zoj1952 floyd
  12. ios发布笔录
  13. install redis
  14. Linux进程状态解析之R、S、D、T、Z、X
  15. redis 系列14 有序集合对象
  16. Ubuntu16.04安装Redis
  17. day 03 数据类型
  18. CF300E. Empire Strikes Back
  19. 2.4G还是5G?带你选择最正确的路由器
  20. python程序编写中常见错误

热门文章

  1. bzoj 1263 [SCOI2006]整数划分
  2. Django实战(7):改造ProductList界面
  3. URLconf+MTV:Django眼中的MVC
  4. Asp.Net Core2.0 WebAPI 使用Swagger生成漂亮的接口文档
  5. mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)
  6. if函数判断日期在某个时间段
  7. python 列表的浅拷贝和深拷贝
  8. ubuntu16.04服务器apache的ssl证书配置
  9. [HNOI2008]玩具装箱
  10. ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS