这几天开始看SparkStreaming,在开始做测试的时候中间出了一些问题,对其中的过程进行记录。
首先都是老一套,先添加依赖(注意pom.xml文件中的spark的版本一定要一致,不然会出现这个错误:java.lang.NoSuchMethodError: org.apache.spark.rpc.RpcEndpointRef.askWithRetry(Ljava/lang/Object;Lscala/reflect/ClassTag;即版本不一致出的错。)
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.1.1</version>
</dependency>
我一开始用的是2.12的版本,之后一致改为了2.11
简单的wordcount代码:
object Spark_Streaming_01_WordCount {
def main(args: Array[String]): Unit = {
//创建环境对象
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
//streamingcontext里面有两个参数,一个是conf,一个是设置的时间
val ssc: StreamingContext = new StreamingContext(conf, Seconds(3))
//获取端口数据(是一行一行的字符串)
val lines: ReceiverInputDStream[String] = ssc.socketTextStream("localhost", 9999)
//一行一行转换为一个一个单词
val words: DStream[String] = lines.flatMap(_.split(" "))
val wordToOne: DStream[(String, Int)] = words.map((_, 1))
val result: DStream[(String, Int)] = wordToOne.reduceByKey(_ + _)
result.print()
//由于sparkstreaming采集器是长期执行任务,不能直接关闭
//如果main方法执行完毕,应用程序也会随之结束,所以不能让main方法执行完毕
//ssc.stop()
//1.启动采集器
ssc.start()
//2.等待采集器的关闭
ssc.awaitTermination()
}
}
由于sparkstreaming是准实时,微批次的数据处理框架,这里我占用的是本地电脑的9999端口(需要下载一个小软件netcat,下载地址我会放在最后。)
运行wordcount之前打开dos命令窗口,进入:C:\Windows\System32(事先将netcat中的nc.exe放进这个路径下)
输入nc
输入nc -lp 9999
Linux中是(nc -lk 9999)
之后运行程序,(下面这个随便输入的字母是在程序运行之后输入的)
设置为每三秒运行一次,就一直在这运行。
摘取其中一个运行结果。
netcat的下载地址:https://eternallybored.org/misc/netcat/
我下载的是1.12版本的
解压之后将nc.exe放入C:\Windows\System32即可
感谢阅读,我是啊帅和和,大数据专业大三学生,祝你快乐。