Spark Streaming

Spark Streaming 是Spark为了用户实现流式计算的模型。

数据源包括Kafka,Flume,HDFS等。

DStream 离散化流(discretized stream), Spark Streaming 使用DStream作为抽象表示。是随时间推移而收到的数据的序列。DStream内部的数据都是RDD形式存储, DStream是由这些RDD所组成的离散序列。

编写Streaming步骤:

1.创建StreamingContext

// Create a local StreamingContext with two working thread and batch interval of 5 second.
// The master requires 2 cores to prevent from a starvation scenario.
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(5))

创建本地化StreamingContext, 需要至少2个工作线程。一个是receiver,一个是计算节点。

2.定义输入源,创建输入DStream

// Create a DStream that will connect to hostname:port, like localhost:9999
val lines = ssc.socketTextStream("node1", 9999)

3.定义流的计算过程,使用transformation和output operation DStream

// Split each line into words
val words = lines.flatMap(_.split(" ")) // Count each word in each batch
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _) // Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.print()

4.开始接收数据及处理数据,使用streamingContext.start()

ssc.start()             // Start the computation

5.等待批处理被终止,使用streamingContext.awaitTermination()

ssc.awaitTermination()  // Wait for the computation to terminate

6.可以手工停止批处理,使用streamingContext.stop()

数据源

数据源分为两种

1.基本源

text,HDFS等

2.高级源

Flume,Kafka等

DStream支持两种操作

一、转化操作(transformation)

无状态转化(stateless):每个批次的处理不依赖于之前批次的数据

有状态转化(stateful):跨时间区间跟踪数据的操作;一些先前批次的数据被用来在新的批次中参与运算。

  • 滑动窗口:
  • 追踪状态变化:updateStateByKey()

transform函数

transform操作允许任意RDD-to-RDD函数被应用在一个DStream中.比如在DStream中的RDD可以和DStream外部的RDD进行Join操作。通常用来过滤垃圾邮件等操作。

不属于DStream的RDD,在每个批间隔都被调用;允许你做随时间变化的RDD操作。RDD操作,partitions的数量,广播变量的值,可以变化在不同的批次中。

例子:

import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext} /**
* Created by Edward on 2016/9/16.
*/
object TransformOperation { def main(args: Array[String]) {
val conf: SparkConf = new SparkConf().setMaster("local[2]").setAppName("TransformOperation")
val ssc = new StreamingContext(conf, Seconds(5))
val textStream: ReceiverInputDStream[String] = ssc.socketTextStream("node1",9999) //黑名单过滤功能,可以将数据存到redis或者数据库,每批次间隔都会重新取数据并参与运算,保证数据可以动态加载进来。
val blackList=Array(Tuple2("Tom", true))
val listRDD = ssc.sparkContext.parallelize(blackList).persist() //创建RDD val map = textStream.map(x=>(x.split(" ")(1),x)) //通过transform将DStream中的RDD进行过滤操作
val dStream = map.transform(rdd =>{
//listRDD.collect()
//println(listRDD.collect.length) //通过RDD的左链接及过滤函数,对数据进行处理,生成新的RDD
rdd.leftOuterJoin(listRDD).filter(x =>{ //使用transform操作DStream中的rdd rdd左链接listRDD, 并进行过滤操作
if(!x._2._2.isEmpty && x._2._2.get)// if(x._2._2.getOrElse(false)) //如果没取到值则结果为false
false
else{
true
}
})
}) dStream.print() ssc.start()
ssc.awaitTermination() }
}

窗口函数

二、输出操作(output operation)

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. SQL Server DBA日常运维语句

    1.检查数据库完整性 dbcc checkdb(Portal) 检查数据库完整性checkdb Portal的 DBCC 结果. Service Broker 消息 9675,状态 1: 已分析的消息 ...

  2. 报错:Unable to load configuration. - action - file:/E:/apache-tomcat-8.0.37/webapps/20161102-struts2-3/WEB-INF/classes/struts.xml:11:73

    第一种报错: 严重: Exception starting filter struts2Unable to load configuration. - action - file:/E:/apache ...

  3. codeforces 659 G. Fence Divercity 组合数学 dp

    http://codeforces.com/problemset/problem/659/G 思路: f(i,0/1,0/1) 表示到了第i个,要被切的块开始了没有,结束了没有的状态的方案数 递推看代 ...

  4. [Tex学习笔记]一个数学公式

    \begin{equation*} \begin{aligned} &\quad\int |\nabla(T_1-\overline{T})^+|^2 \rm dx-\int \frac{3m ...

  5. (转)AVI文件格式解析+AVI文件解析工具

    AVI文件解析工具下载地址:http://download.csdn.net/detail/zjq634359531/7556659 AVI(Audio Video Interleaved的缩写)是一 ...

  6. 转:Oracle表分区

    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1. create table graderecord 2. ...

  7. JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)

    链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...

  8. 洛谷P3367 【模板】并查集

    P3367 [模板]并查集 293通过 551提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 不知道哪错了 为啥通不过最后三个节点 题解 不懂为什么MLE 最后一个数 ...

  9. oracle空表导出的问题

    之前再做项目的时候下载了一个开源的程序,数据库在移植的时候通过exp/imp导入导出,结果程序在启动时报错,对比过后发现两个数据库表相差了十几个,再排查问题,发现少掉的十几个表全部是空表,查了一下or ...

  10. UBUNTU 13.04 install Grive

    sudo apt-get install software-properties-common sudo apt-get install python-software-properties sudo ...