Spark Streaming的介绍与讲解

Spark Streaming是一个基于Spark Core之上的实时计算框架

 

SparkStreaming特点

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

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

易整合到Spark体系:流式处理与批处理和交互式查询相结合。

 

SparkStreaming在架构中得位置

 

 

Spark Streaming原理

 

流程

Spark Streaming中,会有一个接收器组件Receiver(瑞c  vei),作为一个长期运行的task跑在一个Executor上。Receiver接收外部的数据流形成input DStream

DStream会被按照时间间隔划分成一批一批的RDD(准实时性/近实时性(不是100%的实时)5秒钟之内是可以接受得)

对DStream进行操作就是对RDD进行操作。

 

 

数据抽象

 

Dstream:代表持续性的输入的数据流经过各种Spark算子操作后的输出的结果数据流。

DStream本质上就是一系列时间上连续的RDD

 

对DStream的数据的进行操作也是按照RDD为单位来进行的

 

 

Spark Core  SparkSQL   Spark Streming三者底层的数据抽象

阐明以下数据抽象之间的关系。

 

rdd+Schema=DateFrame        DateFrame+as.[类型]        一系列时间上连续的RDD=DStream

 

DStream相关操作

  1. 数据接入:Receiver接收外部的数据
  2. 数据转化:Transformations(转换)

每个批次的处理不依赖于之前批次的数据

当前批次的处理需要使用之前批次的数据或者中间结果

1.UpdateStateByKey(func)

2.Window Operations 窗口操作

 

3.数据输出:Output Operations(输出)/Action

某个Output Operations被调用时,spark streaming程序才会开始真正的计算过程

计算每个批次的数据得单词的总和

def main(args: Array[String]): Unit = {

  //1 创建sparkConf
      var conf =new SparkConf().setMaster("local[*]").setAppName("SparkStremingDemo1")
  //2 创建一个sparkcontext
      var sc =new SparkContext(conf)
      sc.setLogLevel("WARN")
  //3 创建streamingcontext
      var ssc=new   StreamingContext(sc,Seconds(5))
  //4 接收数据并根据业务逻辑进行计算
        val socketDatas: ReceiverInputDStream[String] = ssc.socketTextStream("node01",9999)
        val WordCount: DStream[(String, Int)] = socketDatas.flatMap(a=>a.split(" ")).map(x=>(x,1)).reduceByKey(_+_)
        WordCount.print()
  //5 开启计算任务
      ssc.start()
  //6 等待关闭
      ssc.awaitTermination()

}

计算所有的总和

object SparkStreamingDemo2 {

  def tmpSum(currentValues:Seq[Int], historyValue:Option[Int] ):Option[Int] ={
    // currentValues当前值
    // historyValue历史值
    //hadoop 1,1,1   hive 1,1  hbase 1
    //hadoop 1,1  hive 1,1  hbase 1
    val result: Int = currentValues.sum + historyValue.getOrElse(0)
    Some(result)
  }

  def main(args: Array[String]): Unit = {
    //1 创建sparkConf
    var conf =new SparkConf().setMaster("local[*]").setAppName("SparkStremingDemo1")
    //2 创建一个sparkcontext
    var sc =new SparkContext(conf)
    sc.setLogLevel("WARN")
    //3 创建streamingcontext
    var ssc=new   StreamingContext(sc,Seconds(5))
        //设置缓存数据的位置
    ssc.checkpoint("./TmpCount")

    //4 接收数据并根据业务逻辑进行计算
    val socketDatas: ReceiverInputDStream[String] = ssc.socketTextStream("node01",9999)
    val WordOne: DStream[(String, Int)] = socketDatas.flatMap(a=>a.split(" ")).map(x=>(x,1))
    //hadoop hadoop hadoop hive hive hbase
    //hadoop 1,1,1   hive 1,1  hbase 1
    val WordAllCount: DStream[(String, Int)] = WordOne.updateStateByKey(tmpSum)
    WordAllCount.print()
    //5 开启计算任务
    ssc.start()
    //6 等待关闭
    ssc.awaitTermination()
  }
}

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值