<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    Spark與Shark的原理

    1.Spark生態圈

    如下圖所示為Spark的整個生態圈,最底層為資源管理器,采用Mesos、Yarn等資源管理集群或者Spark 自帶的Standalone模式,底層存儲為文件系統或者其他格式的存儲系統如HBase。Spark作為計算框架,為上層多種應用提供服務。 Graphx和MLBase提供數據挖掘服務,如圖計算和挖掘迭代計算等。Shark提供SQL查詢服務,兼容Hive語法,性能比Hive快3-50 倍,BlinkDB是一個通過權衡數據精確度來提升查詢晌應時間的交互SQL查詢引擎,二者都可作為交互式查詢使用。Spark Streaming將流式計算分解成一系列短小的批處理計算,并且提供高可靠和吞吐量服務。



     2.Spark基本原理

    Spark運行框架如下圖所示,首先有集群資源管理服務(Cluster Manager)和運行作業任務的結點(Worker Node),然后就是每個應用的任務控制結點Driver和每個機器節點上有具體任務的執行進程(Executor)。



     
    與MR計算框架相比,Executor有二個優點:一個是多線程來執行具體的任務,而不是像MR那樣采用進程模型, 減少了任務的啟動開稍。二個是Executor上會有一個BlockManager存儲模塊,類似于KV系統(內存和磁盤共同作為存儲設備),當需要迭代 多輪時,可以將中間過程的數據先放到這個存儲系統上,下次需要時直接讀該存儲上數據,而不需要讀寫到hdfs等相關的文件系統里,或者在交互式查詢場景 下,事先將表Cache到該存儲系統上,提高讀寫IO性能。另外Spark在做Shuffle時,在Groupby,Join等場景下去掉了不必要的 Sort操作,相比于MapReduce只有Map和Reduce二種模式,Spark還提供了更加豐富全面的運算操作如 filter,groupby,join等。

     

    Notes: 在集群(cluster)方式下, Cluster Manager運行在一個jvm進程之中,而worker運行在另一個jvm進程中。在local cluster中,這些jvm進程都在同一臺機器中,如果是真正的standalone或Mesos及Yarn集群,worker與master或分布于不同的主機之上。

     

    JOB的生成和運行

    job生成的簡單流程如下

    1.首先應用程序創建SparkContext的實例,如實例為sc

    2.利用SparkContext的實例來創建生成RDD

    3.經過一連串的transformation操作,原始的RDD轉換成為其它類型的RDD

    4.當action作用于轉換之后RDD時,會調用SparkContext的runJob方法

    5.sc.runJob的調用是后面一連串反應的起點,關鍵性的躍變就發生在此處

    調用路徑大致如下

    1.sc.runJob->dagScheduler.runJob->submitJob

    2.DAGScheduler::submitJob會創建JobSummitted的event發送給內嵌類eventProcessActor

    3.eventProcessActor在接收到JobSubmmitted之后調用processEvent處理函數

    4.job到stage的轉換,生成finalStage并提交運行,關鍵是調用submitStage

    5.在submitStage中會計算stage之間的依賴關系,依賴關系分為寬依賴和窄依賴兩種

    6.如果計算中發現當前的stage沒有任何依賴或者所有的依賴都已經準備完畢,則提交task

    7.提交task是調用函數submitMissingTasks來完成

    8.task真正運行在哪個worker上面是由TaskScheduler來管理,也就是上面的submitMissingTasks會調用TaskScheduler::submitTasks

    9.TaskSchedulerImpl中會根據Spark的當前運行模式來創建相應的backend,如果是在單機運行則創建LocalBackend

    10.LocalBackend收到TaskSchedulerImpl傳遞進來的ReceiveOffers事件

    11.receiveOffers->executor.launchTask->TaskRunner.run

     

    Spark采用了Scala來編寫,在函數表達上Scala有天然的優勢,因此在表達復雜的機器學習算法能力比其他 語言更強且簡單易懂。提供各種操作函數來建立起RDD的DAG計算模型。把每一個操作都看成構建一個RDD來對待,而RDD則表示的是分布在多臺機器上的 數據集合,并且可以帶上各種操作函數。如下圖所示:



     首先從hdfs文件里讀取文本內容構建成一個RDD,然后使用filter()操作來對上次的RDD進行過濾,再使 用map()操作取得記錄的第一個字段,最后將其cache在內存上,后面就可以對之前cache過的數據做其他的操作。整個過程都將形成一個DAG計算 圖,每個操作步驟都有容錯機制,同時還可以將需要多次使用的數據cache起來,供后續迭代使用.

     

    3.Shark的工作原理

    Shark是基于Spark計算框架之上且兼容Hive語法的SQL執行引擎,由于底層的計算采用了Spark,性 能比MapReduce的Hive普遍快2倍以上,如果是純內存計算的SQL,要快5倍以上,當數據全部load在內存的話,將快10倍以上,因此 Shark可以作為交互式查詢應用服務來使用。

     上圖就是整個Shark的框架圖,與其他的SQL引擎相比,除了基于Spark的特性外,Shark是完全兼容Hive的語法,表結構以及UDF函數等,已有的HiveSql可以直接進行遷移至Shark上。


    與Hive相比,Shark的特性如下:

    1.以在線服務的方式執行任務,避免任務進程的啟動和銷毀開稍,通常MapReduce里的每個任務都是啟動和關閉進程的方式來運行的,而在Shark中,Server運行后,所有的工作節點也隨之啟動,隨后以常駐服務的形式不斷的接受Server發來的任務。

    2.Groupby和Join操作不需要Sort工作,當數據量內存能裝下時,一邊接收數據一邊執行計算操作。在Hive中,不管任何操作在Map到Reduce的過程都需要對Key進行Sort操作。

    3.對于性能要求更高的表,提供分布式Cache系統將表數據事先Cache至內存中,后續的查詢將直接訪問內存數據,不再需要磁盤開稍。

    4.還有很多Spark的特性,如可以采用Torrent來廣播變量和小數據,將執行計劃直接傳送給Task,DAG過程中的中間數據不需要落地到Hdfs文件系統。

    posted on 2015-06-18 13:20 paulwong 閱讀(569) 評論(0)  編輯  收藏 所屬分類: SPARK


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 伊人亚洲综合青草青草久热| 中文字幕免费在线看线人动作大片 | 青青草国产免费久久久91| 在线亚洲午夜理论AV大片| 一级做a爱片特黄在线观看免费看| 国产一区二区免费在线| 搜日本一区二区三区免费高清视频 | 国产乱色精品成人免费视频 | 亚洲色大情网站www| 在线免费观看毛片网站| 激情婷婷成人亚洲综合| 亚洲欧洲日产国码一级毛片| 一级视频免费观看| 国产亚洲精品xxx| 久久午夜羞羞影院免费观看| 亚洲福利视频一区二区三区| 手机看黄av免费网址| 亚洲色大成WWW亚洲女子| 日韩免费视频在线观看| caoporm超免费公开视频| 亚洲AV无码专区在线播放中文| 国产白丝无码免费视频| 亚洲一区二区影视| 免费看小12萝裸体视频国产| j8又粗又长又硬又爽免费视频| 亚洲av色福利天堂| 成年美女黄网站色大免费视频| 免费高清A级毛片在线播放| 国产亚洲精品岁国产微拍精品| 黄网站色在线视频免费观看| 亚洲AV无码一区二区三区鸳鸯影院| 中文字幕亚洲天堂| 免费福利网站在线观看| 一本到卡二卡三卡免费高| 亚洲色图古典武侠| 亚洲第一页综合图片自拍| 99精品免费观看| 猫咪免费观看人成网站在线| 亚洲嫩模在线观看| 全部免费国产潢色一级| 亚洲一区免费观看|