<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生態(tài)圈

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



     2.Spark基本原理

    Spark運(yùn)行框架如下圖所示,首先有集群資源管理服務(wù)(Cluster Manager)和運(yùn)行作業(yè)任務(wù)的結(jié)點(diǎn)(Worker Node),然后就是每個(gè)應(yīng)用的任務(wù)控制結(jié)點(diǎn)Driver和每個(gè)機(jī)器節(jié)點(diǎn)上有具體任務(wù)的執(zhí)行進(jìn)程(Executor)。



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

     

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

     

    JOB的生成和運(yùn)行

    job生成的簡(jiǎn)單流程如下

    1.首先應(yīng)用程序創(chuàng)建SparkContext的實(shí)例,如實(shí)例為sc

    2.利用SparkContext的實(shí)例來(lái)創(chuàng)建生成RDD

    3.經(jīng)過(guò)一連串的transformation操作,原始的RDD轉(zhuǎn)換成為其它類型的RDD

    4.當(dāng)action作用于轉(zhuǎn)換之后RDD時(shí),會(huì)調(diào)用SparkContext的runJob方法

    5.sc.runJob的調(diào)用是后面一連串反應(yīng)的起點(diǎn),關(guān)鍵性的躍變就發(fā)生在此處

    調(diào)用路徑大致如下

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

    2.DAGScheduler::submitJob會(huì)創(chuàng)建JobSummitted的event發(fā)送給內(nèi)嵌類eventProcessActor

    3.eventProcessActor在接收到JobSubmmitted之后調(diào)用processEvent處理函數(shù)

    4.job到stage的轉(zhuǎn)換,生成finalStage并提交運(yùn)行,關(guān)鍵是調(diào)用submitStage

    5.在submitStage中會(huì)計(jì)算stage之間的依賴關(guān)系,依賴關(guān)系分為寬依賴和窄依賴兩種

    6.如果計(jì)算中發(fā)現(xiàn)當(dāng)前的stage沒(méi)有任何依賴或者所有的依賴都已經(jīng)準(zhǔn)備完畢,則提交task

    7.提交task是調(diào)用函數(shù)submitMissingTasks來(lái)完成

    8.task真正運(yùn)行在哪個(gè)worker上面是由TaskScheduler來(lái)管理,也就是上面的submitMissingTasks會(huì)調(diào)用TaskScheduler::submitTasks

    9.TaskSchedulerImpl中會(huì)根據(jù)Spark的當(dāng)前運(yùn)行模式來(lái)創(chuàng)建相應(yīng)的backend,如果是在單機(jī)運(yùn)行則創(chuàng)建LocalBackend

    10.LocalBackend收到TaskSchedulerImpl傳遞進(jìn)來(lái)的ReceiveOffers事件

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

     

    Spark采用了Scala來(lái)編寫(xiě),在函數(shù)表達(dá)上Scala有天然的優(yōu)勢(shì),因此在表達(dá)復(fù)雜的機(jī)器學(xué)習(xí)算法能力比其他 語(yǔ)言更強(qiáng)且簡(jiǎn)單易懂。提供各種操作函數(shù)來(lái)建立起RDD的DAG計(jì)算模型。把每一個(gè)操作都看成構(gòu)建一個(gè)RDD來(lái)對(duì)待,而RDD則表示的是分布在多臺(tái)機(jī)器上的 數(shù)據(jù)集合,并且可以帶上各種操作函數(shù)。如下圖所示:



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

     

    3.Shark的工作原理

    Shark是基于Spark計(jì)算框架之上且兼容Hive語(yǔ)法的SQL執(zhí)行引擎,由于底層的計(jì)算采用了Spark,性 能比MapReduce的Hive普遍快2倍以上,如果是純內(nèi)存計(jì)算的SQL,要快5倍以上,當(dāng)數(shù)據(jù)全部load在內(nèi)存的話,將快10倍以上,因此 Shark可以作為交互式查詢應(yīng)用服務(wù)來(lái)使用。

     上圖就是整個(gè)Shark的框架圖,與其他的SQL引擎相比,除了基于Spark的特性外,Shark是完全兼容Hive的語(yǔ)法,表結(jié)構(gòu)以及UDF函數(shù)等,已有的HiveSql可以直接進(jìn)行遷移至Shark上。


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

    1.以在線服務(wù)的方式執(zhí)行任務(wù),避免任務(wù)進(jìn)程的啟動(dòng)和銷(xiāo)毀開(kāi)稍,通常MapReduce里的每個(gè)任務(wù)都是啟動(dòng)和關(guān)閉進(jìn)程的方式來(lái)運(yùn)行的,而在Shark中,Server運(yùn)行后,所有的工作節(jié)點(diǎn)也隨之啟動(dòng),隨后以常駐服務(wù)的形式不斷的接受Server發(fā)來(lái)的任務(wù)。

    2.Groupby和Join操作不需要Sort工作,當(dāng)數(shù)據(jù)量?jī)?nèi)存能裝下時(shí),一邊接收數(shù)據(jù)一邊執(zhí)行計(jì)算操作。在Hive中,不管任何操作在Map到Reduce的過(guò)程都需要對(duì)Key進(jìn)行Sort操作。

    3.對(duì)于性能要求更高的表,提供分布式Cache系統(tǒng)將表數(shù)據(jù)事先Cache至內(nèi)存中,后續(xù)的查詢將直接訪問(wèn)內(nèi)存數(shù)據(jù),不再需要磁盤(pán)開(kāi)稍。

    4.還有很多Spark的特性,如可以采用Torrent來(lái)廣播變量和小數(shù)據(jù),將執(zhí)行計(jì)劃直接傳送給Task,DAG過(guò)程中的中間數(shù)據(jù)不需要落地到Hdfs文件系統(tǒng)。

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产高清视频在线观看| 手机看片久久国产免费| 一个人免费观看www视频| 亚洲精品伦理熟女国产一区二区| 亚洲午夜精品一区二区公牛电影院| 亚洲精品无码不卡| 亚洲av无码无在线观看红杏| 亚洲国产成人一区二区三区| 久久精品国产亚洲av麻豆| 亚洲一久久久久久久久| 亚洲AV成人片无码网站| 成人婷婷网色偷偷亚洲男人的天堂| 污污视频免费观看网站| 老司机免费午夜精品视频| 色老头综合免费视频| 中文字幕av免费专区| 你是我的城池营垒免费看 | 亚洲av中文无码字幕色不卡| 中国人免费观看高清在线观看二区| 成人免费毛片内射美女-百度| 免费看黄视频网站| 精品国产免费观看| 四虎永久成人免费| 国产成人亚洲精品狼色在线| 亚洲国产精品无码久久久蜜芽| 亚洲精品色播一区二区| 亚洲国产精品免费视频| 无码中文字幕av免费放| 好看的电影网站亚洲一区| 亚洲成综合人影院在院播放| 国产区在线免费观看| 99免费在线观看视频| 午夜高清免费在线观看| 亚洲欧洲日产国码高潮αv| 国产亚洲福利精品一区| 国产亚洲精品成人久久网站| 国产免费阿v精品视频网址| 18禁免费无码无遮挡不卡网站| 国产亚洲精品免费| 国产精品亚洲精品青青青| 日韩a毛片免费观看|