一、Spark 自定义Receiver
SparkStreaming 能够接收任意类型的流式数据,不单单只是内建的Flume,Kafka,Kinesis,files,sockets等等。当然若要支持此种数据,则需要开发者自定义程序来接受对应的数据源。本文以下部分就是要实现自定义的Receiver
二、自定义Receiver
声明一个receiver类,通常需要继承原有的基类,在这里需要继承自Receiver,该基类有两个方法需要重写分别是:
1. onstart() 接收器开始运行时触发方法,在该方法内需要启动一个线程,用来接收数据。
2. onstop() 接收器结束运行时触发的方法,在该方法内需要确保停止接收数据。
当然在接收数据流过程中也可能会发生终止接收数据的情况,这时候onstart内可以通过isStoped()来判断 ,是否应该停止接收数据
数据存储。一旦接收完数据,则必须要进行数据的存储,并交由SparkStreaming 来处理,Spark以store(data)方法来支持此流程。由于数据格式的不同,当然store方法必须要支持各种类型的数据存储。store方法是以一次存储一条记录或者一次性收集全部的序列化对象。
三、代码实现
采集端口内输入内容,接收到 ‘‘end’’ 停止
package sparkStreaming
import java.io.{
BufferedReader, InputStreamReader}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.receiver.Receiver
class myReceiver(host:String,port:Int) extends Receiver[String](StorageLevel.MEMORY_ONLY){
var socket