SparkStreaming实现WordCount

这几天开始看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即可

感谢阅读,我是啊帅和和,大数据专业大三学生,祝你快乐。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊帅和和。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值