linux下scala的編譯打包工具安裝使用

  1. 首先介紹sbt的安裝:
wget https://piccolo.link/sbt-1.3.5.tgz
tar -xvf sbt-1.3.5.tgz
cd sbt
vi sbt #新建sbt,輸入下述內容,`path`中爲sbt的絕對路徑
#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled"
java $SBT_OPTS -jar `path`/sbt/bin/sbt-launch.jar "$@"

# 其中Xms512M 代表堆內存初始值爲512MB, Xmx1536M 代表堆內存最大值爲11536MB, Xss1M 代表stack(棧)設置爲1MB, 如果程序運行出現了 Cannot allocate memory、 mmap failed to map、 StackOverFlowError等問題,可以嘗試修改這個參數

chmod a+x sbt #增加權限

vi ~/.bashrc #在文件.bashrc中加入下述order
export PATH=$PATH:`path`/sbt

source ~/.bashrc

sbt sbtVersion #我看很多文章中用的是sbt sbt_version, 應該是版本的問題,大家注意了,出現以下信息就表明sbt設置成功了:
[info] 1.3.5
  1. 接下來就是編譯打包了:
mkdir helloworld
cd helloworld
find . #首先建立如下所示的目錄結構
.
./src
./src/main
./src/main/scala
./src/main/scala/test.scala
./simple.sbt

vi ./src/main/scala/test.scala #輸入如下內容,來自菜鳥
object HelloWorld {
   /* 這是我的第一個 Scala 程序
    * 以下程序將輸出'Hello World!' 
    */
   def main(args: Array[String]) {
      println("Hello, world!") // 輸出 Hello World
   }
}

vi ./simple.sbt #輸入如下內容

name := "HelloWorld"  #隨便設

version := "1.3.5" #sbt版本號 (我覺得,但好像可以隨便設)

scalaVersion := "2.11.12" #scala版本號,來自spark-shell
# 程序需要用到哪些spark library,就需要如下所示的添加在`.sbt`文件內,可以把spark的jar包放在同級文件夾lib內,這樣就可以直接調用本地編譯的spark庫
libraryDependencies += "org.apche.spark" %% "spark-core" % "2.4.4"
libraryDependencies += "org.apche.spark" %% "spark-sql" % "2.4.4"
libraryDependencies += "org.apche.spark" %% "spark-graphx" % "2.4.4"


sbt package #之後就可以使用該命令編譯打包了,最後得到的jar文件在target/scala文件夾下
  1. 和Spark結合
    在spark已經安裝好的前提下,可以通過以下命令執行:
spark-submit --class HelloWorld <path>/target/scala-2.11/HelloWorld_2.11-1.3.5.jar

spark-submit --help #通過該命令可以看到很多配置參數,可以根據需要設置
 
  1. 錯誤及解決:
# StackOverflowError
spark-submit --class HelloWorld --driver-java-options "-Xss10m" <path>/target/scala-2.11/HelloWorld_2.11-1.3.5.jar

# Cannot allocate memory, No space left on device. 在保證內存、磁盤空間足夠的前提下:
spark-submit --class HelloWorld --driver-memory 20G --executor-memory 20G <path>/target/scala-2.11/HelloWorld_2.11-1.3.5.jar
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章