SparkStreaming学习记录

SparkStreaming

一、学习内容
  1. sparkstreaming基本工作原理的介绍
  2. 常用的流式框架进行对比
  3. sparkstreaming案例体验
  4. sparkstreaming数据结构DStream
  5. sparkstreaming整合HDFS
  6. sparkstreaming整合Kafka
  7. sparkstreaming特性
  8. sparkstreaming如何做缓存
  9. sparkstreaming如何优化
二、概念认知

如何理解流式计算:

流式计算简单来说就是来一批(小批次,kb级)或者来一条就处理一次

流式计算的程序没有终止、数据是随着时间动态变化的,没有边界。计算是快速的,实时流计算体系中一条数据也叫一个Event(Flume)

对比离线计算:

程序会终止,数据是静态的(数据有边界)、计算缓慢

三、看官网
  • 1.sparkstreaming(DStream)底层也是被翻译成RDD

  • 2.在RDD基础之上进行封装(DStream)

  • 3.可实现实时数据流处理,高吞吐量【一条一条的数据可以处理,批量的数据也可以处理】,具有容错性(数据如果处理失败了可以自动重试)

RDD默认会从血缘关系链的头开始重新计算,如果有持久化的数据,那就从持久化的数据开始计算,如果没有就从头计算。

sparkstreaming:监听网络端口(如果不能容忍数据丢失或者失败的话需要对数据进行持久化)

存储系统:同RDD(默认会从血缘关系链的头开始重新计算,如果有持久化的数据,那就从持久化的数据开始计算,如果没有就从头计算。)

  • 4.数据源多种多样(可以来自网络端口、存储系统)

  • 5.sparkstreaming使用高阶算子(独有的算子)

比如:每间隔2秒处理前3秒的单词计数(窗口)【算子】

  • 6.sparkstreaming数据持久化到分布式文件系统、关系型数据库

  • 7.实时流的技术支持实时的机器学习模型的构建

四、什么是DStream

在这里插入图片描述

Discretized Stream(离散型数据流)是Spark Streaming的基础抽象, 代表持续性的数据流和经过各种Spark算子操作后的结果数据流.

五、市面上的框架对比

SparkStreaming、storm、Flink

Storm:

能针对一条数据进行处理

对实时的数据处理速度(毫秒级别)

吞吐量低(不能处理一批批的数据)

编程范式组合式编程(没有高阶算子可以使用,只有低级的api可以使用)

Flink:

实时处理的(java、scala编程)【一条数据进行处理,提供高级算子】【具有高阶算子的是声明式】

早期版本不支持写sql,现在版本支持。

案例:SparkStreaming 单词计数

def main(args: Array[String]): Unit = {
  Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
  Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
  Logger.getLogger("org.spark-project").setLevel(Level.WARN
  )
  val conf = new SparkConf().setMaster("local[2]").setAppName("sparkstreaming")

  val sc = new SparkContext(conf)
  val ssc: StreamingContext = new StreamingContext(sc, Seconds(2))
  //主机名、端口号、持久化级别
  val input: ReceiverInputDStream[String] =
    ssc.socketTextStream("hadoop02", 9998, StorageLevel.MEMORY_ONLY)
  val flatmapDS: DStream[String] = input.flatMap(line => {
    line.split("\\s+")
  })
  val reduceByKeyDS: DStream[(String, Int)] = flatmapDS.map((_, 1)).reduceByKey(_ + _)
  reduceByKeyDS.print()
  ssc.start()//提交当前实时流的程序
  flatmapDS.map((_,1)).print()
  //添加以上这条代码程序就 报错结束了
  //因为如果实时流的程序提交了,那么在start不能对实时流里面的DStream进行任何高阶算子的操作
  ssc.awaitTermination()//等待程序的结束
  println("hello world")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值