spark流处理 python_Spark Streaming流式处理

Spark Streaming介绍

Spark Streaming概述

Spark Streamingmakes it easy to build scalable fault-tolerant streaming applications.

它可以非常容易的构建一个可扩展、具有容错机制的流式应用。

对接很多的外部数据源

Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字(socket)等等

Spark Streaming特性

1、易用性

可以像编写离线批处理一样去编写流式程序,支持java/scala/python语言

2、容错性

SparkStreaming在没有额外代码和配置的情况下可以恢复丢失的工作。

3、可以融合到spark体系

流式处理与批处理和交互式查询相结合。

Spark Streaming原理介绍

1、sparkStreaming原理

Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流。

2、Spark Streaming计算流程

Dstream是sparkStreaming底层抽象,它封装了一个个批次的数据,针对于Dstream做相应操作,这个时候这些方法就作用在Dstream中RDD

3、SparkStreaming容错性

依赖RDD的血统+数据源端的安全性

4、SparkStreaming实时性

SparkStreaming实时性不是特别高,它是以某一时间批次进行处理,批次最小时间0.5s - 2s

其最小的Batch Size的选取在0.5~2秒钟之间(Storm目前最小的延迟是100ms左右),所以Spark Streaming能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时计算场景。

Dstream

Discretized Stream是Spark Streaming的基础抽象,代表持续性的数据流和经过各种Spark算子操作后的结果数据流。在内部实现上,DStream是一系列连续的RDD来表示。每个RDD含有一段时间间隔内的数据

DStream相关操作

DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的操作,如:updateStateByKey()、transform()以及各种Window相关的操作

transformation

它是一个转换,它把一个Dstream转换生成一个Dstream,它也不会触发任务真正运行

Transformation

Meaning

map(func)

对DStream中的各个元素进行func函数操作,然后返回一个新的DStream

flatMap(func)

与map方法类似,只不过各个输入项可以被输出为零个或多个输出项

filter(func)

过滤出所有函数func返回值为true的DStream元素并返回一个新的DStream

repartition(numPartitions)

增加或减少DStream中的分区数,从而改变DStream的并行度

union(otherStream)

将源DStream和输入参数为otherDStream的元素合并,并返回一个新的DStream.

count()

通过对DStream中的各个RDD中的元素进行计数,然后返回只有一个元素的RDD构成的DStream

reduce(func)

对源DStream中的各个RDD中的元素利用func进行聚合操作,然后返回只有一个元素的RDD构成的新的DStream.

countByValue()

对于元素类型为K的DStream,返回一个元素为(K,Long)键值对形式的新的DStream,Long对应的值为源DStream中各个RDD的key出现的次数

reduceByKey(func, [numTasks])

利用func函数对源DStream中的key进行聚合操作,然后返回新的(K,V)对构成的DStream

join(otherStream, [numTasks])

输入为(K,V)、(K,W)类型的DStream,返回一个新的(K,(V,W))类型的DStream

cogroup(otherStream, [numTasks])

输入为(K,V)、(K,W)类型的DStream,返回一个新的 (K, Seq[V], Seq[W]) 元组类型的DStream

transform(func)

通过RDD-to-RDD函数作用于DStream中的各个RDD,可以是任意的RDD操作,从而返回一个新的RDD

updateStateByKey(func)

根据key的之前状态值和key的新值,对key进行更新,返回一个新状态的DStream

特殊的Transformations

(1)UpdateStateByKey Operation

UpdateStateByKey用于记录历史记录,保存上次的状态

(2)Window Operations(开窗函数)

滑动窗口转换操作:

滑动窗口转换操作的计算过程如下图所示,我们可以事先设定一个滑动窗口的长度(也就是窗口的持续时间),并且设定滑动窗口的时间间隔(每隔多长时间执行一次计算),然后,就可以让窗口按照指定时间间隔在源DStream上滑动,每次窗口停放的位置上,都会有一部分DStream被框入窗口内,形成一个小段的DStream,这时,就可以启动对这个小段DStream的计算。

Output Operations

Output Operations可以将DStream的数据输出到外部的数据库或文件系统,当某个Output Operations被调用时(与RDD的Action相同),spark streaming程序才会开始真正的计算过程。

Output Operation

Meaning

print()

打印到控制台

saveAsTextFiles(prefix, [suffix])

保存流的内容为文本文件,文件名为

"prefix-TIME_IN_MS[.suffix]".

saveAsObjectFiles(prefix, [suffix])

保存流的内容为SequenceFile,文件名为

"prefix-TIME_IN_MS[.suffix]".

saveAsHadoopFiles(prefix, [suffix])

保存流的内容为hadoop文件,文件名为

"prefix-TIME_IN_MS[.suffix]".

foreachRDD(func)

对Dstream里面的每个RDD执行func

DStream操作实战

一、

SparkStreaming接受socket数据,实现单词计数WordCount

(1)安装并启动生产者

首先在linux服务器上用YUM安装nc工具,nc命令是netcat命令的简称,它是用来设置路由器。我们可以利用它向某个端口发送数据。

yum install -y nc

(2)通过netcat工具向指定的端口发送数据

nc -lk 9999

(3)编写Spark Streaming程序

导入依赖

org.apache.spark

spark-streaming_2.11

2.0.2

代码开发

importorg.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}importorg.apache.spark.{SparkConf, SparkContext}importorg.apache.spark.streaming.{Seconds, StreamingContext}//todo:需求:利用sparkStreaming接受socket数据,实现单词统计WordCount

object SparkStreamingSocket {

def main(args: Array[String]): Unit={//1、创建SparkConf

val sparkConf: SparkConf = new SparkConf().setAppName("SparkStreamingSocket").setMaster("local[2]")//2、创建SparkContext

val sc = newSparkContext(sparkConf)

sc.setLogLevel("WARN")//3、创建StreamingContext对象,需要2个参数,第一是SparkContext,第二个表示批处理时间间隔

val ssc = new StreamingContext(sc,Seconds(5))//4、通过StreamingContext对象来接受socket数据

val socketTextStream: ReceiverInputDStream[String] = ssc.socketTextStream("192.168.200.100",9999)//5、切分每一行

val wordsDstream: DStream[String] =

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值