自定义采集器
自定义采集器实现步骤:
- 继承 Receiver 类
- 实现集中
onStart()
、onStop()
方法 - 实例化自定义类
// 自定义 Receiver 类
class MyReceiver extends Receiver[String](StorageLevel.MEMORY_ONLY) {
private var flag = true
private var massage = ""
// 开始方法
override def onStart(): Unit = {
new Thread(new Runnable {
override def run(): Unit = {
while (flag) {
massage = "采集的数据为" + new Random().nextInt(10).toString
store(massage)
Thread.sleep(500)
}
}
}).start()
}
// 停止方法
override def onStop(): Unit = {
flag = false
}
}
def main(args: Array[String]): Unit = {
// 1. 初始化 Spark 配置信息
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("StreamWordCount")
// 2. 初始化 SparkStreamingContext
val ssc = new StreamingContext(sparkConf, Seconds(3))
// 3. 实例化自定义的 Receiver
val massageDS: ReceiverInputDStream[String] = ssc.receiverStream(new MyReceiver)
// 打印
massageDS.print()
// 启动 SparkStreamingContext
ssc.start()
ssc.awaitTermination()
}
Socket 采集器
使用 netcat 工具向某一端口号发送数据,并通过 SocketReceiver 采集数据。
def main(args: Array[String]): Unit = {
// 1. 初始化 Spark 配置信息
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("StreamWordCount")
// 2. 初始化 SparkStreamingContext
val ssc = new StreamingContext(sparkConf, Seconds(3))
// 3. 通过监控端口创建 DStream,读进来的数据为一行行
val lineStreams = ssc.socketTextStream(<主机地址>, <端口号>)
// 打印
lineStreams.print()
// 启动 SparkStreamingContext
ssc.start()
ssc.awaitTermination()
}
netcat工具下载连接:https://eternallybored.org/misc/netcat/
PS:加压后将 nc.exe
文件放到 C:\Windows\System32
目录下(关闭杀毒软件)