Spark成爲大數據高手進階步驟

什麼是Sparkweb

Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架,Spark基於map reduce算法實現的分佈式計算,擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出和結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的map reduce的算法。其架構以下圖所示:算法

Spark的適用場景數據庫

Spark是基於內存的迭代計算框架,適用於須要屢次操做特定數據集的應用場合。須要反覆操做的次數越多,所需讀取的數據量越大,受益越大,數據量小可是計算密集度較大的場合,受益就相對較小(大數據庫架構中這是是否考慮使用Spark的重要因素)編程

因爲RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。緩存

總的來講Spark的適用面比較普遍且比較通用。網絡

運行模式架構

  • 本地模式app

  • Standalone模式框架

  • Mesoes模式運維

  • yarn模式

Spark生態系統

Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎上提供和Hive同樣的H iveQL命令接口,爲了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來實現query Parsing和 Logic Plan generation,最後的PhysicalPlan execution階段用Spark代替Hadoop MapReduce。經過配置Shark參數,Shark能夠自動在內存中緩存特定的RDD,實現數據重用,進而加快特定數據集的檢索。同時,Shark經過UDF用戶自定義函數實現特定的數據分析學習算法,使得SQL數據查詢和運算分析能結合在一塊兒,最大化RDD的重複使用。

Spark streaming: 構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分紅小的時間片段(幾秒),以相似batch批量處理的方式來處理這小部分數據。Spark Streaming構建在Spark上,一方面是由於Spark的低延遲執行引擎(100ms+)能夠用於實時計算,另外一方面相比基於Record的其它處理框架(如Storm),RDD數據集更容易作高效的容錯處理。此外小批量處理的方式使得它能夠同時兼容批量和實時數據處理的邏輯和算法。方便了一些須要歷史數據和實時數據聯合分析的特定應用場合。

Bagel: Pregel on Spark,能夠用Spark進行圖計算,這是個很是有用的小項目。Bagel自帶了一個例子,實現了Google的PageRank算法。

詳見【 科普Spark,Spark是什麼,如何使用Spark 】

 成爲Spark大數據高手 要怎麼作 

伴隨Spark技術的普及推廣,對專業人才的需求日益增長。Spark專業人才在將來也是煊赫一時,垂手可得能夠拿到百萬的薪酬。而要想成爲Spark高手,也須要一招一式,從內功練起:一般來說須要經歷如下階段:

第一階段:熟練的掌握Scala語言

Spark框架是採用Scala語言編寫的,精緻而優雅。要想成爲Spark高手,你就必須閱讀Spark的源代碼,就必須掌握Scala,;

雖說如今的Spark能夠採用多語言Java、Python等進行應用程序開發,可是最快速的和支持最好的開發API依然並將永遠是Scala方式的API,因此你必須掌握Scala來編寫複雜的和高性能的Spark分佈式程序;

尤爲要熟練掌握Scala的trait、apply、函數式編程、泛型、逆變與協變等;

入門Scala可參考如下文章:

 Scala更適合用於大數據處理和機器學習 

【 快速瞭解Scala技術棧 

 Scala基本語法初探 

第二階段:精通Spark平臺自己提供給開發者API

掌握Spark中面向RDD的開發模式,掌握各類transformation和action函數的使用;

掌握Spark中的寬依賴和窄依賴以及lineage機制;

掌握RDD的計算流程,例如Stage的劃分、Spark應用程序提交給集羣的基本過程和Worker節點基礎的工做原理等

擴展閱讀:

 Spark技術內幕:究竟什麼是RDD 

 Spark技術內幕:Worker源碼與架構解析 

 Spark技術內幕:Stage劃分及提交源碼分析 

第三階段:深刻Spark內核

此階段主要是經過Spark框架的源碼研讀來深刻Spark內核部分:

經過源碼掌握Spark的任務提交過程;

經過源碼掌握Spark集羣的任務調度;

尤爲要精通DAGScheduler、TaskScheduler和Worker節點內部的工做的每一步的細節;

推薦閱讀:

 Spark源碼分析:多種部署方式之間的區別與聯繫 

第四階級:掌握基於Spark上的核心框架的使用

Spark做爲雲計算大數據時代的集大成者,在實時流處理、圖技術、機器學習、NoSQL查詢等方面具備顯著的優點,咱們使用Spark的時候大部分時間都是在使用其上的框架例如Shark、Spark Streaming等:

Spark Streaming是很是出色的實時流處理框架,要掌握其DStream、transformation和checkpoint等;

Spark的離線統計分析功能,Spark 1.0.0版本在Shark的基礎上推出了Spark SQL,離線統計分析的功能的效率有顯著的提高,須要重點掌握;

對於Spark的機器學習和GraphX等要掌握其原理和用法;

深度瞭解Spark SQL能夠看看這篇文章  Spark SQL深度理解篇:模塊實現、代碼結構及執行流程總覽 

第五階級:作商業級別的Spark項目

經過一個完整的具備表明性的Spark項目來貫穿Spark的方方面面,包括項目的架構設計、用到的技術的剖析、開發實現、運維等,完整掌握其中的每個階段和細節,這樣就可讓您之後能夠從容面對絕大多數Spark項目。

第六階級:提供Spark解決方案

完全掌握Spark框架源碼的每個細節;

根據不一樣的業務場景的須要提供Spark在不一樣場景的下的解決方案;

根據實際須要,在Spark框架基礎上進行二次開發,打造本身的Spark框架;

前面所述的成爲Spark高手的六個階段中的第一和第二個階段能夠經過自學逐步完成,隨後的三個階段最好是由高手或者專家的指引下一步步完成,最後一個階段,基本上就是到」無招勝有招」的時期,不少東西要用心領悟才能完成。

擴展閱讀:  Spark在騰訊雅虎優酷成功應用的深度解析 

Spark的硬件配置 有哪些要求?

Spark與存儲系統

若是Spark使用HDFS做爲存儲系統,則能夠有效地運用Spark的standalone mode cluster,讓Spark與HDFS部署在同一臺機器上。這種模式的部署很是簡單,且讀取文件的性能更高。固然,Spark對內存的使用是有要求的,須要合理分配它與HDFS的資源。所以,須要配置Spark和HDFS的環境變量,爲各自的任務分配內存和CPU資源,避免相互之間的資源爭用。

若HDFS的機器足夠好,這種部署能夠優先考慮。若數據處理的執行效率要求很是高,那麼仍是須要採用分離的部署模式,例如部署在Hadoop YARN集羣上。

擴展閱讀:

【 Spark on YARN集羣模式做業運行全過程分析 

Spark對磁盤的要求

Spark是in memory的迭代式運算平臺,所以它對磁盤的要求不高。Spark官方推薦爲每一個節點配置4-8塊磁盤,且並不須要配置爲RAID(即將磁盤做爲單獨的mount point)。而後,經過配置spark.local.dir來指定磁盤列表。

Spark對內存的要求

Spark雖然是in memory的運算平臺,但從官方資料看,彷佛自己對內存的要求並非特別苛刻。官方網站只是要求內存在8GB之上便可(Impala要求機器配置在128GB)。固然,真正要高效處理,仍然是內存越大越好。若內存超過200GB,則須要小心,由於JVM對超過200GB的內存管理存在問題,須要特別的配置。

內存容量足夠大,還得真正分給了Spark才行。Spark建議須要提供至少75%的內存空間分配給Spark,至於其他的內存空間,則分配給操做系統與buffer cache。這就須要部署Spark的機器足夠乾淨。

Spark對網絡的要求

Spark屬於網絡綁定型系統,於是建議使用10G及以上的網絡帶寬。

Spark對CPU的要求

Spark能夠支持一臺機器擴展至數十個CPU core,它實現的是線程之間最小共享。若內存足夠大,則制約運算性能的就是網絡帶寬與CPU數。

關於硬件配置的更多詳盡內容見  Spark的硬件配置 

相關文章
相關標籤/搜索