1. 程式人生 > >Spark的安裝與啟動

Spark的安裝與啟動

 

 

前言:

    在上一篇關於 使用java和scala編寫spark-WordCount示例 的部落格中,筆者直接使用eclipse工具開發了spark的wordCount示例

    當然,這種方式可以使用在我們需要對scala程式碼進行本地測試的時候,在實際的生產環境,我們肯定不能這麼做,我們需要將專案提交到spark叢集來進行測試

    本篇部落格就簡單介紹下,如何安裝、啟動、使用spark

 

準備工作:

    讀者需要提前瞭解一下spark的相關功能,及執行方式

    下面就來安裝一下spark

 

1.下載spark包

    我們到spark的官網來下載,官網地址:http://spark.apache.org/downloads.html  

    注意:我們可以自己下載spark原始碼之後進行手動編譯,也可以使用spark編譯好的tar包(筆者使用spark編譯好的tar包)

    由於spark需要關聯hadoop來使用,所以我們需要首先安裝hadoop,至於hadoop的安裝方式,讀者可參考筆者另一片部落格

Apache-Hadoop偽分散式環境搭建

    筆者使用的hadoop版本為2.7.0,所以選擇spark版本為2.2.0版本,圖示如下:
 

    點選下載對應的tgz包即可

 

2.安裝tgz包

    將包放到Linux環境下/home/hxw/software路徑下,解壓縮到/opt/software路徑下

tar -zxf spark-2.2.0-bin-hadoop2.7.tgz -C /opt/software

3.配置spark(配置檔案在%SPARK_HOME%/conf路徑下)

    * 修改spark-env.sh.template檔名稱修改為spark-env.sh,並配置以下內容

JAVA_HOME=/opt/software/jdk1.8.0_131 #請配置自己的JAVA_HOME 
SCALA_HOME=/opt/software/scala-2.11.12

HADOOP_CONF_DIR=/opt/software/hadoop-2.7.0 #指向自己配置的hadoop地址

    下面新增spark資訊

SPARK_MASTER_HOST=hadoop # 筆者已經配置當前hostname為hadoop
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081

    * 修改slaves檔案

hadoop #將原本的localhost修改為當前hostname,筆者的為hadoop

    * 修改spark-defaults.conf,新增以下內容

spark.master spark://hadoop:7077

4.使用local模式來啟動spark

[[email protected] spark-2.2.0]# ./bin/spark-shell --master local

    看到以下內容說明啟動成功:

[[email protected] spark-2.2.0]# ./bin/spark-shell --master local
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
18/10/21 20:23:58 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/10/21 20:24:04 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
Spark context Web UI available at http://192.168.146.128:4040
Spark context available as 'sc' (master = local, app id = local-1540178639774).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.2.0
      /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

    這時,我們可以通過檢視程序(使用jps命令來檢視)的方式來看到,spark只啟動了一個SparkSubmit應用,而且通過UI介面(http://hadoop:8080/)也看不到對應的任務

 

5.使用standalone模式來啟動spark

    standalone模式構建一個由Master+Slave構成的spark叢集,spark執行在叢集中

 

    * 啟動Master、slaves

[[email protected] spark-2.2.0]# ./sbin/start-master.sh
[[email protected] spark-2.2.0]# ./sbin/start-slaves.sh 

    通過jps看到以下,說明啟動成功

[[email protected] hxw]# jps
4321 Worker
4232 Master

    注意:文字使用hdfs上的文字,路徑為/user/hadoop/mapreduce/input/wordcount.txt

    當然,需要使用者提前啟動hadoop的HDFS,可使用下面的命令來啟動

[[email protected] hadoop-2.7.0]# ./sbin/start-dfs.sh

    通過jps檢視程序(可以看到namenode和DataNode已經啟動,也可通過http://192.168.241.133:50070 檢視 )

[[email protected] hadoop-2.7.0]# jps
4321 Worker
4513 NameNode
4820 SecondaryNameNode
4933 Jps
4232 Master
4618 DataNode

6.通過spark-shell來提交我們編寫的應用

    主要是在spark standalone模式下,我們可以提交自己編寫的應用到叢集上

 

    * 編寫WordCount程式,具體如下:

object WordCountScala {
  
  def main(args: Array[String]): Unit = {
    
    // 預設使用叢集模式,非local
    val sparkConf = new SparkConf().setAppName("wordCount");
    val sc = new SparkContext(sparkConf)
    
    // 我們使用hdfs上的文字,使用者需要先建立該檔案並提交到hdfs上
    val lines = sc.textFile("hdfs://hadoop:9000/user/spark.txt");
    val words = lines.flatMap(line => line.split(" "))
    val pairs = words.map(word => (word,1))
    val wordCounts = pairs.reduceByKey((a,b) => (a+b))
    
    // 執行成功之後,將結果儲存到該路徑
    wordCounts.saveAsTextFile("/opt/software/spark-2.2.0/data/sparktest/output/")
  }
}

    * 將WordCountScala所在專案export為jar包,命名為spark-test

    * 編寫shell檔案 startJar.sh,具體內容如下:

#!/bin/bash
/opt/software/spark-2.2.0/bin/spark-submit \
--class spark.demo.WordCountScala \
/opt/software/spark-2.2.0/data/sparktest/spark-study.jar

    我們只需要指定好對應的class和jar路徑即可

    

    * 執行startJar.sh

    * 到我們指定的輸出路徑檢查結果是否正確