Spark Streaming实时流处理项目实战(七-1)Spark Streaming入门

概述

Spark Streaming是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理。数据可以从像卡夫卡,室壁运动,或TCP套接字许多来源摄入,并且可以使用与像高级别功能表达复杂的算法来处理map,reduce,join和window。最后,可以将处理后的数据推送到文件系统,数据库和实时仪表板。实际上,您可以在数据流上应用Spark的 机器学习和 图形处理算法。
在这里插入图片描述
在内部,它的工作方式如下。Spark Streaming接收实时输入数据流,并将数据分成批次,然后由Spark引擎处理,以成批生成最终结果流。
在这里插入图片描述
<Spark Streaming提供了称为离散化流或DStream的高级抽象,它表示连续的数据流。可以根据来自Kafka和Kinesis等来源的输入数据流来创建DStream,也可以通过对其他DStream应用高级操作来创建DStream。在内部,DStream表示为RDD序列 。
官方链接

Spark Streaming个人定义:将不同的数据源的数据经过Spark Streaming处理之后将结果集输出到外部文件系统

特点:

  • 低延时
  • 能从错我中高效的恢复:fault-tolerant
  • 能够运行在成百上千的节点
  • 能够将批处理、机器学习、图计算等子框架和Spark Streaming综合起来使用

架构:
在这里插入图片描述
从上图可以看出,只要安装了spark后,Spark Streaming不需要单独安装
验证了 One stack to rule them all:一栈式解决

应用场景

  • 交易过程中金融欺诈检测
  • 实时电子传感器
  • 电商产品推荐
  • web日志实时监控

在这里插入图片描述

集成Spark生态系统的使用

在这里插入图片描述

  • Spark Streaming 与 Spark Core 结合使用
    在这里插入图片描述
  • Spark Streaming 与 MLlib结合使用
    在这里插入图片描述
  • Spark Streaming 与 Spark SQL结合使用
    在这里插入图片描述

Spark Streaming发展史

在这里插入图片描述

  • 2011年伯克利大学提出
  • 2012年重写了spark core的大部分代码
  • 2014年发布稳定版本0.9版本(Spark Streaming正式毕业)

词频统计

使用spark-submit执行

使用spark-submit提交spark应用程序,适用于生产环境

spark源码地址:https://github.com/apache/spark/tree/master/examples/src/main
选择scala版本,resources下是测试数据
在这里插入图片描述
在这里插入图片描述

NetworkWordCount.scala是词频统计的代码,在安装spark的服务器上已经有这个编译好的jar包,直接拿来运行即可 CDH版本的jar包路径:/opt/cloudera/parcels/SPARK2-2.2.0.cloudera2-1.cdh5.12.0.p0.232957/lib/spark2/examples/jars/spark-examples_2.11-2.2.0.cloudera2.jar

新起一个客户端,“To run this on your local machine, you need to first run a Netcat server” 执行nc -lk 9999,监听9999端口

spark2-submit --master local[2] \
--class org.apache.spark.examples.streaming.NetworkWordCount \
--name NetworkWordCount \
/opt/cloudera/parcels/SPARK2-2.2.0.cloudera2-1.cdh5.12.0.p0.232957/lib/spark2/examples/jars/spark-examples_2.11-2.2.0.cloudera2.jar hadoop103 9999

注意:这里如果你的CDH Spark的版本升级到了spark2,这里要使用spark2-submit 最后hadoop103 和9999 是运行需要的两个参数:主机名和端口

在这里插入图片描述
这时在启动Netcat的窗口,发送数据,然后在启动submit的窗口观察,计算情况,可以发现很快就算出来了,注意计算的很快,稍微不注意就刷新过去了

[root@hadoop103 ~]# nc -lk 9999
a a a b c c a c a b c

a打印了5个,b打印了2个,c打印了4个,从下图中可以看到计算的是正确的。
在这里插入图片描述

使用spark-shell执行

如何使用spark-shell来提交任务(适用于测试环境)

[hdfs@hadoop103 ~]$ spark2-shell --master local[2]
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://172.16.3.160:4040
Spark context available as 'sc' (master = local[2], app id = local-1615465036316).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.2.0.cloudera2
      /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_192)
Type in expressions to have them evaluated.
Type :help for more information.

scala> import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.{Seconds, StreamingContext}

scala> val ssc = new StreamingContext(sc, Seconds(1))
ssc: org.apache.spark.streaming.StreamingContext = org.apache.spark.streaming.StreamingContext@6aed4a23

scala> val lines = ssc.socketTextStream("hadoop103", 9999)
lines: org.apache.spark.streaming.dstream.ReceiverInputDStream[String] = org.apache.spark.streaming.dstream.SocketInputDStream@14f254f

scala> val words = lines.flatMap(_.split(" "))
words: org.apache.spark.streaming.dstream.DStream[String] = org.apache.spark.streaming.dstream.FlatMappedDStream@2d0ce8a1

scala> val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts: org.apache.spark.streaming.dstream.DStream[(String, Int)] = org.apache.spark.streaming.dstream.ShuffledDStream@4973fb7d

scala> wordCounts.print()

scala> ssc.start()

scala> ssc.awaitTermination()-------------------------------------------
Time: 1615465111000 ms
-------------------------------------------

-------------------------------------------
Time: 1615465112000 ms
-------------------------------------------

-------------------------------------------
Time: 1615465113000 ms
-------------------------------------------

-------------------------------------------
Time: 1615465114000 ms
-------------------------------------------

[root@hadoop103 ~]# nc -lk 9999
a a c b c a d d a b

同样在右边窗口输入字符回车之后,就可以计算出相应的字符的count值
在这里插入图片描述
spark-shell这种方式适用于测试时,将自己开发的代码粘贴到spark-shell中去执行即可,如果使用spark-submit是要将代码进行打成包,然后才能使用submit的方式进行提交,比较繁琐,一般适用于生产环境。

工作原理

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

怒上王者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值