实时批处理Spark Streaming

开源在Github
https://Github.com/apache/spark
一. 概述
低延时,可拓展,高吞吐量,可容错的,能够将批处理、机器学习、图计算等子框架和Sparking Streaming综合使用
实时数据流的流处理
分布式计算框架
将不同的数据源的数据经过Sparking Streaming处理之后将结果输出到外部文件系统。
在这里插入图片描述
在这里插入图片描述

Sparking Streaming不需要独立安装
一栈式解决!!!
二. 应用场景
电商
三. 集成Spark生态系统的使用
在这里插入图片描述

四. 发展史
在这里插入图片描述

五. 从词频统计功能入门
(1) spark-submit的使用(生产)
使用spark-submit来提交我们的是spark应用程序运行的脚本
○1开放一个控制台的查看端口: nc -lk 9988
○2另一个控制台输入:

/opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/spark/bin/spark-submit --master local[2] --class org.apache.spark.examples.streaming.NetworkWordCount --name NetworkWordCount /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.12.1-hadoop2.6.0-cdh5.12.1.jar 10.5.45.212 9988

(2) spark-shell的使用
使用spark-shell来提交(测试)
○1

/opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/spark/bin/spark-shell --master local[2] 

○2

import org.apache.spark.streaming.{Seconds,StreamingContext}
val ssc = new StreamingContext(sc, Seconds(1))
val lines = ssc.socketTextStream("10.5.45.212",9988)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
ssc.start()
ssc.awaitTermination()

六. 工作原理
(1) 粗粒度
Spark Streaming接收到实时数据流,把数据按照指定的时间段切成一片片小的数据块,然后把小的数据块传给Spark Engine处理。
在这里插入图片描述

(2) 细粒度
在这里插入图片描述

七. 核心概念
1. 核心概念
(1) StreamingContext
New 一个conf
batch interval可以根据个人的应用程序需求的延迟要求以及集群可用的资源情况来设置
一旦StreamingContext定义好之后,可以做一些事情
(2) Discretized Streams(DStreams)
一个DStreams代表一系列的不断的RDDs
在这里插入图片描述

每个在DStreams中的RDD包含一个确定间隔的数据批次。
对DStream操作算子,比如map/flatMap,其实底层会被翻译为对DStream中的每个RDD都做相同的操作,因为一个DStream是由不同批次的RDD所构成的。
(3) input DStreams and Receivers
每一个Input DStream and Recevivers(除了文件系统)都需要关联一个从源头接收并存储在spark的内存中等待处理的receivers
(4) Transformation
map() 通过一个在源DStream上使用一个函数func返
回一个新的DStream。
(5)Output operations
允许DStream的数据送到外部系统(数据库、hdfs)
Print()
SaveAsTextFiles()。
2. Spark Streaming处理Socket数据
在这里插入图片描述

3. Spark Streaming处理HDFS文件数据
八. Spark Streaming进阶
1. 带状态的算子:UpdateStateByKey
需要写检查点: StreamingContext.checkpoint()
2. 实战:计算到目前为止累计出现的单词个数写入到MYSQL中
(1)使用Spark Streaming进行统计分析
(2)Spark Streaming统计结果写入到MYSQL
创建表

create table wordcount(
word varchar(50) default null,
wordcount int(10) default null
);

通过该sql将统计结果写入到Mysql

val sql = "insert into wordcount(word,wordcount)
values('"+record._1 +"',"+record._2 +")"

存在的问题:
(1) 对于已有的数据没有做更新,而是所有的数据均为insert
改进思路:
a) 在插入数据前先判断单词是否存在,如果存在就update,不存在则insert
b) 工作中:Hbase/Redis
(2)每个 rdd的partition创建connection,改成连接池最好

3. 基于window的统计
Windows:定时的进行一个时间段内的数据处理
Window length :窗的长度
Sliding interval:窗口的间隔
这两个参数和 batch size有关系:倍数
每隔多久计算某个范围内的数据:每隔10秒计算前10分钟的wc(wordcount) ===>每隔sliding interval统计前window length的值
4. 实战:黑名单过滤
假设有一个访问日志,且有一个黑名单表,输出过滤后的日志数据
在这里插入图片描述
在这里插入图片描述

(注意:最后的“1”是字段的位置)
(1) Transform 算子的使用
(2) Spark Streaming整合RDD进行操作
5. 实战:Spark Streaming整合Spark SQL实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值