0

最近我一直在Spark Streaming上進行性能測試。我在6個從站之一上運行了一個接收器,並向集羣提交了一個簡單的字數統計應用程序(實際上,我知道這種配置在實踐中並不合適,只是一個簡單的測試)。我分析了調度日誌,發現近88%任務被安排到接收器運行的節點,並且局部總是處於PROCESS_LOCAL狀態,並且CPU利用率非常高。 Spark Streaming爲什麼不在整個集羣中分佈數據並充分利用集羣?我讀過官方指南,並沒有詳細解釋,特別是在Spark Streaming中。如果任務位於CPU繁忙的節點上,它是否會將流數據複製到具有空閒CPU的另一個節點並啓動新任務?如果是這樣,我們如何解釋前一種情況?Spark Streaming中的數據區域

回答

1

當您在6個節點之一上運行流receiver時,將在此節點上處理所有接收到的數據(即數據區域)。

默認情況下,數據不會分佈在其他節點上。如果需要進一步的處理之前的輸入流被重新分區(在集羣平衡),則可以使用

inputStream.repartition(<number of partitions>)

這進一步處理前分配跨集羣中機器的指定數量的數據的接收到的批次。

可以星火文檔
https://spark.apache.org/docs/latest/streaming-programming-guide.html#performance-tuning

+0

我做了重新分區測試和流的延遲似乎未改良,比以前更大的閱讀更多關於並行的水平。實驗在兩臺物理服務器上託管的6個節點的虛擬集羣中完成。 –

+0

如何啓動多個接收器?羣集中的CPU利用率是否已更改?不是它應該在所有節點之間更加平衡。 – vanekjar

+0

重新分區後,虛擬羣集中的CPU利用率發生了變化。它似乎在所有節點之間更加平衡,但延遲並沒有得到顯着改善。我不確定是什麼原因造成的,重新分配會導致接收器運行的節點或更多網絡傳輸的負載增加? –