Spark Streaming(二十四)初识SparkStreaming

定义

SparkStreamingSpark核心API的扩展,类似与Apache Storm,但是它不是真正的是实时的,它是准实时的,也就是单位时间内做小批量的处理,它是可伸缩的、高可用的、容错的、用来处理流式数据的。它能够从Kafka、Flume、Kinesis、TCP socket中加载数据,加载进来的数据可以用map、reduce、join、window等抽象函数进行处理,最后处理的结果数据可以Push到外部的文件系统、数据库或者是实时的进行前端的展示。
在这里插入图片描述

架构模型

它的内部工作原理如下图所示,SparkStreaming接受到数据流以后,然后输入数据会被分成批处理,最终交给Spark引擎去处理,最终批量生成最终结果流。
在这里插入图片描述

SparkStreaming使用的是"微批次"的结构,把流式计算分成一系列连续的小批次交由Spark引擎处理。SparkStreaming按照时间来划分批次,在单位时间内的数据会被划分在一个批次内,每个输入的批次都会形成一个RDDSpark引擎其实就是处理这些RDD的。批次的间隔时间是由参数指定的。高层次的架构图如图所示。
在这里插入图片描述

SparkStreaming提供了一种离散流的或者DStream的高级抽象,这种抽象代表了连续的数据流。DStream可以从Kafka、Flume、Kinesis等数据源来创建。DStream内部其实就是一系列的RDD。一个RDD中的数据就是一个批次的数据
在这里插入图片描述

SparkStreaming会为每个输入源启动对应的接收器,接收器以任务的形式运行在应用的Executor中,它接受输入数据并保存为RDD,并且以副本的形式再次保存在另一个Executor中来保障容错。
在这里插入图片描述

SparkStreaming第一个程序

Window上的idea上编写的程序,需要下载netcat工具 https://eternallybored.org/misc/netcat/,下载以后解压到任何地方,并配置它的环境变量。然后在doc窗口运行net.exe -l -p 9999命令。

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

    //初始化SparkConf
    val conf = new SparkConf().setMaster("local[2]").setAppName("Streamingtest")
    //初始化StreamingContext,并设置2秒一次批处理
    val streaming = new StreamingContext(conf, Seconds(2))

    //监控本机9999端口
    val inputStream: ReceiverInputDStream[String] = streaming.socketTextStream("localhost", 9999)
    //打印接受到输入数据
    inputStream.print()

    //开始执行
    streaming.start()
    //等待执行终止
    streaming.awaitTermination()
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值