Spark Streaming Receiver
- Spark streaming dstreams and receivers
- Input DStream是指Receive接收到的輸入
- 所有的Input DStream(除了File stream)都會關聯到一個Receiver,而這個Receiver需要啟用一個Thread,並接收外部數據源
- File stream不需要receiver,是因為直接使用filesystem直接讀取即可
- Spark Receiver object會從數據源接收數據,並將數據儲存在Spark streaming的記憶體當中
- 若要在Streaming application內同時使用多個Receiver來接收數據,可以建立多個Input DStream來進行
- 在多個Receiver時,要確認分配給Application的core,需滿足分配給Receiver與Operations操作的最小core數
- Spark worker/executor是一個long-running task,因此一個Receiver會一直佔用一個core,因此要注意分配給Spark streaming
- 當運行Spark streaming本地模式時,千萬不要使用locla或local[1]作為master的URL,否則若Input DStream是基於receiver來接收數據的,那麼僅僅只有一個Tread作為Receiver去接收數據,則沒有多餘的Thread去處理接收來的數據,所以使用local[n],n > Receiver的數量
- 在Cluster中運行時,core的數量也一定要多於Receiver的數量,否則也只能接收數據,而無法處理數據