一、SparkStreaming概述

  

  SparkStreaming是一种构建在Spark基础上的实时计算框架,它扩展了Spark处理大规模流式数据的能力,以吞吐量高和容错能力强著称。

  

  SparkStreaming会将源数据以batch为单位来进行处理,每一批数据封装为一个DStream。即SparkStreaming处理的就是一个一个的DStream,而DStream底层就是RDD。

二、架构及原理

  

  SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对接多种数据源(如Kafka、Flume、Twitter、ZeroMQ、TCP套接字等)进行类似的Map、Reduce和Join等复杂操作,并将结果保存到外部系统、数据库或应用到实时仪表盘。

  SparkStreaming是将流式计算分解成一系列短小的批处理作业,也就是SparkStreaming的输入数据按照batch size(如1秒)分成一段一段的数据DStream(Discretized-离散化Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将SparkStreaming中对DStream的Transformation操作变为针对Spark的RDD的Transformations操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务需求可以对中间的结果进行叠加或存储到外部设备。

  对DStream的处理,每个DStream都要按照数据流到达的先后顺序依次进行处理。即SparkStreaming天然确保了数据处理的顺序性。这样使所有的批处理具有了一个顺序的特性,其本质是转换成RDD的血缘关系。所以,SparkStreaming对数据天然具有容错性保证。

  为了提高SparkStreaming的工作效率,应合理配置批的时间间隔,最好能够实现上一个批处理完某个算子,下一个批算子刚好到来

三、SparkStreaming入门案例

  以下案例代码:https://github.com/Simple-Coder/sparkstreaming-demo

1、案例一

  监控指定文件夹处理其中产生的新的文件

1.1 案例代码

  

1.2 提交jar包

  

1.3 新增文件测试

  

2、案例二

  实现:SparkStreaming对历史数据的累加处理

  经过测试,案例一的代码确实可以监控指定的文件夹,处理其中产生的新的文件,但是数据在每个周期到来后,都会重新进行计算,而如果需要对历史数据进行累计处理,这时就用到了Spark的CheckPoint机制,首先需要设置一个检查点目录,在这个目录,存储了历史周期数据。通过在临时文件夹中存储中间数据,为历史数据累计处理提供了可能性。

2.1 案例代码

2.2 测试结果

3、案例三

  案例二的数据不停的累计下去,有些时候业务需求却是:每隔一段时间重新统计下一段时间的数据,并且能够对设置的批时间进行更细粒度的控制,这样的功能可以通过滑动窗口的方式来实现

  Spark的滑动窗口机制:每隔一段时间(滑动区间)计算下一个段时间(窗口长度)的数据

  

:窗口长度和滑动区间必须是batch size的整数倍

3.1 案例代码

SparkStreaming个人记录的更多相关文章

  1. SparkStreaming updateStateByKey 保存记录信息

    )(_+_) ) 查看是否存在,如果存在直接获取 )) ssc.checkpoint() )) //使用updateStateByKey 来更新状态 val stateDstream = wordDs ...

  2. 记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题

    业务背景: 需要通过redis判断当前用户是否是新用户.当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦. 出现问题: 发现入库时,并没有新用户入库,但我看了数据了,确实应该是 ...

  3. SparkStreaming 源码分析

    SparkStreaming 分析 (基于1.5版本源码) SparkStreaming 介绍 SparkStreaming是一个流式批处理框架,它的核心执行引擎是Spark,适合处理实时数据与历史数 ...

  4. 【译】Yarn上常驻Spark-Streaming程序调优

    作者从容错.性能等方面优化了长时间运行在yarn上的spark-Streaming作业 对于长时间运行的Spark Streaming作业,一旦提交到YARN群集便需要永久运行,直到有意停止.任何中断 ...

  5. SparkStreaming

    Spark Streaming用于流式数据的处理.Spark Streaming支持的数据输入源很多,例如:Kafka.Flume.Twitter.ZeroMQ和简单的TCP套接字等等.数据输入后可以 ...

  6. 【SparkStreaming学习之四】 SparkStreaming+kafka管理消费offset

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  7. sparkStreaming消费kafka-1.0.1方式:direct方式(存储offset到zookeeper)-- 2

    参考上篇博文:https://www.cnblogs.com/niutao/p/10547718.html 同样的逻辑,不同的封装 package offsetInZookeeper /** * Cr ...

  8. sparkStreaming消费kafka-1.0.1方式:direct方式(存储offset到zookeeper)

    版本声明: kafka:1.0.1 spark:2.1.0 注意:在使用过程中可能会出现servlet版本不兼容的问题,因此在导入maven的pom文件的时候,需要做适当的排除操作 <?xml ...

  9. sparkStreaming消费kafka-0.8方式:direct方式(存储offset到zookeeper)

    生产中,为了保证kafka的offset的安全性,并且防止丢失数据现象,会手动维护偏移量(offset) 版本:kafka:0.8 其中需要注意的点: 1:获取zookeeper记录的分区偏移量 2: ...

随机推荐

  1. sqli-labs less-9 --> less-10

    时间盲注: 利用时间函数,观察不同条件的等待时长:利用sleep(),benchmark()等函数,让MySQL的执行时间变长 时间盲注多于if这样的函数结合(if(expr1,expr2,expr3 ...

  2. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  3. mysql 时间,时间戳,字符串之间相互转换

    时间转字符串 date_format(now(),'%Y-%m-%d') 时间转时间戳 unix_timestamp(now()) 字符串转时间 str_to_date('2020-01-19','% ...

  4. unity一些操作汇总

    设置父物体高度自适应子物体:父物体添加ContentSizeFitter,设置Horizeontal Fit和Vertical Fit为Preferred Size. ScrollView设置Cone ...

  5. nodepad++ | 变成 _

    点击右下角切换

  6. 2018ICPC南京站Problem J. Prime Game

    题意: 对于所有数字分解质因子,如果某个质因子在这个区间出现,则贡献为1,求所有质因子对所有区间做的贡献. 解析: 考虑如果所有全部区间都有这个质因子则这个质因子的贡献是n*(n+1)/2,对于任意因 ...

  7. centos7在命令界面使用命令可以执行,但在jenkins中输入命令报Chrome has crashed.

    问题:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: ex ...

  8. Loj514「LibreOJ β Round #2」模拟只会猜题意 - 模拟

    注意初始化即可. #include <bits/stdc++.h> using namespace std; ],a[],t1,t2,t3,t4; int main(){ memset(a ...

  9. oracle sql 数据库之间导入数据

    1.导入别的表 insert into EMPI_IDENTIFY select id,empiid, name||':' ||idcardno,'accidcardno','' from empi_ ...

  10. bootstrap-datatimepicker插件的使用

    1.引入相关的css.js文件(因为是bootstrap的,首先应该引入bootstrap.css和bootstrap.js): <link rel="stylesheet" ...