零基础入门 Spark
吴磊
前 FreeWheel 机器学习研发经理
19171 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
零基础入门 Spark
15
15
1.0x
00:00/00:00
登录|注册

30|Structured Streaming:从“流动的Word Count”开始

你好,我是吴磊。
从今天这一讲开始,我们将进入流计算的学习模块。与以往任何时候都不同,今天的大数据处理,对于延迟性的要求越来越高,因此流处理的基本概念与工作原理,是每一个大数据从业者必备的“技能点”。
在这个模块中,按照惯例,我们还是从一个可以迅速上手的实例开始,带你初步认识 Spark 的流处理框架 Structured Streaming。然后,我们再从框架所提供的能力、特性出发,深入介绍 Structured Streaming 工作原理、最佳实践以及开发注意事项,等等。
在专栏的第一个模块,我们一直围绕着 Word Count 在打转,也就是通过从文件读取内容,然后以批处理的形式,来学习各式各样的数据处理技巧。而今天这一讲我们换个花样,从一个“流动的 Word Count”入手,去学习一下在流计算的框架下,Word Count 是怎么做的。

环境准备

要上手今天的实例,你只需要拥有 Spark 本地环境即可,并不需要分布式的物理集群。
不过,咱们需要以“流”的形式,为 Spark 提供输入数据,因此,要完成今天的实验,我们需要开启两个命令行终端。一个用于启动 spark-shell,另一个用于开启 Socket 端口并输入数据,如下图所示。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Structured Streaming框架下的流处理实例“流动的Word Count”,通过实例演示了在流处理框架下如何实现实时的Word Count计算。作者详细讲解了环境准备和实现流动的Word Count的步骤,包括使用netcat工具向本地9999端口的Socket地址发送数据,并使用Spark的Structured Streaming框架监听该端口,实时处理数据。文章重点介绍了数据加载和数据处理的过程,包括使用SparkSession的readStream API创建DataFrame、指定数据源类型和选项,以及使用DataFrame API完成Word Count计算逻辑。此外,文章还介绍了在Structured Streaming框架下,如何使用writeStream API将处理结果写入到不同类型的Sink中,以及不同的输出模式。通过对比Complete mode和Update mode的执行结果,读者可以直观地了解不同输出模式的特点和区别。整体而言,本文以实例为引,详细介绍了Structured Streaming框架下的流处理实践,对于想要了解流处理基本概念和实现方法的读者具有很好的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《零基础入门 Spark》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 东围居士
    老师,我一直都有个疑惑,Spark Streaming 和 Spark Structured Streaming 有什么区别呢,现在企业里面用哪个更多,如果我们现在要学习的话,是不是只学 Spark Structured Streaming 就可以了?

    作者回复: 好问题,Spark Streaming、Spark MLlib(RDD based)、GraphX,和Structured Streaming、Spark MLlib(DataFrame based)、GraphFrames,都是相对的,前者都是基于Spark Core,都是基于RDD的计算子框架,而后者,都是基于DataFrame,可以共享Spark SQL性能红利的子框架。 简单来说,后者是前者的“继任者”,Spark社区官方,会推荐大家从老的RDD based子框架,迁移到新的DataFrame based、Spark SQL powered 子框架。 不过呢,出于历史原因,很多企业在很早就adopt了Spark,比如早在1.x版本,就开始采用Spark了,那个时候,大家用的还都是RDD based子框架,应用代码也都是基于那些子框架开发的,这里面有个迁移成本的问题。所以,据我所知,到现在为止,还有一些公司,出于怕麻烦的原因,还没有迁移,还在沿用老的子框架。 不过,如果是公司新的业务需求,或者新上马Spark,那么我建议都采用DataFrame based、Spark SQL powered新框架,来共享Spark SQL提供的执行性能。当然了,新框架的开发、完善,还需要一定的过程,不过到目前为止,在功能方面,新框架基本上都支持了,而且像Structured Streaming,相比老的Spark Streaming,还提供了Event time、Late data、Watermark这些更丰富的功能支持。所以说,如果受公司所限,不得不维护老框架,那这个确实比较麻烦一些,还要学老框架;但如果是新项目、新部署,那么还是推荐新框架,来同时收获完善的功能和高效的执行性能~

    2021-11-23
    6
  • 大叮当
    老师您好,一直有个问题想请请您解惑下。 就是kafka每个主题都有个分区的概念,理论上说,一个消费者组中消费者数目和分区数一致,是效率最高的。 引申到Spark Streaming/Spark Structured Streaming,我的理解: 1、executor数目,和要消费的topic中的分区数目一致,效能最高,不知道这个点我理解对不对。 我的问题是:假设我的场景就是Spark Streaming/Spark Structured Streaming消费kafka解析其中的json数据,然后写入诸如redis,hbase这样的nosql组件。 基于这样的场景,我是不是每个executor只分配1个CPU核就可以了,比如我一个topic有3个partition,那么我指定3个executor(先不考虑driver),每个executor1个cpu核就够了,如果每个executor多个核反而浪费了,用不到?? 恳请老师解惑,谢谢

    作者回复: 好问题~ 完全正确:“理论上说,一个消费者组中消费者数目和分区数一致,是效率最高的”,不过,更具体地说,Kafka Partitions的数量,应该和Spark Executors所拥有的总cores相对应。 举个例子,一个Kafka Topic,有60个Partitions,那么一个Spark集群,不管有多少个Executors,总cores可以被60整除,就是比较好的设置。比方说,有10个Executors,每个Executors有3个core,总共30 cores,这个是个好配置。再比如,30个Executors,每个Executor一个core,这个设置也行。在或者,30个Executors,每个Executor两个core,也可以的~ 不过,像你说的,如果Kafka总共60个Partitions,但是Spark集群起的Executors cores大于这个数字,那多余的CPU就会浪费掉。比如说,起20个Executors,但是每个Executors给4个core,那多出来的20个core,就完全浪费掉了。 其实,对于Kafka Partitions与Spark的对应关系,你不妨这样简单理解: 就把Kafka当成HDFS,把Kafka的Topic,当成是HDFS上的一个分布式文件,Kafka Topic的Partitions,其实可以类比分布式文件在HDFS上的数据分片。这样来理解,很多设置就迎刃而解了~

    2021-11-19
    2
    6
  • blank
    想问一下老师,_spark_metadata在本地时丢失 不会影响streaming job正常运行,但在azure上,会发生unable to find batch /_spark_metadata/0的情况 这个问题要怎么处理呢。什么情况下metadata文件会丢失呢
    2022-09-06归属地:上海
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部