Spark Streaming 性能優化(一):spark.streaming.concurrentJobs 提高 Job 執行的並行度

背景知識:

  1. Spark總結整理(一):Spark內核架構(Spark從啓動到執行的流程)
  2. Spark Streaming 總結整理(一):Spark Streaming運行原理與核心概念

1. 明確 Spark中Job 與 Streaming中 Job 的區別

1.1 Spark Core

一個 RDD DAG Graph 可以生成一個或多個 Job(Action操作)

一個Job可以認爲就是會最終輸出一個結果RDD的一條由RDD組織而成的計算

Job在spark裏應用裏是一個被調度的單位

1.2 Streaming

一個 batch 的數據對應一個 DStreamGraph

而一個 DStreamGraph 包含一或多個關於 DStream 的輸出操作

每一個輸出對應於一個Job,一個 DStreamGraph 對應一個JobSet,裏面包含一個或多個Job

2. Streaming Job的並行度

Job的並行度由兩個配置決定:

  • spark.scheduler.mode(FIFO/FAIR)
  • spark.streaming.concurrentJobs

一個 Batch 可能會有多個 Action 執行,比如註冊了多個 Kafka 數據流,每個Action都會產生一個Job

所以一個 Batch 有可能是一批 Job,也就是 JobSet 的概念

這些 Job 由 jobExecutor 依次提交執行

而 JobExecutor 是一個默認池子大小爲1的線程池,所以只能執行完一個Job再執行另外一個Job

這裏說的池子,大小就是由spark.streaming.concurrentJobs 控制的

concurrentJobs 決定了向 Spark Core 提交Job的並行度

提交一個Job,必須等這個執行完了,纔會提交第二個

假設我們把它設置爲2,則會併發的把 Job 提交給 Spark Core

Spark 有自己的機制決定如何運行這兩個Job,這個機制其實就是FIFO或者FAIR(決定了資源的分配規則)

默認是 FIFO,也就是先進先出,把 concurrentJobs 設置爲2,但是如果底層是FIFO,那麼會優先執行先提交的Job

雖然如此,如果資源夠兩個job運行,還是會並行運行兩個Job

3. spark.streaming.concurrentJobs 可讓不同Batch的job同時在運行

Streaming 不僅僅能同時運行 同一個batch 的job,甚至還能同時運行不同 Batch的 Job

具體可參考:Spark Streaming 不同Batch任務可以並行計算麼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章