[转] 用SBT编译Spark的WordCount程序
问题导读:
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程序的更多相关文章
- 用SBT编译Spark的WordCount程序
问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要 ...
- 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 ...
- 编写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 ...
- 使用SBT编译Spark子项目
前言 最近为了解决Spark2.1的Bug,对Spark的源码做了不少修改,需要对修改的代码做编译测试,如果编译整个Spark项目快的话,也得半小时左右,所以基本上是改了哪个子项目就单独对那个项目编译 ...
- window环境下使用sbt编译spark源码
前些天用maven编译打包spark,搞得焦头烂额的,各种错误,层出不穷,想想也是醉了,于是乎,换种方式,使用sbt编译,看看人品如何! 首先,从官网spark官网下载spark源码包,解压出来.我这 ...
- Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序
学习用Eclipse+Maven来构建并打包一个简单的单词统计的例程. 本项目源码已托管于Github –>[Spark-wordcount] 第一步 在EclipseIDE中安装Scala插件 ...
- 在IDEA中编写Spark的WordCount程序
1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包 ...
- spark运行wordcount程序
首先提一下spark rdd的五大核心特性: 1.rdd由一系列的分片组成,比如说128m一片,类似于hadoop中的split2.每一个分区都有一个函数去迭代/运行/计算3.一系列的依赖,比如:rd ...
- Spark开发wordcount程序
1.java版本(spark-2.1.0) package chavin.king; import org.apache.spark.api.java.JavaSparkContext; import ...
随机推荐
- 入门5:PHP 语法基础——流程控制
一.if...else 语句 if( ) else{ } 如果 .... 就.... 否则.... if(判断){ 判断成立 则执行该表达式 }else{ 如果上方判断都不成立 则执行该表达式 } i ...
- PHP随机生成指定时间段的指定个数时间
/** * 生成某个范围内的随机时间 * @param <type> $begintime 起始时间 格式为 Y-m-d H:i:s * @param <type> $endt ...
- jquery中的ajax方法详解
定义和用法ajax() 方法通过 HTTP 请求加载远程数据.该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XML ...
- Android获取相册图片
1. AlertDialog的使用 2. 显示和隐式意图的区别 3. 相册页面的跳转 4. 选择完成后返回图片的获取 ----------------------------------------- ...
- linux系统删除空间后系统分区空间仍不释放问题
总结的原因: 1.删除文件文件后没有清空回收站; 2.删除的文件不在系统分区,在其他分区上; 3.删除的文件被保留在了/tmp分区下,而/tmp分区不是独立的分区,是在根分区/的基础上划分出来的分区; ...
- python之加密
import hashlib obj = hashlib.md5(bytes('adfasfasdfsfasf',encoding = 'utf-8')) obj.update(bytes('123' ...
- python 编程之计算器
作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后 ...
- 如何将BarTender内容锁定不让改动
条码标签代表的是产品的特性等,具有相当的精确性,所以需要保证它的正确性.而使用BarTender软件,可以帮助小伙伴将设计的条码标签内容锁定,保护它而不被人改动.下面,小编就教教大家如何实现BarTe ...
- ORACLE PL/SQL异常处理(Exception)学习笔记
1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...
- DB2中SQLSTATE=57016 SQLCODE=-668
执行 alter table DW_RPT.TRPT_JV_COGNOS_RPT add CENTER_CD varchar(10) ALTER TABLE DW_RPT.TRPT_JV_COGNOS ...