Spark学习之Spark Streaming(9)

Spark学习之Spark Streaming(9)

1. Spark Streaming允许用户使用一套和批处理非常接近的API来编写流式计算应用,这就可以大量重用批处理应用的技术甚至代码。

2. Spark Streaming使用离散化(discretized steam)作为抽象表示,叫做DStream。DStream是随时间推移而收到的数据的序列。

3. DSteam支持两种操作:转换操作(transformation),会生成一个新的DStream;另一种是输出操作(output operation),可以把数据写入到外部系统中。

4. Spark Stream的简单例子

需求:使用maven或者sbt打包编译出来独立应用的形式运行。从一台服务器的7777端口接受一个以换行符分隔的多行文本,要从中筛选出包含单词error的行,并打印出来。

    //Maven 索引
    groupID = org.apache.spark
    artifactID = spark-steaming_2.10
    version = 1.2.0
    //Scala流计算import声明
    import org.apache.spark.streaming.StreamingContext
    import org.apache.spark.streaming.StreamingContext._
    import org.apache.spark.streaming.dstream.DStream
    import org.apache.spark.streaming.Duration
    import org.apache.spark.streaming.Seconds
    //用Scala进行流式筛选,打印包含“error”的行
        //从SparkConf创建StreamingContext并指定1秒钟的处理
    val ssc = new SteamingContext(conf,Seconds(1))
        //连接到本地机器7777端口上后,使用收到的数据创建DStream
    val lines = ssc.socketTextStream("localhost",7777)
        //从DStream中筛选出包含字符串“error”的行
    val errorLines = lines.filter(_.contains("error"))
        //  打印拥有“error”的行
    errorLines.print()
    //用Scala进行流式筛选,打印出包含“error”的行
    ssc.start()
    //等待作业完成
    ssc.awaitTermination()
注意:一个Streaming context只能执行一次,所以只有在配置好所有DStream以及所需要的输出操作之后才启动。

最后:在Linux/Mac操作系统上运行流计算应用并提供数据
    $spark-submit --class com.oreilly.learningsparkexamples.scala.streamingLogInput \
    $ASSEMBLY_JAR local[4]

    $ nc localhost 7777 # 使你可以键入输入的行来发送给服务器 
Windows nc命令对应ncat

5. DStream 的转化操作可以分为两种:无状态(stateless)转化操作和有状态(stateful)转化操作。

5.1无状态转化操作中,每个批次的处理不依赖于之前批次的数据。
例如map()、filter()、reduceByKey()等。
5.2有状态转化操作中,需要使用之前批次的数据或者中间结果来计算当前批次的数据。
有状态转化操作包括基于滑动窗口的转化操作和追踪状态变化的转化操作。

6. 输出操作

输出操作指定了对数据经转化操作得到的数据所要执行的操作(例如把结果输出推入外部数据库或输出到屏幕上)。

7. 输入源包括:核心数据源、附加数据源、多数据源与集群规模。

8. Steaming用户界面http://localhost:4040可以查看运行详细信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

数据说话:Go语言的Switch和Map性能实测

在开发pgx(一个针对Go语言的PostgreSQL driver)的时候,有好几次我都需要在20多个代码分支间跳转。通常我会选用switch语句。还有个更加可...

3485
来自专栏吉浦迅科技

DAY71:阅读Device-side Launch from PTX

我们正带领大家开始阅读英文的《CUDA C Programming Guide》,今天是第71天,我们正在讲解CUDA 动态并行,希望在接下来的30天里,您可以...

682
来自专栏敏捷开发&项目管理

TDD 一个简单的例子

我们按照 TDD的1个准备步骤+关键5步来看做一个小例子。 需求: 假设我有一个叫Dollar的class, 那它有个方法叫做Times. 我现在的目的是要实现...

3308
来自专栏点滴积累

geotrellis使用(四十一)流水线技术

1433
来自专栏CDA数据分析师

集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布

Julia 可以看作是一门集众家之所长的编程语言,在首次公开时开发团队就已明确其需求:

321
来自专栏nimomeng的自我进阶

Swift 4.2新特性——WWDC2018 Session401笔记

厨子今年的演讲很不给力。不过既然是软件开发者大会嘛,焦点自然应该放在软件功能上。 所以我看了下今年的Session401,也就是Swift4.2新特性介绍,做...

952
来自专栏葡萄城控件技术团队

前端代码标准最佳实践:CSS篇

上一篇《前端代码标准最佳实践:javascript》发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高。这些最佳标准实践并不是那...

18210
来自专栏java 成神之路

jvm 性能调优工具之 jstat

35614
来自专栏大数据风控

懒癌必备-dplyr和data.table让你的数据分析事半功倍

duang,duang!Erin又上线为大家分享干货来了。 最近Erin在做信用风险评级模型的开发,几千行的代码敲的我头晕眼花。作为一个懒癌晚期,并且追求高...

1897
来自专栏大数据

加速python科学计算的方法(二)

好久不见。有一年了。 很久没有更推文了,我的错。额,进入正题吧。到了年底,很多App都会放出“你今年听了多少歌”、“你今年看了多少帖子”、“你今年剁手了多少次”...

22810

扫码关注云+社区