這篇文章主要介紹“如何解密Spark Streaming”,在日常操作中,相信很多人在如何解密Spark Streaming問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何解密Spark Streaming”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
公司主營業(yè)務:成都網(wǎng)站設計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出嶧城免費做網(wǎng)站回饋大家。
1,解密Spark Streaming Job架構和運行機制
先通過運行在線單詞統(tǒng)計這個例子,觀察Spark Streaming在控制臺上輸出的日志信息。
以下代碼為在9999端口監(jiān)聽客戶端連接請求,然后不斷向客戶端發(fā)送單詞。


先啟動SocketServer,然后在啟動SparkStreaming在線統(tǒng)計單詞的程序,代碼如下




運行過程總結如下
1,StreamingContext啟動后會ReceiverTracker,根據(jù)創(chuàng)建時指定的batchDuration時間,啟動RecurringTimer定時器,間隔Interval發(fā)送JobGenerator消息,會啟動JobGenerator和JobScheduler和BlockGenerator。
2,ReceiverTracker接收到Receiver(Stream 0)的注冊消息,然后RecevierSupervisorImpl啟動Receiver來接收數(shù)據(jù)。
3,SocketServer連接到localhost:9999開始接收數(shù)據(jù),將接收到的數(shù)據(jù)通過BlockGenerator存放到BlockManager中。
4,JobScheduler接收到定期發(fā)送的JobGenerator消息后,提交一個Job,DStreamGraph從ReceiverTracker中獲取數(shù)據(jù)生成RDD,DAGScheduler調度Job的執(zhí)行,讓TaskSchedulerImpl向Executor發(fā)送TaskSet,讓Executor執(zhí)行。
5,Task運行完后將結果發(fā)送給Driver,DAGScheduler和JbScheduler打印Job完成和耗時信息,最后在控制臺輸出單詞統(tǒng)計結果。
可以看到隨著時間的流逝會有不斷的Job生成并且運行,那么,Spark Streaming中Job是如何生成的?
在StreamingContext調用start方法的內部其實是會啟動JobScheduler的start方法,進行消息循環(huán),在JobScheduler的start內部會構造JobGenerator和ReceiverTracker,并且調用JobGenerator和ReceiverTracker的start方法
1,JobGenerator啟動后不斷的根據(jù)batchDuration生成一個個的Job
2,ReceiverTracker啟動后首先在Spark集群中啟動Receiver(其實在Executor中先啟動ReceiverSupervisor)在Receiver接收到數(shù)據(jù)后會通過ReceiverSupervisor將數(shù)據(jù)存儲到Executor的BlockManager中,并且把數(shù)據(jù)的Metadata信息發(fā)送給Driver的ReceiverTracker,在ReceiverTracker內部通過ReceivedBlockTracker來管理接收到的元數(shù)據(jù)信息
每個BatchInterval會產生一個具體的Job,其實這里的Job不是SparkCore中的Job,它只是基于DStreamGraph而生成的RDD的DAG而已,從Java角度講,相等于Runnable接口實例,此時要向運行Job需要提交給JobScheduler,在JobScheduler中通過線程池中單獨的線程
來提交Job到集群運行(其實是在線程中基于RDD的Action觸發(fā)真正的作業(yè)的運行)

為什么使用線程池?
1,作業(yè)不斷生成,所以為了提升效率,我們需要線程池。這和Executor中通過線程池執(zhí)行Task有異曲同工之妙
2,有可能設置了Job的FAIR公平調度的方式,這個時候也需要多線程的支持
2,解密Spark Streaming容錯架構和運行機制
容錯分為Driver級別的容錯和Executor級別的容錯。
在Executor級別的容錯具體為接收數(shù)據(jù)的安全性和任務執(zhí)行的安全性。在接收數(shù)據(jù)安全性方面,一種方式是Spark Streaming接收到數(shù)據(jù)默認為MEMORY_AND_DISK_2的方式,在兩臺機器的內存中,如果一臺機器上的Executor掛了,立即切換到另一臺機器上的Executor,這種方式一般情況下非常可靠且沒有切換時間。另外一種方式是WAL(Write Ahead Log),在數(shù)據(jù)到來時先通過WAL機制將數(shù)據(jù)進行日志記錄,如果有問題則從日志記錄中恢復,然后再把數(shù)據(jù)存到Executor中,再進行其他副本的復制,這種方式對性能有影響。在生產環(huán)境中一般使用Kafka存儲,Spark Streaming接收到數(shù)據(jù)丟失時可以從Kafka中回放。在任務執(zhí)行的安全性方面,靠RDD的容錯。
在Driver級別的容錯具體為DAG生成的模板,即DStreamGraph,RecevierTracker中存儲的元數(shù)據(jù)信息和JobScheduler中存儲的Job進行的進度情況等信息,只要通過checkpoint就可以了,每個Job生成之前進行checkpoint,在Job生成之后再進行checkpoint,如果出錯的話就從checkpoint中恢復。
到此,關于“如何解密Spark Streaming”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞標題:如何解密SparkStreaming
分享地址:http://www.jbt999.com/article46/ppjehg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)頁設計公司、靜態(tài)網(wǎng)站、自適應網(wǎng)站、響應式網(wǎng)站、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)