Spark Streaming实时计算
spark批处理模式:
receiver模式:接收数据流,负责数据的存储维护,缺点:数据维护复杂(可靠性,数据积压等),占用计算资源(core,memory被挤占)
direct模式:数据源由三方组件完成,spark只负责数据拉取计算,充分利用资源计算

window计算:
  def windowApi(): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("sparkstream").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val ssc = new StreamingContext(sc, Duration(1000))
    ssc.sparkContext.setLogLevel("ERROR")
    val resource: ReceiverInputDStream[String] = ssc.socketTextStream("localhost",8889)
    val format: DStream[(String, Int)] = resource.map(_.split(" ")).map(x=>(x(0),1))
    //统计每次看到的10s的历史记录
    //windowDuration窗口一次最多批次量,slideDuration滑动间隔(job启动间隔),最好等于winduration
    val res: DStream[(String, Int)] = format.reduceByKeyAndWindow(_+_,Duration(10000),Duration(1000))//每一秒计算最后10s内的数据
    res.print()
    ssc.start()
    ssc.awaitTermination()
  }  
window处理流程:

执行流程:

说明:Receiver模式下,接收器创建数据块,每间隔blockInterval 时间产生新的数据块,块的个数N = batchInterval/blockInterval。这些数据块由当前executor的BlockManager发送到其它executor的BlockManager,driver追踪块的位置为下一步计算准备
1,JobScheduler通过EventLoop消息处理机制处理job事件(jobStart,jobCompletion,jobError对job进行标记)使用ThreadPoolExecutor为每个job维护一个thread执行job.run
2,JobGenerator负责job生成,执行checkpoint,清理DStream产生的元数据,触发receiverTracker为下一批次数据建立block块的标记
stream合并与转换:
  每个DStream对应一种处理,对于数据源有多种特征需要多个DStream分别处理,最后将结果在一起处理,val joinedStream = windowedStream1.join(windowedStream2)
    val conf: SparkConf = new SparkConf().setAppName("sparkstream").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val ssc = new StreamingContext(sc, Duration(1000))
    ssc.sparkContext.setLogLevel("ERROR")
    val resource: ReceiverInputDStream[String] = ssc.socketTextStream("localhost",8889)
    val format: DStream[(String, Int)] = resource.map(_.split(" ")).map(x=>(x(0),1))
    //transform  加工转换处理
        val res: DStream[(String, Int)] = format.transform( //返回值是RDD
          (rdd )  =>{
            val rddres: RDD[(String, Int)] = rdd.map(x => (x._1, x._2 * 10))//做转换
            rddres
          }
        )
    //末端处理
    format.foreachRDD(    //StreamingContext  有一个独立的线程执行while(true)下面的代码是放到执行线程去执行
      (rdd)=>{
        rdd.foreachPartition { partitionOfRecords =>
//          val connection = createNewConnection()
//          to redis or mysql
//          partitionOfRecords.foreach(record => connection.send(record))
//          connection.close()
        }
      }
    )
Caching / Persistence
	在使用window统计时(reduceByWindow ,reduceByKeyAndWindow,updateStateByKey)Dstream会自动调用persist将结果缓存到内存(data serialized)
	
Checkpointing      保存两种类型数据存储
	  Metadata:driver端需要的数据
		    Configuration: application配置信息conf
		    DStream operations: 定义的Dstream操作集合
		    Incomplete batches:在队列内还没计算完成的bactch数据
		
	  Data checkpointing:已经计算完成的状态数据
设置checkpoint
val ssc = new StreamingContext(...)
ssc.checkpoint(checkpointDirectory)
dstream.checkpoint(checkpointInterval).
...... // Get StreamingContext from checkpoint data or create a new one
val context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext _)
context.
checkpoint依赖外存储,随着batch处理间隔的变短,会使吞吐量显著降低,因此存储间隔要合理设置,系统默认最少10s调用一次,官方建议5s-10s
Spark Streaming实时计算的更多相关文章
- Spark Streaming实时计算框架介绍
		随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐.用户行为分析等. Spark Streaming是建立在 ... 
- 【Streaming】30分钟概览Spark Streaming 实时计算
		本文主要介绍四个问题: 什么是Spark Streaming实时计算? Spark实时计算原理流程是什么? Spark 2.X下一代实时计算框架Structured Streaming Spark S ... 
- Spark练习之通过Spark Streaming实时计算wordcount程序
		Spark练习之通过Spark Streaming实时计算wordcount程序 Java版本 Scala版本 pom.xml Java版本 import org.apache.spark.Spark ... 
- 【转】Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化
		系统架构介绍 整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streami ... 
- spark streaming 实时计算
		spark streaming 开发实例 本文将分以下几部分 spark 开发环境配置 如何创建spark项目 编写streaming代码示例 如何调试 环境配置: spark 原生语言是scala, ... 
- 大数据开发实战:Spark Streaming流计算开发
		1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ... 
- 50、Spark Streaming实时wordcount程序开发
		一.java版本 package cn.spark.study.streaming; import java.util.Arrays; import org.apache.spark.SparkCon ... 
- Dream_Spark-----Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码
		Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码 本讲内容: a. 在线动态计算分类最热门商品案例回顾与演示 b. 基于案例贯通Spark Streaming的运 ... 
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记八之铭文升级版
		铭文一级: Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, ... 
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记二之铭文升级版
		铭文一级: 第二章:初识实时流处理 需求:统计主站每个(指定)课程访问的客户端.地域信息分布 地域:ip转换 Spark SQL项目实战 客户端:useragent获取 Hadoop基础课程 ==&g ... 
随机推荐
- Django框架版本区别
			目录 一:django版本区别 1.django1.X路由层使用的是url方法 2.虽然path不支持正则 但是它的内部支持五种转换器 3.五种转换器 4.除了有默认的五个转换器之外 还支持自定义转换 ... 
- 如何使用Abstract类?抽象类的威力
			简介: 今天我想谈谈如何使用抽象类,以及抽象类真正的威力.本文将结合具体业务来说明如何使用抽象类. 业务简述: 本人目前只接触过PMS(物业管理系统),公司主要业务的是美国的租房业务.由于美国租房和中 ... 
- python-docx操作word文档详解
			案例 官网地址: https://python-docx.readthedocs.io/en/latest/ pip install python-docx from docx import Docu ... 
- selenium 之可视模式、静默模式、忽略证书不可用的设置
			1.可视模式的设置(在前台工作) from selenium import webdriver import time url = "https://y.qq.com/n/ryqq/song ... 
- VmWare安装Centos后配置Net网络SSH链接问题看这一遍就够了
			1:首先安装VmWare 2:启动时在安装对应的Linux版本,网络就默认 net即可 3:都安装好了之后,注意有一个大坑,输入的账号密码都不能准确登录 最后发现是linux默认的输入法没有启用电脑键 ... 
- c++随笔测试(Corner of cpp)
			在c++17下,程序的输出是什么?(有可能编译出错,有可能输出未知,有可能是未定义行为) 点击查看代码 #include<iostream> void foo(unsigned int) ... 
- PRIx64:uint64_t类型输出为十六进制格式
			#include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(void) { uint ... 
- 什么是RPC? (全面了解)
			一:RPC 1.什么是RPC? RPC 是指远程过程调用,也就是说两台服务器,A 和 B,一个应用部署在A 服务器上,想要调用B 服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要 ... 
- iOS根据两点经纬度坐标计算指南针方位角
			目录 需求 设计 代码实现 新建CLLocation 分类方法 调用示例 结论 需求 在地图导航时,始终保持当前路段竖直超前. 设计 因地图暴露的方法中只有设置地图相对于正北的方向角的方法.因此,需要 ... 
- DVWA靶场实战(十一)——XSS(Reflected)
			DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ... 
