【Spark你媽喊你回家喫飯-01】 Spark是什麼鬼?

      經過一段時間的學習和測試,是時候給spark的學習經歷做一個總結了,對於spark的瞭解相對晚了寫。春節期間(預計是無大事),本博準備推出20篇左右spark系列原創文章(先把牛吹出去再說) ,儘量將枯燥無味的技術講的通俗易懂- r.kelly

     2013年的時候第一次聽說spark這麼個神器,那時候它還幼小,沒什麼人鳥它,但是它強大基因註定了它不是個凡夫俗子, 故事就是從那一小撮人羣中開始的。

一、Spark何許人也

    姓名:Spark

    性別:未知

    出生地:加州大學伯克利分校AMP實驗室

    出生年月:2009年,2010年他被AMP實驗室公諸於世(正式開源),2013年6月被Apache開源組織收爲乾兒子, 它乾爸決定重要培養,花了不少資源把他調到了尖子班(Apaceh頂級項目)

  

  裏面有帥氣小夥如  Reynold Xin,中文名字辛湜(Shark作者),也有神一樣的大牛,如橫跨工業界和學術界的操着羅馬尼亞口音的 matei zaharia(加州大學伯克利分校amp實驗室博士)

   七大姑八大姨:各個國家的知名公司都是,如BAT、YAHOO、4QUANT- (瑞士一家公司,專注視頻和圖片分析公司)

 有好多好多,不願意列舉了,可以去官網http://spark.apache.org/powered-by.html


二、高貴的基因


1.spark是什麼鬼-分佈式計算框架

    Mapreduce也是分佈式計算框架,但是Spark要多加2個字,分佈式內存計算框架,牛就牛在內存這塊。MR分佈式計算框架比較會偷懶,幹活幹着幹着就把活放着休息(寫到磁盤),而Spark則不偷懶,一直幹不停(數據都在內存),隨叫隨到,從不猶豫,並且Spark幹活也比較有方法,愛動腦子(DAG)。

   所以和它的堂兄MapRedcue比起來,有如哪些不同點呢:

  (1)Spark腦子聰明、不偷懶- 中間結果不輸出磁盤

     MR喜歡將中間結果寫到磁盤上,MR做事又喜歡將一件事情分層幾個環節來做(多個stage,執行的時候講多個stage串聯起來),每個環節都把中間結果寫到磁盤,下個stage又從磁盤拿出來,難免囉嗦、麻煩效率低(MR做事比較死板,一板一眼按流程挨個做(一個任務分爲多個stage串行執行))。

    Spark相對機靈一點,事先評估好做事情的策略和方法,哪些事情可以放在一起,哪些不放在一起,方法策略定好後(所有動作抽象爲有向五環圖執行計劃DAG),再動手幹,規劃好的事情可以挨個做,也可以同時做,活不離手(數據在內存),當然有時候拿不過來了,也可以放一放手(寫到磁盤上),下次再要做的時候再拿起來繼續。

    但是顯然spark的缺點也明顯了,內存,你的數據一致放在內存,哪有那麼多內存讓你敗啊,如果和其他一樣需要消耗內存的服務在一起,肯定要打個你死我活。MR就不會,別人想多點內存,他一點都不在意,誰要誰拿去,哥不稀罕。

   

   (2)脾氣不好-spark容錯比maprduce要差

     有點才華的人脾氣都大啊,spark比較有個性,脾氣確實不咋地。如果活幹着幹着失敗了,spark暴怒之下就要從頭再來(做事太急,急的都不知道自己在哪裏跌倒了-因爲數據在內存,需要重新計算),而MR則不會從頭再來,他哪裏跌倒哪裏爬起來,因爲做事情慢,所以也是有條不紊(知道在哪裏跌倒了-數據在磁盤)。

   其實兩個人都有比較好的脾氣- 好的容錯能力,但是他們對比起來,MR容錯能力略好一點。

   

   (3)相處能力(與其他組件的兼容性)

      spark可以自己單幹,也可以在yarn上一夥人幹,喫飯也不挑剔-(數據源可以是HDFS支持的各類文件格式),還可以通過jdbc和odbc和家族之外人共事(與傳統BI工具)

     mr內心是這樣想的:這有什麼好拿出來炫耀的,我也可以做到。確實他們兩兄弟在這一點上是旗鼓相當的。

  (4)身體健康(安全性)


   · 血型- 編程語言

    spark的選型是scala,mapreduce的血型是java,從血型看,scala更厲害一點,scala血型的人擅長幹體力活(處理數據),並且也支持其他血型(java,python,sql),尤其是對sql的支持,比mapreduce不知道強了多少倍。java血型更適合處理綜合性的複雜事情,並不是很擅長幹體力活,並且幹活時的套路太多了(寫個mr程序各種框架套着)

     Spark 更易於編程,同時也包含交互式模式;Hadoop MapReduce 不易編程但是現有的很多工具使其更易於使用。

    · 免疫能力-安全機制

      畢竟大哥就是大哥,年齡在那裏擺着呢,免疫能力當然更好一點-具備所有 Hadoop 支持的安全機制,同時也整合了其它基於 Hadoop 的安全項目, 比如  Knox 網關和  Sentry。志在解決 Hadoop 安全的  Rhino 項目也只是在添加 Sentry 支持時添加了 Spark 支持。否則 Spark 開發者們只能自己去提升其安全性了。

        Spark 則略顯不足。 授權驗證由共享祕鑰機制支持,網絡用戶接口則通過 servlet 過濾器和事件日誌保護。Spark 可以運行在 YARN 上並配合使用 HDFS, 這也就意味着它同時還擁有 Kerberos 認證授權驗證,HDFS 文件許可機制和節點間的加密機制。


2.spark骨架如何

   

 

 

基於對MR的理解,回憶一下分佈式計算碰到的幾個典型問題

(1)分佈式情況下,資源如何分配,誰負責分配資源,資源都在哪裏 ?

(2)分佈式情況下,任務如何分配,任務哪裏來,誰分配任務,分給誰?

(3)分佈式情況下,任務執行的時候,如何跟蹤任務進度,誰統一彙總任務執行情況,下面的人如何回報任務?

(4)分佈式情況下,任務執行的時候,如何跟蹤資源動態使用情況,誰負責統計所有資源情況,各個節點怎麼回報資源給統計的人?

其實分佈式計算框架,就這點破事,折騰不出什麼新鮮花樣,基於對上面問題的思考,看看spark是怎麼解決的。

(1)資源分配問題:ClusterManager負責資源分配,怎麼分配由ClusterManager自己選擇分配算法,資源都在Worker上面(一幫幹活的兄弟),ClusterManager首先必須知道各個兄弟有什麼資源,任務一旦來了(來了就需要消耗資源),ClusterManager根據實際情況切分任務,各個兄弟都攤派出一些資源(磁盤、內存、網絡)來處理任務【一級分配】

(2)任務分配問題:任務分配可以有多種方式和策略,如基於YARN,MESOS來安排任務的分配和任務執行時對任務的監控,任務來源很明顯就是Driver app提交過來的。

(3)如何跟蹤執行的任務:任務的執行最後會落實到worker上,所以任務跟蹤必須是work和YARN等反饋,讓yarn來統一管理任務的執行情況,任務來了之後,worker內部也要調配人馬,組織以一個的executor來分解任務,從而提升任務執行的效率,能並行的並行,不能 的就串行,但是每一個executor執行的情況都要彙總起來,統一由worker的某個服務一起回報給yarn,driver app(交互界面可以看到任務執行的進度)。

(4)如何跟蹤資源的使用情況:Spark 的工作節點。對 Spark 應用程序來說,由集羣管理器分配得到資源的 Worker 節點主要負責以下工作:創建 Executor ,將資源和任務進一步分配給 Executor ,同步資源信息給 Cluster Manager 。


3.spark的各個身體器官

 

 

· 心臟 - spark core

人心臟停止跳動就死掉了,spark的心臟是spark core,所有的功能都是建立在這基礎之上,

a.負責與下面的人打交道:與文件系統如HDFS,

b.負責與上面的人打交道:應用程序開發

c.管理自家財產:如內存、CPU等

d. 管理自己事物:如任務的管理等

凡是要交互的功能,都和spark core有千絲萬縷的聯繫,沒有它,全都得掛

·  嘴巴 - spark sql

外界通過spark sql可以快速傳達要spark做什麼,並且這是一個懂得BI方言的嘴巴,很容易和傳統的BI家族進行交互,是外部和spark打交道的重要入口。

· 一個一直張開的嘴巴-spark streaming

有時候spark sql做事有點磨嘰,spark streaming 就來解決,一個一直張開的嘴巴從來就不關閉,一直喫喫喫....永不停歇。

· MLLIB

SPARK的開掛技能,spark很聰明,它知道有些人的腦子不夠用,寫不出來那些牛逼的機器學習算法,所以他準備好了葵花寶典,寫不出來不要緊,按照葵花寶典就可以寫出來了,分類、迴歸、聚類、協同等等,可擴展的Spark機器學習庫,由通用的學習算法和工具組成,包括二元分類、線性迴歸、聚類、協同過濾、梯度下降以及底層優化原語。用於機器學習和統計等場景

·GRAPHX

開掛技能,處理圖計算的寶典,直接用就可以了。GraphX是用於圖計算和並行圖計算的新的(alpha)Spark API。通過引入彈性分佈式屬性圖(Resilient Distributed Property Graph),一種頂點和邊都帶有屬性的有向多重圖,擴展了Spark RDD。爲了支持圖計算,GraphX暴露了一個基礎操作符集合(如subgraph,joinVertices和aggregateMessages)和一個經過優化的Pregel API變體。此外,GraphX還包括一個持續增長的用於簡化圖分析任務的圖算法和構建器集合。


4.參考資料

1.http://www.tuicool.com/articles/RbUbuiQ

2.辛湜專訪-http://www.csdn.net/article/2013-04-26/2815057-Spark-Reynold,

3.加州大學伯克利分校amp實驗室博士matei zaharia:spark的現狀和未來.pdf-http://www.open-open.com/doc/view/53c1d9db9c4d4df58c6eb8d148739a8a

4.UC Berkeley AMPLab -- 是實驗室也是孵化器https://zhuanlan.zhihu.com/p/21350352?refer=bittiger

5.spark官網

 

 

【Spark你媽喊你回家喫飯】系列爲本博原創文章,同時發佈在微信公衆號:大數據梅峯谷,轉載請註明,想了解更多精彩大數據技術文章,請關注微信公衆號:大數據梅峯谷 ,也可以掃描二維碼

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章