<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 閱讀(567) 評論(0)  編輯  收藏 所屬分類: SPARK


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


    網站導航:
     
    主站蜘蛛池模板: 中文字幕亚洲第一| 亚洲国产亚洲综合在线尤物| 91成人免费在线视频| 一区二区三区免费在线视频| 国产成人精品日本亚洲网址| 亚洲AV无码久久精品色欲| 亚洲AV无码不卡在线观看下载| 一个人免费高清在线观看| 免费91最新地址永久入口| 成人嫩草影院免费观看| 亚洲AV综合永久无码精品天堂 | 日日摸日日碰夜夜爽亚洲| 国产一卡二卡3卡四卡免费| 在线观看免费视频一区| 在线播放亚洲精品| 亚洲精品无码av中文字幕| 亚洲人成在线中文字幕| 亚洲精品在线免费观看视频| 国产午夜亚洲精品午夜鲁丝片| 亚洲?v女人的天堂在线观看| 国产精品美女自在线观看免费 | 亚洲成a人片7777| 国产亚洲综合成人91精品| 亚洲综合色在线观看亚洲| 免费看国产一级片| 国产在线98福利播放视频免费| 成人免费淫片在线费观看 | 亚洲av永久无码精品网址 | 国产精品无码素人福利免费| 成人性生交视频免费观看| 18禁超污无遮挡无码免费网站国产| 精品国产免费人成电影在线观看| 久久久久免费精品国产小说| 久久这里只精品热免费99| 日韩免费无码视频一区二区三区 | 国产精品视频全国免费观看| 四虎国产精品成人免费久久| 国产vA免费精品高清在线观看| 午夜在线免费视频| caoporm碰最新免费公开视频| 两个人日本免费完整版在线观看1|