SparkStreaming如何優雅的停止服務

2021-09-02 19:34:23 字數 1041 閱讀 4100

我們都知道sparkstreaming程式是乙個長服務,一旦運轉起來不會輕易停掉,那麼如果我們想要停掉正在執行的程式應該怎麼做呢?

如果執行的是spark on yarn模式直接使用

暴力停掉sparkstreaming是有可能出現問題的,比如你的資料來源是kafka,已經載入了一批資料到sparkstreaming中正在處理,如果中途停掉,這個批次的資料很有可能沒有處理完,就被強制stop了,下次啟動時候會重複消費或者部分資料丟失。

如何解決?

1.4之前的版本,需要乙個鉤子函式:

1.4之後的版本,比較簡單,只需要在sparkconf裡面設定下面的引數即可:

sparkconf.set("spark.streaming.stopgracefullyonshutdown","true")

然後,如果需要停掉sparkstreaming程式時:

(1)登入spark ui頁面在executors頁面找到driver程式所在的機器

(2)使用ssh命令登入這台機器上,執行下面的命令通過埠號找到主程序然後kill掉

ss -tanlp | grep 55197|awk ''|awk -f, ''|xargs kill -15

注意上面的操作執行後,sparkstreaming程式,並不會立即停止,而是會把當前的批處理裡面的資料處理完畢後

才會停掉,此間sparkstreaming不會再消費kafka的資料,這樣以來就能保證結果不丟和重複。

此外還有乙個問題是,spark on yarn模式下,預設的情況driver程式的掛了,會自動再重啟一次,作為高可用,也就是上面的操作

你可能要執行兩次,才能真能的停掉程式,當然我們也可以設定驅動程式一次掛掉之後,就真的掛掉了,這樣就沒有容災機制了,需要慎重考慮:

上面的步驟還是有點複雜的,當然在網上有朋友提出在hdfs上建立乙個檔案,通過程式主動掃瞄來判斷是否應該停止,這樣的話不需要經歷前面停止的繁瑣的方式,後面有機會可以嘗試一下。

如切如磋,如琢如磨

有點難受的一天,以為幹了好多事情,晚上來機房補題,機房4個人,三個大佬乙個我。大佬們說的題和演算法我根本聽不懂,很挫敗。bgm my songs know what you did in the dark light em up string 我也不知道這首歌歌名為什麼沒有右括號 兩年了,我還是什麼...

Spark Streaming入門詳解

背景 使用spark主要是使用spark streaming,spark streaming的魔力之所在於 1.流式處理,如今是乙個流處理時代,一切與流不相關的都是無效的資料。3.spark streaming本身是乙個程式,spark streaming在處理資料的時候會不斷感知資料。所以對構建複...

Spark Streaming 程式監控

官網中指出,spark中專門為sparkstreaming程式的監控設定了額外的途徑,當使用streamingcontext時,在web ui中會出現乙個 streaming 的選項卡,在此選項卡內,統計的內容展示如下 這其中包括接受的記錄數量,每乙個batch內處理的記錄數,處理時間,以及總共消耗...