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

时间:2022-12-13 11:19:10

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

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

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

  1. |--build.sbt
  2. |--lib
  3. |--project
  4. |--src
  5. |   |--main
  6. |   |    |--scala
  7. |   |--test
  8. |         |--scala
  9. |--sbt
  10. |--target

复制代码

以上建立目录如下:

  1. mkdir -p ~/spark_wordcount/lib
  2. mkdir -p ~/spark_wordcount/project
  3. mkdir -p ~/spark_wordcount/src/main/scala
  4. mkdir -p ~/spark_wordcount/src/test/scala
  5. mkdir -p ~/spark_wordcount/target

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

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

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

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

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

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

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

  1. name := "WordCount"
  2. [this is bank line]
  3. version := "1.0.0"
  4. [this is bank line]
  5. scalaVersion := "2.10.3"

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

  1. sbt.version=0.12.4

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

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

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

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

到spark_wordcount目录,执行编译:

  1. cd ~/spark_wordcount/
  2. ./sbt compile

打成jar包

  1. ./sbt package

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

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

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

  1. #!/usr/bin/env bash
  2. SPARK_JAR=./assembly/target/scala-2.10/spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar \
  3. ./bin/spark-class org.apache.spark.deploy.yarn.Client \
  4. --jar ~/spark_wordcount/target/scala-2.10/wordcount_2.10-1.0.0.jar \
  5. --class  spark.example.WordCount \
  6. --args yarn-standalone \
  7. --args /testWordCount.txt \
  8. --args /resultWordCount \
  9. --num-workers 3 \
  10. --master-memory 4g \
  11. --worker-memory 2g \
  12. --worker-cores 2

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

  1. 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&lpar;&rpar;

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

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

    编写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&plus;Maven&plus;Scala Project&plus;Spark &vert; 编译并打包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. 3Struts2进阶----青软S2SH&lpar;笔记&rpar;

    关于上面这个红框里的问题,经过实际测试发现,struts2增加一个命名空间后,jsp页面里所引用的资源的路径,也需要增加一个"../", 于是,跟SpringMVC没啥区别了啊.. ...

  2. Atitit &&num;160&semi;&&num;160&semi;发帖机实现&lpar;3 &rpar;---usrQBN023 js提交ajax内容到后端规范与标准化

    Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...

  3. java多线程的等待唤醒机制及如何解决同步过程中的安全问题

    /* class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, St ...

  4. linux之tmpwatch命令

    系统使用时间长后会产生临时文件(/tmp下),需要清理.但清理的时候不推荐使用rm -rf.这样有时会引起程序的僵死. tmpwatch的说明: [root@AY121231034820cd91077 ...

  5. 神奇的main方法详解

    main函数的详解:    public : 公共的. 权限是最大,在任何情况下都可以访问.        原因: 为了保证让jvm在任何情况下都可以访问到main方法.    static:  静态 ...

  6. 隐藏ipad&sol;ip顶部状态栏

    在GameViewController.swift中重载prefersStatusBarHidden方法,返回true override func prefersStatusBarHidden() - ...

  7. 理解Mac和iOS中的 Event 处理

    根据现在的理解,我把event处理分为5部分,第一是,Event处理的Architecture:第二是,Event的Dispatch到first responder之前: 第三是,Event从firs ...

  8. 警告&colon; &lbrack;SetContextPropertiesRule&rsqb;&lbrace;Context&rcub; Setting property &&num;39&semi;source&&num;39&semi; to &&num;39&semi;org&period;eclipse&period;jst&period;jee&period;server&colon;20160928&&num;39&semi; did not find a matching property

    控制台看到如下警告: 症状原因: 在eclipse配置好的tomcat服务器上双击,打开tomcat服务器的配置界面.按如下操作配置服务器:在Server Options勾上的选项,会在你部署web项 ...

  9. SGU 230&period; Weighings &lpar;拓扑排序&rpar;

    题意: 给出质量为1~n的n个箱子的m对轻重关系,输出一种可能的箱子的质量排列. Solution: 拓扑排序,注意要处理重边. #include <iostream> #include ...

  10. 【Demo 0004】屏幕、窗体及视图基础知识

    本章学习要点       1.  了解iOS中应用程序(UIApplication)与屏幕.窗体以及视图相关基础知识:       2.  掌握应用程序常用的属性与方法:        3.  掌握窗 ...