Linux環境Spark安裝配置及使用

YBCarry發表於2019-05-07

Linux環境Spark安裝配置及使用

1. 認識Spark

(1) Spark介紹

  • 大資料計算引擎
  • 官網:spark.apache.org/
  • 官方介紹:Apache Spark™ is a unified analytics engine for large-scale data processing.(Apache Spark™是一個用於大規模資料處理的統一分析引擎。)
  • Spark是一種快速、通用、可擴充套件的大資料分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化專案,2014年2月成為Apache頂級專案。目前,Spark生態系統已經發展成為一個包含多個子專案的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子專案,Spark是基於記憶體計算的大資料平行計算框架。Spark基於記憶體計算,提高了在大資料環境下資料處理的實時性,同時保證了高容錯性和高可伸縮性,允許使用者將Spark部署在大量廉價硬體之上,形成叢集。
  • Spark生態圈:
    • Spark Core:RDD(彈性分散式資料集)
    • Spark SQL
    • Spark Streaming
    • Spark MLLib:協同過濾,ALS,邏輯迴歸等等 --> 機器學習
    • Spark Graphx:圖計算

(2) 為什麼要學習Spark

  • Hadoop的MapReduce計算模型存在的問題:
    • MapReduce的核心是Shuffle(洗牌)。在整個Shuffle的過程中,至少會產生6次的I/O。

      Linux環境Spark安裝配置及使用

    • 中間結果輸出:基於MapReduce的計算引擎通常會將中間結果輸出到磁碟上,進行儲存和容錯。另外,當一些查詢(如:Hive)翻譯到MapReduce任務時,往往會產生多個Stage(階段),而這些串聯的Stage又依賴於底層檔案系統(如HDFS)來儲存每一個Stage的輸出結果,而I/O的效率往往較低,從而影響了MapReduce的執行速度。

  • Spark的最大特點:基於記憶體
  • Spark是MapReduce的替代方案,而且相容HDFS、Hive,可融入Hadoop的生態系統,彌補MapReduce的不足。

(3) Spark的特點:快、易用、通用、相容性

  • 快——與Hadoop的MapReduce相比,Spark基於記憶體的運算速度要快100倍以上,即使,Spark基於硬碟的運算也要快10倍。Spark實現了高效的DAG執行引擎,從而可以通過記憶體來高效處理資料流。
  • 易用——Spark支援Java、Python和Scala的API,還支援超過80種高階演算法,使使用者可以快速構建不同的應用。而且Spark支援互動式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark叢集來驗證解決問題的方法。
  • 通用性——Spark提供了統一的解決方案。Spark可以用於批處理、互動式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不同型別的處理都可以在同一個應用中無縫使用。Spark統一的解決方案非常具有吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減少開發和維護的人力成本和部署平臺的物力成本。另外Spark還可以很好的融入Hadoop的體系結構中可以直接操作HDFS,並提供Hive on Spark、Pig on Spark的框架整合Hadoop。
  • 易用性——Spark可以非常方便地與其他的開源產品進行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和排程器,器,並且可以處理所有Hadoop支援的資料,包括HDFS、HBase和Cassandra等。這對於已經部署Hadoop叢集的使用者特別重要,因為不需要做任何資料遷移就可以使用Spark的強大處理能力。Spark也可以不依賴於第三方的資源管理和排程器,它實現了Standalone作為其內建的資源管理和排程框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark叢集的工具。

2. Spark體系架構

Linux環境Spark安裝配置及使用

Linux環境Spark安裝配置及使用

  • Spark的執行方式
    • Yarn
    • Standalone:本機除錯(demo)
  • Worker(從節點):每個伺服器上,資源和任務的管理者,只負責管理一個節點。
  • 執行過程:
    • 一個Worker 有多個 Executor。 Executor是任務的執行者,按階段(stage)劃分任務。—> RDD
  • 客戶端:Driver Program 提交任務到叢集中。
    • spark-submit
    • spark-shell

3. Spark-2.1.0安裝流程

(1) 準備工作

  • 具備java環境
  • 配置主機名
  • 配置免密碼登入
  • 防火牆關閉

(2) 解壓spark-2.1.0-bin-hadoop2.7.tgz安裝包到目標目錄下:

  • tar -zxvf .tar.gz -C 目標目錄

(3) 為後續方便,重新命名Spark資料夾:

  • mv spark-2.1.0-bin-hadoop2.7/ spark-2.1.0

(4) Spark目錄介紹

  • bin —— Spark操作命令
  • conf —— 配置檔案
  • data —— Spark測試檔案
  • examples —— Spark示例程式
  • jars
  • LICENSE
  • licenses
  • NOTICE
  • python
  • R
  • README.md
  • RELEASE
  • sbin —— Spark叢集命令
  • yarn —— Spark-yarn配置

(5) 修改配置檔案:

  • <1>. 配置spark-env.sh:
    • 進入spark-2.1.0/conf路徑,重新命名配置檔案:
      • mv spark-env.sh.template spark-env.sh
    • 修改spark-env.sh資訊:
      • vi spark-env.sh
      • export JAVA_HOME=/opt/module/jdk1.8.0_144
        export SPARK_MASTER_HOST=bigdata01
        export SPARK_MASTER_PORT=7077
        複製程式碼
  • <2>. 配置slaves:
    • 進入spark-2.1.0/conf路徑,重新命名配置檔案:
      • mv slaves.template slaves
    • 修改slaves資訊:
      • vi slaves
      • bigdata02
        bigdata03
        複製程式碼

(6) 配置環境變數:

  • 修改配置檔案:
    • vi /etc/profile
  • 增加以下內容:
    • export SPARK_HOME=spark安裝路徑
    • export PATH=$PATH:$SPARK_HOME/bin
    • export PATH=$PATH:$SPARK_HOME/sbin
  • 宣告環境變數:
    • source /etc/profile

(6) 叢集配置:

  • 拷貝配置好的spark到其他機器上
    • scp -r spark-2.1.0/ bigdata02:$PWD
    • scp -r spark-2.1.0/ bigdata03:$PWD

(7) 啟動:

  • 啟動主節點:
    • start-master.sh
  • 啟動從節點:
    • start-slaves.sh
  • 啟動shell:
    • spark-shell
  • 通過網頁端檢視:

(8) 關閉:

  • 關閉主節點:
    • stop-master.sh
  • 關閉從節點:
    • stop-slaves.sh

4. Spark HA的實現

(1) 基於檔案系統的單點恢復

  • 主要用於開發或測試環境。

  • 當spark提供目錄儲存spark Application和worker的註冊資訊,並將他們的恢復狀態寫入該目錄中,一旦Master發生故障,就可以通過重新啟動Master程式(sbin/start-master.sh),恢復已執行的spark Application和worker的註冊資訊。

  • 基於檔案系統的單點恢復,主要是在spark-env.sh裡對SPARK_DAEMON_JAVA_OPTS設定

    Linux環境Spark安裝配置及使用

    • 建立存放資料夾:mkdir /opt/module/spark-2.1.0/recovery
    • 修改配置資訊:
      • vi spark-env.sh
      • 增加內容:export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/opt/module/spark-2.1.0/recovery"

(2) 基於Zookeeper的Standby Masters

  • 適用於現實生產。

  • ZooKeeper提供了一個Leader Election機制,利用這個機制可以保證雖然叢集存在多個Master,但是隻有一個是Active的,其他的都是Standby。當Active的Master出現故障時,另外的一個Standby Master會被選舉出來。由於叢集的資訊,包括Worker,Driver和Application的資訊都已經持久化到ZooKeeper,因此在切換的過程中只會影響新Job的提交,對於正在進行的Job沒有任何的影響。加入ZooKeeper的叢集整體架構如下圖所示:

    Linux環境Spark安裝配置及使用
    Linux環境Spark安裝配置及使用

  • 修改配置資訊:

    • vi spark-env.sh
    • 增加內容:export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata01:2181,bigdata02:2181,bigdata03:2181 -Dspark.deploy.zookeeper.dir=/spark"
    • 註釋掉:export SPARK_MASTER_HOSTexport SPARK_MASTER_PORT
  • 傳送新的配置檔案到叢集其餘節點:

    • scp spark-env.sh bigdata02:$PWD
    • scp spark-env.sh bigdata03:$PWD

相關文章