2016-03-02 122 views
0

背景執行順序流

我有一個火花流應用,從室壁運動讀取數據 - >不就可以了窗口 - >將數據保存到外部系統(通過做foreachRDD )。

最近我觀察到,我的窗戶被foreachRDD一個接一個地佔用。這意味着如果我的應用程序中有突然突發的數據(因此窗口的foreachRDD需要很長時間),那麼窗口將在處理之前堆疊在隊列中(而羣集中的大多數計算機處於空閒狀態)。

問題

這是一個語義火花流的是窗口正在處理一個接一個?如果是的話,是否有任何方法可以在spark中並行執行「窗口化」操作,以便窗口同時被foreachRDD使用?

回答

0

找出你的kinesis流有多少分片,並通過調用KinesisUtils Scala類中定義的createStream來創建許多接收者。

blog post from Amazon解釋得很好....

每個輸入DSTREAM與接收器相關聯的,在這種情況下 也有KCL工人。理解這一點的最好方法是參考 在KinesisUtils Scala類中定義的方法createStream。

每次調用KinesisUtils.createStream時,都會在Spark執行器上實例化Spark Streaming 接收器和KCL工作進程。第一次創建KCL工作者 時,它連接到Amazon Kinesis流, 爲其管理的每個分片實例化一個記錄處理器。對於每次後續呼叫 ,都將創建一個新的KCL工作人員,並在所有可用的KCL工作人員之間重新平衡處理器的記錄 。 KCL 工作人員從碎片中提取數據,並將它們傳送到接收器 ,然後將它們存儲到關聯的DStream中。