Spark是大數據集羣的一種計算框架,其在大數據組件的位置以下。html
這裏說明,Spark是對並行框架MapReduce的一種替換,而不是對整個hadoop的替換。
Spark採用master-slave架構模式,實現了多集羣運行模式。其架構以下:node
與HDFS組件的NameNode,SecondaryNameNode,DataNode類似,運行Spark程序的集羣節點也能夠分爲:shell
在相關節點的主機上使用命令jps能夠查看到相關的進程。下面分別介紹各個部分含義。apache
Spark包含兩類程序:緩存
從操做系統層面看,每一個程序都是不一樣的進程,分別運行在不一樣的節點上。服務器
驅動器程序包含應用的main函數,而且定義了集羣上的分佈式數據集,還對這些分佈式數據集應用了相關操做。驅動器程序經過一個SparkContext對象來訪問Spark,這個對象表明對計算集羣的一個鏈接。架構
說明:啓動Spark-Shell時已經自動建立了一個SparkContext對象,是一個叫sc的變量。因此看到別人使用的未手動實例化的sc變量也就不要見怪。
有了SparkContext(Spark上下文)後,就能夠用來創新Spark核心類RDD。與此同時在羣集模式下,驅動器程序還要管理多個執行器節點。所起驅動器程序兩個主要的任務是:app
驅動器程序會將一些Spark應用的運行時的信息經過網頁界面呈現出來,默認在端口4040上。好比在本地模式下訪問http://localhost:4040就能夠看到這個網頁。框架
執行器程序主要有兩個任務:分佈式
集羣管理器負責管理執行器的聲明週期。系統當前支持四種集羣管理器:
若是在集羣中僅有Spark程序,那麼可使用Spark獨立的集羣管理器。若是有其餘的mapreduce程序,那麼須要使用Yarn或者Mesos管理器。
本地集羣管理僅有一個executor,調用方法:
# 使用一個線程 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local # 使用兩個線程執行 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local[2] # 每一個cpu執行一個線程 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local[*]
啓用獨立的集羣管理很簡單,僅須要使用start-all腳本。
${Spark Dir}/sbin/start-all.sh
能夠在http://masternode:8080看到集羣管理器的網頁用戶界面,上面顯示着全部的工做節點。當提交應用時能夠配置執行器進程使用的內存量,以及全部執行器進程使用的CPU核心總數。默認狀況下,集羣管理器會選擇合適的默認值自動爲全部工做節點分配CPU核心與內存。
若是要使用獨立的集羣管理器僅須要在提交做業時指定提交的節點便可。
//提交應用 bin/spark-submit --master spark://masternode:7077 yourapp //啓動spark-shell時指定master,全部運行程序都將提交到集羣中。 bin/spark-shell --master spark://masternode:7077 //啓動pyspark bin/pyspark --master spark://masternode:7077
獨立集羣管理器主要管理cpu和內存兩大資源:
Yarn是hadoop自帶的集羣管理器,默認狀況下不用手動啓動。使用Yarn做爲集羣管理器僅須要在提交任務時指定master爲yarn便可。
/usr/local/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --master yarn \ --deploy-mode client \ --name "Example Program" \ --num-executors 40 \ --executor-memory 10g \ my_script.py
相比於獨立的集羣管理,Yarn能夠管理三項資源:
Mesos須要單獨下載,https://open.mesosphere.com/d...。下載完後。指定使用Mesos方法是指定master:
./bin/spark-shell --master mesos://host:5050
全部集羣管理器均支持兩種部署模式,在這兩種模式中應用的驅動器程序運行在不一樣的地方:
經過deploy-mode指定部署模式。
# 客戶端模式,集羣模式爲cluster /usr/local/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --master yarn \ --deploy-mode client \ my_script.py