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

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