第1課:經過案例對SparkStreaming 透徹理解三板斧之一

背景:web

    爲何從SparkStreaming入手?瀏覽器

    由於SparkStreaming 是Spark Core上的一個子框架,若是咱們可以徹底精通了一個子框架,咱們就可以更好的駕馭Spark。SparkStreaming和Spark SQL是目前最流行的框架,從研究角度而言,Spark SQL有太多涉及到SQL優化的問題,不太適應用來深刻研究。而SparkStreaming和其餘的框架不一樣,它更像是SparkCore的一個應用程序。若是咱們能深刻的瞭解SparkStreaming,那咱們就能夠寫出很是複雜的應用程序。負載均衡

  SparkStreaming的優點是能夠結合SparkSQL、圖計算、機器學習,功能更增強大。這個時代,單純的流計算已經沒法知足客戶的需求啦。在Spark中SparkStreaming也是最容易出現問題的,由於它是不斷的運行,內部比較複雜。框架

本課內容:機器學習

1,SparkStreaming另類在線實驗oop

     這個另類在線實驗體如今batchInterval設置的很大,5分鐘甚至更大,爲了更清晰的看清楚Streaming運行的各個環境。學習

     實驗內容是使用SparkStreaming在線統計單詞個數,SparkStreaming鏈接一個端口中接收發送過來的單詞數據,將統計信息輸出到控制檯中,其中使用netcat建立一個簡單的server,來開啓並監聽一個端口,接收用戶鍵盤輸入的單詞數據。優化

2,瞬間理解SparkStreaming的本質spa

     結合這個實驗並經過觀察Web UI上的Job,Stage,Task等信息,再結合SparkStreaming的源碼,對SparkStreaming進行分析。server

實驗環境說明:

     實驗由3臺Ubuntu14.04虛擬機上運行,其中一臺做爲Spark的Master,另外兩臺做爲Spark的Worker。使用的Spark版本爲目前最早版1.6.1,Spark checkpoint的存儲在HDFS上(hadoop的版本爲2.6.0)。爲了記錄SparkStreaming運行的過程信息,須要啓動Spark的HistoryServer,如下是啓廳Spark,HDFS,HistoryServer服務的腳本。

             

   經過使用JPS觀察各節點的進行信息,或經過瀏覽器訪問各個服務WEB頁面來確認服務是否正確運行。

實驗代碼以下

提交到Spark集羣的腳本以下

首先在Master節點使用nc -lk 9999,建立一個簡單的Server,而後在運行腳本提交Spark Application。

從網上找來一篇英文文章,以下

單詞統計結果以下

在Spark UI上觀察發現有4個Job

首先查看Job 0發現SparkStreaming在剛啓動時會提交一個Job

StreamingContext的start方法中調用了JobScheduler的start方法

繼續看JobScheduler類的start方法

從註釋中說明該方法是爲了確保每一個Slave都註冊上,避免全部的Receiver在同一個節點,爲了後面計算負載均衡。

Job1一直在運行是由於它不斷接收數據流中的數據,運行在Worker1上而且運行1個Task來接收數據,數據本地性爲PROCESS_LOCAL,receiver接收到數據會保存到內存中。

Job2的信息以下

其中Stage3信息以下

其中Stage4信息以下

Job3的信息以下,Job3的DAG圖和Job2的DAG圖是同樣的,可是Stage5跳過了。

後面的Job都是在對單詞切分統計。

     回顧這4個Job,其中2個Job是框架運行的,Job0確保全部slave都註冊上,避免全部的Receiver在同一個節點,爲了後面計算負載均衡。Job1爲啓動一個數據接收器,運行在一個Executor上的一個Task上,不斷接收數據量數據,而後保存到內存中。Job2和Job3在運行單詞切分統計。

相關文章
相關標籤/搜索