1. 程式人生 > >Spark概述及集群部署

Spark概述及集群部署

生態 伯克利 單點故障 main scp 命令 三方 pivotal cati server

Spark概述

什麽是Spark

(官網:http://spark.apache.org)

技術分享圖片

Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache頂級項目。目前,Spark生態系統已經發展成為一個包含多個子項目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子項目,Spark是基於內存計算的大數據並行計算框架。Spark基於內存計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量廉價硬件之上,形成集群。Spark得到了眾多大數據公司的支持,這些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿裏、騰訊、京東、攜程、優酷土豆。當前百度的Spark已應用於鳳巢、大搜索、直達號、百度大數據等業務;阿裏利用GraphX構建了大規模的圖計算和圖挖掘系統,實現了很多生產系統的推薦算法;騰訊Spark集群達到8000臺的規模,是當前已知的世界上最大的Spark集群。

為什麽要學Spark

Spark是一個開源的類似於Hadoop MapReduce的通用的並行計算框架,Spark基於map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Spark中的Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要叠代的map reduce的算法。

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。

Spark特點

與Hadoop的MapReduce相比,Spark基於內存的運算要快100倍以上,基於硬盤的運算也要快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可以非常方便地與其他的開源產品進行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調度器,器,並且可以處理所有Hadoop支持的數據,包括HDFS、HBase和Cassandra等。這對於已經部署Hadoop集群的用戶特別重要,因為不需要做任何數據遷移就可以使用Spark的強大處理能力。Spark也可以不依賴於第三方的資源管理和調度器,它實現了Standalone作為其內置的資源管理和調度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。

技術分享圖片


Spark集群安裝

下載spark安裝包

下載地址spark官網:http://spark.apache.org/downloads.html

這裏我們使用 spark-2.0.2-bin-hadoop2.7版本.

技術分享圖片

規劃安裝目錄

/opt/bigdata

解壓安裝包

tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz

重命名目錄

mv spark-2.0.2-bin-hadoop2.7 spark

修改配置文件

配置文件目錄在 /opt/bigdata/spark/conf

  • vi spark-env.sh 修改文件(先把spark-env.sh.template重命名為spark-env.sh)

#配置java環境變量
export JAVA_HOME=/opt/bigdata/jdk1.7.0_67

#指定spark老大Master的IP
export SPARK_MASTER_HOST=hdp-node-01

#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077

  • vi slaves 修改文件(先把slaves.template重命名為slaves)
hdp-node-02
hdp
-node-03

拷貝配置到其他主機


通過scp 命令將spark的安裝目錄拷貝到其他機器上

scp -r /opt/bigdata/spark hdp-node-02:/opt/bigdata
scp -r /opt/bigdata/spark hdp-node-03:/opt/bigdata

配置spark環境變量

將spark添加到環境變量,添加以下內容到 /etc/profile

export SPARK_HOME=/opt/bigdata/spark
export PATH=$PATH:$SPARK_HOME/bin


註意最後 source /etc/profile 刷新配置

啟動spark

#在主節點上啟動spark

/opt/bigdata/spark/sbin/start-all.sh

停止spark

#在主節點上停止spark集群

/opt/bigdata/spark/sbin/stop-all.sh

spark的web界面

正常啟動spark集群後,可以通過訪問 http://hdp-node-01:8080,查看spark的web界面,查看相關信息。spark的web界面


Spark HA高可用部署

高可用部署說明

Spark Standalone集群是Master-Slaves架構的集群模式,和大部分的Master-Slaves結構集群一樣,存在著Master單點故障的問題。如何解決這個單點故障的問題,Spark提供了兩種方案:

(1)基於文件系統的單點恢復(Single-Node Recovery with Local File System)。

主要用於開發或測試環境。當spark提供目錄保存spark Application和worker的註冊信息,並將他們的恢復狀態寫入該目錄中,這時,一旦Master發生故障,就可以通過重新啟動Master進程(sbin/start-master.sh),恢復已運行的spark Application和worker的註冊信息。

(2)基於zookeeper的Standby Masters(Standby Masters with ZooKeeper)。

用於生產模式。其基本原理是通過zookeeper來選舉一個Master,其他的Master處於Standby狀態。將spark集群連接到同一個ZooKeeper實例並啟動多個Master,利用zookeeper提供的選舉和狀態保存功能,可以使一個Master被選舉成活著的master,而其他Master處於Standby狀態。如果現任Master死去,另一個Master會通過選舉產生,並恢復到舊的Master狀態,然後恢復調度。整個恢復過程可能要1-2分鐘。

基於zookeeper的Spark HA高可用集群部署

該HA方案使用起來很簡單,首先需要搭建一個zookeeper集群,然後啟動zooKeeper集群,最後在不同節點上啟動Master。具體配置如下:

(1)vim spark-env.sh

註釋掉export SPARK_MASTER_HOST=hdp-node-01

(2)在spark-env.sh添加SPARK_DAEMON_JAVA_OPTS,內容如下:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=hdp-node-01:2181,hdp-node-02:2181,hdp-node-03:2181  -Dspark.deploy.zookeeper.dir=/spark"


spark.deploy.recoveryMode
:恢復模式(Master重新啟動的模式)參數說明

              有三種:(1)ZooKeeper (2) FileSystem (3)NONE

spark.deploy.zookeeper.url:ZooKeeper的Server地址

spark.deploy.zookeeper.dir:保存集群元數據信息的文件、目錄。

包括Worker,Driver和Application。

註意

在普通模式下啟動spark集群,只需要在主機上面執行start-all.sh 就可以了。

在高可用模式下啟動spark集群,先需要在任意一臺節點上啟動start-all.sh命令。然後在另外一臺節點上單獨啟動master。命令start-master.sh。

Spark角色介紹

Spark是基於內存計算的大數據並行計算框架。因為其基於內存計算,比Hadoop中MapReduce計算框架具有更高的實時性,同時保證了高效容錯性和可伸縮性。從2009年誕生於AMPLab到現在已經成為Apache頂級開源項目,並成功應用於商業集群中,學習Spark就需要了解其架構。

Spark架構圖如下:

技術分享圖片

Spark架構使用了分布式計算中master-slave模型,master是集群中含有master進程的節點,slave是集群中含有worker進程的節點。

  • Driver Program :運?main函數並且新建SparkContext的程序。
  • Application:基於Spark的應用程序,包含了driver程序和集群上的executor。
  • Cluster Manager:指的是在集群上獲取資源的外部服務。目前有三種類型

(1)Standalone: spark原生的資源管理,由Master負責資源的分配

(2)Apache Mesos:與hadoop MR兼容性良好的一種資源調度框架

(3)Hadoop Yarn: 主要是指Yarn中的ResourceManager

  • Worker Node: 集群中任何可以運行Application代碼的節點,在Standalone模式中指的是通過slaves文件配置的Worker節點,在Spark on Yarn模式下就是NodeManager節點
  • Executor:是在一個worker node上為某應?啟動的?個進程,該進程負責運?任務,並且負責將數據存在內存或者磁盤上。每個應?都有各自獨立的executor。
  • Task :被送到某個executor上的工作單元。

Spark概述及集群部署