Spark Streaming


1 Why Apache Spark

2 关于Apache Spark

3 如何安装Apache Spark

4 Apache Spark的工作原理

5 spark弹性分布式数据集

6 RDD持久性

7 spark共享变量

8 Spark SQL

9 Spark Streaming

原文链接:http://blogxinxiucan.sh1.newtouch.com/2017/07/23/Spark-Streaming/



Spark Streaming使用Spark的简单编程模型提供了可扩展,容错,高效的处理流数据的方式。它将流数据转换为“微”批次,这使得Spark的批处理编程模型能够应用于Streaming用例。这种统一的编程模型使得批量和交互式数据处理与流媒体的结合变得容易。图10显示了Spark Streaming如何用于分析来自多个数据源的数据源。

Spark Streaming中的核心抽象是离散流(DStream)。DStream是一系列RDD。每个RDD包含以可配置的时间间隔接收的数据。图12显示了Spark Streaming如何通过将输入数据转换为RDD序列来创建DStream。每个RDD包含由间隔长度定义的每2秒接收的流数据。这可能只有1/2秒,因此处理时间的延迟可能低于1秒。

Spark Streaming还提供复杂的窗口操作符,可帮助您在滚动窗口中对RDD集合进行高效计算。DStream公开了一个API,其中包含应用于组件RDD的运算符(转换和输出运算符)。我们来尝试使用Spark Streaming下载中给出的一个简单示例来理解这一点。假设你想在Twitter流中找到热门哈希标签。请参阅以下示例来查找完整的代码段:

spark-1.0.1/examples/src/main/scala/org/apache/spark/examples/streaming/TwitterPopularTags.scala
val sparkConf = new SparkConf().setAppName(“TwitterPopularTags”)
val ssc = new StreamingContext(sparkConf, Seconds(2))
val stream = TwitterUtils.createStream(ssc, None, filters)

上面的代码段正在设置Spark Streaming Context。Spark Streaming将在DStream中创建一个包含每两秒检索的Tweets的RDD。

val hashTags = stream.flatMap(status => status.getText.split(“ “).filter(_.startsWith(“#”)))

上述代码片段将tweet转换为单词序列,然后只对以#开头的那些进行过滤。

val topCounts60 = hashTags.map((_, 1)).reduceByKeyAndWindow(_ + _, Seconds(60)).map{case (topic, count) => (count, topic)}.

上面的代码片段显示了如何计算在60秒的窗口中提到的主题标签的次数的滚动聚合。

topCounts60.foreachRDD(rdd => {
val topList = rdd.take(10)
println(“\nPopular topics in last 60 seconds (%s
total):”.format(rdd.count())) topList.foreach{case (count, tag) => println(“%s (%s
tweets)”.format(tag, count))} })

上面的代码片段显示了如何提取十大热门推文,然后打印出来

ssc.start()

上述代码段指示Spark Streaming Context开始检索Tweets。我们来看几个流行的操作。假设我们正在从套接字读取流文本

al lines = ssc.socketTextStream(“localhost”, 9999, StorageLevel.MEMORY_AND_DISK_SER)

map(func)

目的:通过将此函数应用于DStream中的高分辨率RDDS来创建新的lines.map(x=>x.tolnt*10).print()

prompt> nc -lk 9999

12

34

输出:

120

340

flatMap(func)

目的:与map相同,但映射函数可以输出0个以上的项目

lines.flatMap(_.split(“ “)).print()

prompt> nc -lk

9999

Spark很有趣

输出:

Spark很有趣

count()

目的:创建包含数据元素数的RDD的DStream

lines.flatMap(_.split(“ “)).print()

prompt> NC -lk

9999



你好



火花

输出:

4

reduce(func)

目的:与count相同但不是count,通过应用该函数导出该值

lines.map(x=>x.toInt).reduce(_+_).print()

prompt> nc -lk

9999

1

3

5

7

输出:

16

countByValue()

目的:这与map相同,但映射函数可以输出0个或更多个项目

lines.map(x=>x.toInt).reduce(_+_).print()

prompt> nc -lk 9999

9999

火花

火花



有趣的

乐趣

输出:

(is,1)

(spark,2)

(fun,2)

reduceByKey(FUNC,[numTasks])

lines.map(x=>x.toInt).reduce(_+_).print()

prompt> nc -lk 9999

9999

火花

火花



有趣的

乐趣

输出:

(is,1)

(spark,2)

(fun,2)

reduceByKey(FUNC,[numTasks])

val words = lines.flatMap(_.split(“ “))
val wordCounts = words.map(x => (x, 1)).
reduceByKey(_+_)
wordCounts.print()

prompt>nc –lk 9999

spark is fun

fun

fun

输出:

(is,1)

(spark,1)

(fun,3)

以下示例显示了Apache Spark如何将Spark批处理与Spark Streaming相结合。这是一个一体化技术堆栈的强大功能。在此示例中,我们读取了一个包含品牌名称的文件,并对包含文件中任何品牌名称的流数据集进行过滤。

transform(func)

目的:通过



DStream中的所有RDD应用RDD-> RDD转换来创建新的DStream。

brandNames.txt
coke
nike
sprite
reebok
val sparkConf = new SparkConf().
setAppName(“NetworkWordCount”)
val sc = new SparkContext(sparkConf)
val ssc = new StreamingContext(sc,Seconds(10))
val lines = ssc。
socketTextStream(“localhost”9999,
StorageLevel.MEMORY_AND_DISK_SER)
val brands = sc.textFile(“/ Users /
akuntamukkala / temp / brandNames.txt”)
lines.transform(rdd => {
rdd.intersection(brands)
})print )

prompt> nc -lk 9999

msft

apple

nike

sprite

ibm

输出:

sprite

nike

updateStateByKey(func)

目的:创建一个新的DStream,通过应用给定的函数来更新每个键的值。 请参阅Spark Streaming中的StatefulNetworkCount示例。

这有助于计算一个单词发生的总次数的运行聚合

公共窗口操作

window(windowLength,slideInterval)

目的:返回从源DStream的窗口批量计算的新DStream

val win = lines.window(Seconds(30),Seconds(10)); win.foreachRDD(rdd => {
rdd.foreach(x => println(x +“”))
})

prompt> nc -lk 9999

10(第0秒)

20(10秒后)

30(20秒后)

40(30秒后)

输出:

10

10 20

20 10 30

20 30 40 (drops 10)

countByWindow(windowLength,slideInterval)

目的:返回一个新的滑动窗口中的元素数

lines.countByWindow(Seconds(30),Seconds(10)).print()

prompt> nc -lk 9999

10(第0秒)

20(10秒后)

30(20秒后)

40(30秒后)

输出:

1

2

3

3

有关其他转换运算符,请参考:http : //spark.apache.org/docs/latest/streaming-programming-guide.html#transformations

Spark Streaming具有强大的输出运算符。我们已经在上面的例子中看到foreachRDD()。其他请参考:http : //spark.apache.org/docs/latest/streaming-programming-guide.html#output-operations


公众号:it全能程序猿


9.Spark Streaming的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  3. Storm介绍及与Spark Streaming对比

    Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...

  4. flume+kafka+spark streaming整合

    1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...

  5. spark streaming kafka example

    // scalastyle:off println package org.apache.spark.examples.streaming import kafka.serializer.String ...

  6. Spark Streaming中动态Batch Size实现初探

    本期内容 : BatchDuration与 Process Time 动态Batch Size Spark Streaming中有很多算子,是否每一个算子都是预期中的类似线性规律的时间消耗呢? 例如: ...

  7. Spark Streaming源码解读之No Receivers彻底思考

    本期内容 : Direct Acess Kafka Spark Streaming接收数据现在支持的两种方式: 01. Receiver的方式来接收数据,及输入数据的控制 02. No Receive ...

  8. Spark Streaming架构设计和运行机制总结

    本期内容 : Spark Streaming中的架构设计和运行机制 Spark Streaming深度思考 Spark Streaming的本质就是在RDD基础之上加上Time ,由Time不断的运行 ...

  9. Spark Streaming中空RDD处理及流处理程序优雅的停止

    本期内容 : Spark Streaming中的空RDD处理 Spark Streaming程序的停止 由于Spark Streaming的每个BatchDuration都会不断的产生RDD,空RDD ...

  10. Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密

    本期内容 : UpdateStateByKey解密 MapWithState解密 Spark Streaming是实现State状态管理因素: 01. Spark Streaming是按照整个Bach ...

随机推荐

  1. SimpleDateFormat日期格式(浅面)

    java中使用SimpleDateFormat类的构造函数SimpleDateFormat(String str)构造格式化日期的格式, 通过format(Date date)方法将指定的日期对象格式 ...

  2. JavaScript面向对象之Windows对象

    JavaScript之Window对象 首先我们先了解一个概念:事件. 事件,就是把一段代码设置好,满足条件时触发.或者说,事件是可以被 JavaScript 侦测到的行为. 网页中每个元素都可以触发 ...

  3. Testlink研究小结

    1.Redmine与Testlink的关联 (1)redmine中的项目对应testlink的测试项目 (2)testllink执行用例时发现的问题可以记录到redmine中 2.Testlink优点 ...

  4. css透明度的设置

    Css代码 .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: ...

  5. .Net程序调试与追踪的一些方法

    前言 作为一个.net开发工程师,不管是在写桌面程序.服务程序或web程序,在开发阶段,我们必须非常熟悉vs的动态调试技能,当然web程序可能还需要调试前端的脚本或样式,这不在本文的讨论范围.本文主要 ...

  6. 从Java虚拟机的内存区域、垃圾收集器及内存分配原则谈Java的内存回收机制

    一.引言: 在Java中我们只需要轻轻地new一下,就可以为实例化一个类,并分配对应的内存空间,而后似乎我们也可以不用去管它,Java自带垃圾回收器,到了对象死亡的时候垃圾回收器就会将死亡对象的内存回 ...

  7. Charles抓包工具安装与配置

    在实际开发中,我们需要时常抓取线上的请求及数据,甚至是请求的html文档,js,css等静态文件来进行调试.在这里,我使用charles来进行以上操作.但是呢,charles需要进行一系列配置才能达到 ...

  8. Example008关闭IE窗口时,不弹出询问对话框

    <!-- 实例008关闭IE主窗口时,不弹出询问对话框 --> <meta charset="UTF-8"> <a href="#" ...

  9. Linux 内核综述

    一.什么是Linux内核: 内核->操作系统中最重要的部分,内核将在系统引导时被装载进RAM,其中包含了很多关键的例程,以操作系统.内核是OS最为关键的部分,人们常将OS(操作系统)与内核等同. ...

  10. OJ2236“孤单数”题目报告

    题目描述:有2n+1个数,其中有n对数字是成双出现的,有且仅有1个数字只有它自己一个.请你找出这个孤单数. 输入描述: 第一行有且只有一个正整数n(n<=500000) 第二行有2n+1个数ai ...