问题导读:
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

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

用SBT编译Spark的WordCount程序的更多相关文章

  1. [转] 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...

  2. sbt编译spark程序提示value toDF is not a member of Seq()

    sbt编译spark程序提示value toDF is not a member of Seq() 前提 使用Scala编写的Spark程序,在sbt编译打包的时候提示value toDF is no ...

  3. 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...

  4. 使用SBT编译Spark子项目

    前言 最近为了解决Spark2.1的Bug,对Spark的源码做了不少修改,需要对修改的代码做编译测试,如果编译整个Spark项目快的话,也得半小时左右,所以基本上是改了哪个子项目就单独对那个项目编译 ...

  5. window环境下使用sbt编译spark源码

    前些天用maven编译打包spark,搞得焦头烂额的,各种错误,层出不穷,想想也是醉了,于是乎,换种方式,使用sbt编译,看看人品如何! 首先,从官网spark官网下载spark源码包,解压出来.我这 ...

  6. Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序

    学习用Eclipse+Maven来构建并打包一个简单的单词统计的例程. 本项目源码已托管于Github –>[Spark-wordcount] 第一步 在EclipseIDE中安装Scala插件 ...

  7. 在IDEA中编写Spark的WordCount程序

    1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包 ...

  8. spark运行wordcount程序

    首先提一下spark rdd的五大核心特性: 1.rdd由一系列的分片组成,比如说128m一片,类似于hadoop中的split2.每一个分区都有一个函数去迭代/运行/计算3.一系列的依赖,比如:rd ...

  9. Spark开发wordcount程序

    1.java版本(spark-2.1.0) package chavin.king; import org.apache.spark.api.java.JavaSparkContext; import ...

随机推荐

  1. poj2492 A Bug's Life(带权并查集)

    题目链接 http://poj.org/problem?id=2492 题意 虫子有两种性别,有n只虫子,编号1~n,输入m组数据,每组数据包含a.b两只虫子,表示a.b为不同性别的虫子,根据输入的m ...

  2. 华为荣耀V8这个7.0的系统的root

    原文链接:http://m.shuaji.com/jiaocheng/5585.htm 已经有不少的机友的华为荣耀V8手机已经升级到EMUI5.0了,也就是现在的安卓7.0的系统,那这个时候该如何进行 ...

  3. [leetcode trie]212. Word Search II

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

  4. JavaScript DOM大纲

    DOM 定义了访问和操作HTML文档的标准方法 访问(查找标签) ---- 直接查找 document.getElementById(“idname”) document.getElementsByT ...

  5. [ 转载 ] Centos 安装mysql后启动失败 出现 ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

    MySQL Daemon failed to start Mysql出问题一定要学会查看log https://blog.csdn.net/shuai825644975/article/details ...

  6. 【漏洞预警】CVE-2017-8464 震网三代漏洞复现

    早在6月13日,微软发布补丁修复编号为CVE-2017-8464的漏洞,本地用户或远程攻击者可以利用该漏洞生成特制的快捷方式,并通过可移动设备或者远程共享的方式导致远程代码执行,追溯到以前,NSA就承 ...

  7. Mysql的学习随笔day1

    关于mysql的基本语句 ps:[]是缺省 创建:CREATE DATABASE  db.name CREATE TABLE name(列名,类型,[NULL])NOT NULL是不需要为空,NOT ...

  8. CSS3制作ajax loader icon

    demo 本文用到的两个CSS3属性:transform.animation 一.HTML <div class="ajax-loading"> <div cla ...

  9. 理解linux下源码、yum和rpm安装方法的特点

    1.yum可看作在线安装,只需yum install 软件名,系统就自动根据yum源配置文件中的镜像位置去下载安装包,并可以自动分析所需的软件依赖关系,自动安装所需的依赖软件包.简单方便,不易出错,不 ...

  10. PowerDesigner设置唯一约束/唯一索引/唯一键

    注意:还需要设置unique约束,也是在这个界面. 参考: https://blog.csdn.net/cnham/article/details/6676650 https://blog.csdn. ...