下載安裝配置 Spark-2.4.5 以及 sbt1.3.8 打包程序

文章更新於:2020-03-29
按照慣例,文件附上鍊接放在文首。

文件名:spark-2.4.5-bin-without-hadoop.tgz
文件大小:159 MB
下載鏈接:https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop.tgz
SHA256:40f58f117efa83a1d0e66030d3561a8d7678f5473d1f3bb53e05c40d8d6e6781

文件名:sbt-1.3.8.tgz.7z
文件大小:54.9 MB
下載鏈接:https://www.lanzous.com/iameoaf
SHA256:9E0662C84E6B99F2BAB0F51EC1F8C93FA89C5CE5400AD01CF2A98A63A816346D

一、下載需要的文件

1、下載 spark

1、spark 可以去官網http://spark.apache.org/downloads.html 自行尋找合適版本。

2、spark 也可以使用文首 spark-2.4.5-bin-without-hadoop.tgz 直鏈。

2、下載 sbt

1、sbt 可以去官網 https://www.scala-sbt.org/自行尋找合適版本。

2、sbt 也可以使用文首sbt-1.3.8.tgz.7z直鏈。

二、安裝spark

1、解壓==安裝

注1:tail -n 10是隻查看輸出的最後 10 條結果,可以不用寫。
注2:username需要換成你的用戶名。

sudo tar -zxvf spark-2.4.5-bin-without-hadoop.tgz -C /usr/local/ | tail -n 10
cd /usr/local
sudo mv spark-2.4.5-bin-without-hadoop/ spark
sudo chown -R username:username spark

解壓安裝

2、修改Spark的配置文件spark-env.sh

注:在spark 目錄下拷貝spark-env.sh.template 文件 並去掉.template後綴。同時在此文件第一行添加如下所示 export xxxx 代碼。

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

3、運行示例

1、在 spark 目錄下運行如下命令。

bin/run-example SparkPi
# bin/run-example SparkPi 2>&1 | grep "Pi is"

注:也可使用註釋掉的那行命令直接過濾出結果。

2、我的剛開始出錯了,報錯如下。

出錯

然後我使用 nmtui 命令將網絡配置成手動模式,並寫入IP、網關等重新運行程序就可以了。

結果
發現運行結果與我假設的 3.1415926 有點差距,不過好像就是這樣哦,不是出錯了。

4、啓動spark命令行

注:在 /usr/local/spark/ 目錄下執行以下命令啓動 spark

./spark-shell --master local[2]

spark命令行
1、這時也可以在瀏覽器訪問圖形界面了,地址在上面的輸出信息中有,這裏是 192.168.1.136:4040

圖形界面

5、解決 WARN 兩個

1、在上述命令行輸出中,其中有 WARN util.Utils: Your hostname, xxxxx resolves to a loopback address: 127.0.1.1;

解決辦法:
conf/spark-env.sh配置文件中添加SPARK_LOCAL_IP 比如:

SPARK_LOCAL_IP="192.168.1.136"

再次啓動的時候就看不到它了~

2、在上述命令輸出中,其中有 spark Unable to load native-hadoop library for your platform...

解決辦法:
conf/spark-env.sh配置文件中添加 LD_LIBRARY_PATH 比如:

LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

注:前提是你的 $HADOOP_HOME已經存在。
再次啓動的時候就看不到它了~

三、安裝 sbt

1、解壓到指定文件夾

ls | grep sbt	#查看當前文件夾是否有sbt安裝包
sudo tar -zxvf sbt-1.3.8.tgz -C /usr/local
sudo cp /usr/local/sbt/bin/sbt-launch.jar /usr/local/sbt
sudo chown -R bigdata:bigdata /usr/local/sbt
sudo vim /usr/local/sbt/sbt
sudo chmod u+x /usr/local/sbt/sbt

解壓安裝sbt

2、建立sbt腳本並執行

腳本內容如下:

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

注:腳本需要添加執行權限,在步驟一代碼截圖中有。
然後執行:

./sbt sbtVersion

第一次執行結果如下:
執行結果
第二次執行結果如下:
執行結果

四、Spark獨立應用程序編程

1、編寫scala程序

1、先建立程序根目錄

cd ~
mkdir -p ./sparkapp/src/main/scala

2、編寫 SimpleApp.scala 文件

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array[String]) {
        val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}

2、使用sbt打包Scala程序

1、建立 ~/sparkapp/simple.sbt 腳本(這裏的名字任意),內容如下:
注1:此處第三行的scala版本是你spark啓動的時候輸出的scala版本!
注2:此處的第四行spark版本也是你spark啓動是輸出顯示的版本。

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.5"

2、進行程序打包

/usr/local/sbt/sbt package

注:如果是第一次運行,可能會聯網下載文件,等待時間比較長。
執行結果如下:
創建項目

3、執行程序(如果失敗如何解決)

/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar

執行結果如下:

我運行失敗了,還在解決中。。。。。頭大

異常截圖:
異常

2020-03-29更新:問題已經解決。
問題所在:在simple.sbt文件中,指定的scala版本應該是spark-shell輸出的那個 scala 版本,而不是自己單獨安裝的 scala 版本。
問題所在
運行結果:
運行結果

4、查看 sbt 版本不動的解決辦法

1)嘗試換源

我親自測試,沒換源之前,執行 sbt sbtVersion命令需要等待半小時+
當然,這個時間不同的網絡環境下是不同的,可能你的會快的多。

換源以後,等待1分45秒開始出現刷屏信息,2分26秒時完成顯示版本信息。
如何換源見步驟五。

2)刪除配置文件重來

如果使用 sbt sbtVersion 命令查看 sbt 版本,一直沒有刷新輸出信息,
可以嘗試將之前安裝 sbt 時產生的文件刪除,然後重新執行命令。

主要的需要刪除的文件三個 ~/.sbt~/.ivy~/.ivy2
具體可參考林子雨教授博客:安裝最新版sbt工具方法和體會

5、打包程序過慢解決辦法(換國內鏡像)

如果使用 sbt package的時候一直刷屏就是不好,可能是鏡像源連接速度有點慢。這時可以選擇國內的鏡像。

~/.sbt/repositories 文件中(如沒有自己創建一個)添加以下內容:
注:下述代碼中的開頭repo應該是可以自定義的,我改了沒影響程序執行。

[repositories]
repo:https://maven.aliyun.com/repository/public

再次執行打包命令就會快很多。

注1:在我打包測試時,新下載庫打包一個程序需要N秒。
注2:重新打包(無需下載文件)一個程序需要24+秒。

6、關於 sbt 的各個文件

注1:在 sbt 的安裝目錄 sbt/conf/sbtopts 文件中有如下內容:


# ------------------------------------------------ #
#  The SBT Configuration file.                     #
# ------------------------------------------------ #


# Disable ANSI color codes
#
#-no-colors

# Starts sbt even if the current directory contains no sbt project.
#
-sbt-create

# Path to global settings/plugins directory (default: ~/.sbt)
#
#-sbt-dir  /etc/sbt

# Path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
#
#-sbt-boot ~/.sbt/boot

# Path to local Ivy repository (default: ~/.ivy2)
#
#-ivy ~/.ivy2

# set memory options
#
#-mem   <integer>

# Use local caches for projects, no sharing.
#
#-no-share

# Put SBT in offline mode.
#
#-offline

# Sets the SBT version to use.
#-sbt-version  0.11.3

# Scala version (default: latest release)
#
#-scala-home <path>
#-scala-version <version>

# java version (default: java from PATH, currently $(java -version |& grep versi
on))
#
#-java-home <path>

注2:上述文件說明了sbt各個文件的所在和用處。

五、Enjoy!

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