2015-01-21 54 views
0

當使用增加分區的函數時,似乎會產生空的階段,調用重新分區時會發生同樣的情況,階段溢出了spark UI,並且我無法跟蹤真實階段,它使得UI無用使用reduceByKey時spark spark會繼續產生階段

我從字相同的行爲算例如 https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/streaming/JavaNetworkWordCount.java

我用火花1.1.0使用默認設置

+0

你能澄清你的問題嗎?您使用哪個Spark版本?提供您使用的代碼或至少它的簡化版本?你不把舞臺和任務混合在一起嗎?您使用的流式傳輸的設置(批處理間隔,spark.streaming.blockInterval,接收器數量)是多少? – 0x0FFF 2015-01-21 10:43:36

+0

我指的是在ui中完成的階段表而不發送數據到套接字spark繼續向表中添加條目 – ran 2015-01-21 11:43:27

回答

1

與火花流要處理的數據流。與例如,你連接它工作在一個批次數據的每個1秒:

JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, Durations.seconds(1)); 

這意味着每個1秒你有DSTREAM的內部產生一個單獨的RDD並執行所有的轉化。這會導致您在WebUI中看到許多單獨的階段逐一執行的事實 - 這是在每個單獨的輸入批次頂部執行的轉換

DStream內批處理RDD中創建的分區數量可以計算爲batch interval/spark.streaming.blockInterval其中默認設置會給你每個200毫秒額外的分區。嘗試將批處理間隔增加到1分鐘或至少30秒,並且您會看到這一點更好 - 幾乎您在nc中輸入的每行都會被轉換爲單獨的分區,並且單獨的分區會導致調度單獨的任務來處理它,這就是爲什麼一些階段會有超過1個任務。

+0

但是,爲什麼每當secondres添加新的階段時,當我使用reducebykey時沒有數據,而當我只使用map時add只有當數據爲 – ran 2015-01-21 12:18:00

+0

時,因爲即使對於空RDD它也執行至少一個任務。您可以簡單地啓動Spark shell(我更喜歡PySpark)並執行一些簡單的操作:'sc.parallelize([]).map(lambda x:(x,y))。reduceByKey(lambda x,y:x + y).collect ()' - 你會看到它會有2個階段,每個階段有1個任務 – 0x0FFF 2015-01-21 12:27:06

相關問題