IDEA中scala实现word_count,sbt打jar包,并发送linux中spark运行(sbt打包详细)

0-背景

最近因为业务需求,开始鼓捣下kafka和spark。因为也是第一次做这方面的内容,而且没玩过java和scala。所以这个word count的例子,鼓捣了近两天才出结果。
整个流程如下:首先搭建虚拟机,安装ubuntu。然后在linux中安装spark。最后再本地的IDEA中开发scala,并打包jar包,发送到spark系统中,运行。最后结果如下:
在这里插入图片描述
在这里插入图片描述
下面对其中一些地方,记录下来。

1-spark安装

这里安装的spark是单机版的,不需要安装hadoop,整个安装过程比较简单,没必要在重述一遍了。具体的安装可以百度或者参照这
Linux安装、运行单机版Spark
,或者去官网spark-standalone model

2-IDEA开发

在安装完spark后。在本地安装了IDEA,并且安装了scala。scala是直接在IDEA中安装的。这里面我没有配置scala和sbt,是直接在IDEA中安装的scala,sbt也没管,应该是自带的。有点尴尬,网上有一些安装scala和sbt的教程。这里说明下。整个IDEA的流程,可以参照这里IDEA安装及环境配置(图文)
安装IDEA:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新建工程:
注意scala的版本与spark中的对应。
在这里插入图片描述
下载scala和sbt的jar包:
**注意:**这部分更新特别慢,够你来盘王者荣耀的。所以查阅了下,有办法解决Idea 建立sbt项目非常慢问题在这里插入图片描述

[repositories]
local
Nexus osc : http://maven.oschina.net/content/groups/public/
Nexus osc thirdparty : http://maven.oschina.net/content/repositories/thirdparty/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
typesafe2: http://repo.typesafe.com/typesafe/releases/
sbt-plugin: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
sonatype: http://oss.sonatype.org/content/repositories/snapshots
uk_maven: http://uk.maven.org/maven2/
ibibli: http://mirrors.ibiblio.org/maven2/
repo2: http://repo2.maven.org/maven2/

在这里插入图片描述
更新完sbt后,有了这个target文件,才可以建立scala工程:
在这里插入图片描述
创建scala工程,然后选择object:
在这里插入图片描述
在这里插入图片描述


import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.log4j.{Level,Logger}

object wordcount {
  def main(args: Array[String]) {
    //屏蔽日志
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    val inputFile =  "file:///home/ren/opt/opt_spark/mycode/kafka/word.txt"
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(inputFile)
    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
    wordCount.foreach(println)
  }
}

添加jar包,需要下载一些关于spark的jar包,要不然上面import后面都是灰色的,报错。我这里的jar包,是从linux系统中spark文件里面的jar包,直接copy过来的。
在这里插入图片描述
在这里插入图片描述

下一步就是要打包成jar包:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个目录默认就可以。
在这里插入图片描述
在这里插入图片描述
这个位置把除了图片所示的内容,以外的jar包都删除掉。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
jar包解压后可以看到:
在这里插入图片描述
到此,jar包就打包完成了。打包过程也可以参考idea利用sbt打包scala程序为jar包 并发布到集群中测试
下一步发送到linux某个目录下,一个是jar包,一个是txt文件。此文件的目录与上面代码中 val inputFile = "file:///home/ren/opt/opt_spark/mycode/kafka/word.txt"是一致的。

在这里插入图片描述
最后运行spark,cd到spark目录下,在终端中运行:(也可以建立.sh文件运行)

spark-submit \
--master spark://192.168.120.129:7077  \
--class wordcount  \
--name word_count  \
/home/ren/opt/opt_spark/mycode/kafka/word_count.jar

注意其中class的名字和解压的jar内的名字一致,name名字和jar包一致,最后运行处结果。具体spark后面参数class,name等可以参考Spark:用Scala和Java实现WordCount
在这里插入图片描述

3-参考

下面给出一些链接,可以参考下:
https://www.cnblogs.com/byrhuangqiang/p/4017725.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章