大資料開發之Spark入門
什麼是Spark?
·大資料的電花火石。
·Spark類似於MapReduce的低延遲的互動式計算框架。
·Spark是UC Berkeley AMPLab開發的是一種計算框架,分散式資源工作交由叢集管理軟體(Mesos、YARN)。
·Spark是處理海量資料的快速通用引擎大資料培訓。
Spark發展歷程
·Hadoop在2003年從Nutch發展到Lucene,在Yahoo成長,進入Apache孵化,2008年獲得大量使用。但一直存在MR演算法少、每次Reduce都需要磁碟讀寫、MR需要成對出現、Master節點排程慢、單節點等等問題。
·Spark2007年在Yahoo起步,用於改善MR演算法。
·Berkeley大學成為大資料技術中心,Berkeley Data Analysis Stack(BDAS)逐步形成大資料平臺。
·2009:Spark誕生於伯克利大學 AMPLab
·2010:開源
·2013.6:Apache孵化器專案
·2014.2:Apache頂級專案
目前為止,釋出的最新版本為Spark2.4.0
Spark在最近6年內發展迅速,相較於其他大資料平臺或框架而言,Spark的程式碼庫最為活躍。
截止2015年6月
·Spark的Contributor比2014年漲了3倍,達到730人;
·總程式碼行數也比2014年漲了2倍多,達到40萬行;
·Spark應用也越來越廣泛,最大的叢集來自騰訊——8000個節點,單個Job最大分別是阿里巴巴和Databricks——1PB;
Spark特點
1.先進架構
·Spark採用Scala語言編寫,底層採用了actor model的akka作為通訊框架,程式碼十分簡潔高效。
·基於DAG圖的執行引擎,減少多次計算之間中間結果寫到Hdfs的開銷。
·建立在統一抽象的RDD(分散式記憶體抽象)之上,使得它可以以基本一致的方式應對不同的大資料處理場景。
2.高效
·提供Cache機制來支援需要反覆迭代的計算或者多次資料共享,減少資料讀取的IO開銷。
·與Hadoop的MapReduce相比,Spark基於記憶體的運算比MR要快100倍;而基於硬碟的運算也要快10倍!
3.易用
·Spark提供廣泛的資料集操作型別(20+種),不像Hadoop只提供了Map和Reduce兩種操作。
·Spark支援Java,Python和Scala API,支援互動式的Python和Scala的shell。
4.提供整體 解決方案
·以其RDD模型的強大表現能力,逐漸形成了一套自己的生態圈,提供了full-stack的解決方案。
·主要包括Spark記憶體中批處理,Spark SQL互動式查詢,Spark Streaming流式計算, GraphX和MLlib提供的常用圖計算和機器學習演算法。
5.與Hadoop無縫銜接
·Spark可以使用YARN作為它的叢集管理器。
·讀取HDFS,HBase等一切Hadoop的資料。
Spark整體架構
·Spark提供了多種高階工具: Shark SQL應用於即席查詢(Ad-hoc query)、Spark Streaming應用於流式計算、 MLlib應用於機器學習、GraphX應用於圖處理。
·Spark可以基於自帶的standalone叢集管理器獨立執行,也可以部署在Apache Mesos 和 Hadoop YARN 等叢集管理器上執行。
·Spark可以訪問儲存在HDFS、 Hbase、Cassandra、Amazon S3、本地檔案系統等等上的資料,Spark支援文字檔案,序列檔案,以及任何Hadoop的InputFormat。
Spark優勢
輕量級快速處理。Spark允許Hadoop叢集中的應用程式在記憶體中以100倍的速度執行,即使在磁碟上執行也能快10倍。Spark通過減少磁碟IO來達到效能提升,它將中間處理的資料全部放到了記憶體中。
·易於使用,Spark支援多語言。Spark支援Java、Scala及Python,這允許開發者在自己熟悉的語言環境下進行工作。
·支援複雜查詢。在簡單的“map”及”reduce”操作之外,Spark還支援SQL查詢、流式查詢及複雜查詢。
·實時的流處理。對比MapReduce只能處理離線資料,Spark支援實時的流計算。
·可以與Hadoop和已存Hadoop資料整合。
·支援mysql資料庫和HBase資料庫。
Spark適用場景
·目前大資料在網際網路公司主要把Spark應用在廣告、報表、推薦系統等業務上。
·在廣告業務方面需要大資料做應用分析、效果分析、定向優化等。
·在推薦系統方面則需要大資料優化相關排名、個性化推薦以及熱點點選分析等。
這些應用場景的普遍特點是計算量大、效率要求高。Spark恰恰滿足了這些要求。
總的來說Spark的適用面比較廣泛且比較通用。
Spark部署
·安裝Scala
·配置檔案:spark-env.sh
·部署的四種模式:Standalone、Spark On Yarn、Spark On Mesos、Spark On Cloud
Spark程式執行方式
·執行自帶樣例:run-example
·互動式:spark-shell
·提交到叢集:spark-submit spark-class
spark-submit引數:
--class 應用程式類名
--master spark master地址
--jars 依賴庫檔案
--executor-memory 記憶體
--total-executor-cores CPU core
Spark執行模式
目前Apache Spark支援四種分散式部署方式,分別是standalone、spark on mesos和 spark on YARN、Spark on cloud。
standalone模式,即獨立模式,自帶完整的服務,可單獨部署到一個叢集中,無需依賴任何其他資源管理系統。Spark在standalone模式下單點故障問題是藉助zookeeper實現的,思想類似於Hbase master單點故障解決方案。
Spark On Mesos模式,Spark執行在Mesos上會比執行在YARN上更加靈活,更加自然。在Spark On Mesos環境中,使用者可選擇兩種排程模式之一執行自己的應用程式,粗粒度模式(Coarse-grained Mode)和細粒度模式(Fine-grained Mode)。
Spark On YARN模式,這是一種最有前景的部署模式。但限於YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。
Spark On cloud模式,比如AWS的EC2,使用這種模式,方便的訪問Amazon的S3。
Spark on Standalone
·Master和Worker是standalone的角色,Driver和Executor是Spark的角色。
·Master負責分配資源,分配Driver和Executor,讓Worker啟動driver和executor,只管理到executor層,不涉及任務;
·Driver負責生成task,並與executor通訊,進行任務的排程和結果跟蹤,不涉及資源。
執行流程描述:
1.客戶端把作業釋出到Master
2.Master讓一個Worker啟動Driver,並將作業推送給Driver
3. Driver程序生成一系列task
4.Driver向Master申請資源
5.Master讓排程的Worker啟動Exeuctor
6. Exeuctor啟動後向Driver註冊
7.Driver將task排程到Exeuctor執行
8. Executor執行結果寫入檔案或返回Driver
執行流程描述:
1. 客戶端啟動後直接執行使用者程式,啟動Driver
2. Driver程序生成一系列task
3. Driver向Master申請資源
4. Master讓排程的Worker啟動Exeuctor
5. Exeuctor啟動後向Driver註冊
6. Driver將task排程到Exeuctor執行
7. Executor執行結果寫入檔案或返回Driver
Spark on Yarn
·與Standalone類似,不過YARN架構更通用,可以在同一叢集部署Hadoop、Spark等。
·RM、NM和AM是YARN的角色,Driver和Executor是Spark的角色。
·RM負責資源分配,分配App Master和Executor;AM負責向RM申請資源,啟動Driver和啟動Executor。
·Driver負責task的生成,task的排程和結果跟蹤。
Driver執行在AM(Application Master):
1.客戶端把作業釋出到YARN
2. RM為該job在某個NM上分配一個AM,NM啟動AppMaster,App Master啟動Driver
3.AM啟動後完成初始化作業。Driver生成一系列Task
4.AM向RM申請資源,RM返回Executor資訊
5.AM通過RPC啟動相應的SparkExecutor
6.Driver向Executor分配task
7. Executor執行結果寫入檔案或返回Driver
Driver執行在Cleint :
1.客戶端啟動後直接執行使用者程式,直接啟動Driver
2. Driver初始化並生成一系列Task
3.客戶端將App Commands釋出到YARN
4. RM為該job在某個NM上分配一個AM
5.AM向RM申請資源,RM返回Executor資訊
6.AM通過RPC啟動相應的SparkExecutor
7.Exeuctor啟動後向Driver註冊
8.Driver向Executor分配task
9.Executor執行結果寫入檔案或返回Driver