Spark Streaming源码简介

原创 2016年08月29日 22:07:11

Spark Streaming简介

spark streaming是构建在spark core之上,提供的可扩展、高吞吐、容错的实时流处理模块,它能接受来自kafka、flume、tcp各种渠道的数据,进行用户定义的各种Map、Reduce计算,最终将数据继承到文件系统、HDFS、Hbase这样的存储平台或者将参数的数据供后端系统消费;今天我们着重介绍下Streaming模块中的类依赖关系以及自己动手写一个Dstream。
这里写图片描述

类图

这里写图片描述

spark streaming的所有类均继承自DStream,DSteam的compute方法定义了创建RDD的挂载点,子类需要实现该方法,提供创建RDD的方式;同时其也提供了一套stream的checkpoint逻辑,用户也可以根据自己的业务逻辑定义自己的DStreamCheckpointData,其包括了更新、清除、恢复等checkpoin操作;

动手写Dstream

我们提供一个基于文件的输入流,每个周期从文件中读取固定的几行生成一个RDD,这个RDD只包含一个Partition,测试方法中为对生成的RDD进行打印操作

文件流的实现

class FileInputDstream(@transient ssc: StreamingContext, file: String) extends InputDStream[String](ssc) with Logging{
  private[FileInputDstream] val batchLines = 10

  require(file != null, "file could not be null")

  var scanner: Scanner = new Scanner(new File(file))

  override def start(): Unit = {}

  override def stop(): Unit = {}

  override def compute(validTime: Time): Option[FileLineRDD]= {
    var count = 0
    val arrBuffer = ArrayBuffer[String]()
    while(scanner.hasNextLine && count < 2){
      arrBuffer += scanner.nextLine()
      count += 1
    }
    Some(new FileLineRDD(ssc.sparkContext, arrBuffer.toArray))
  }
}

RDD的实现

class FileLineRDD(sc: SparkContext, lineList: Array[String]) extends RDD[String](sc, Nil) with Logging{
  @DeveloperApi
  override def compute(split: Partition, context: TaskContext): Iterator[String] = {
    println(lineList.size)
    lineList.iterator
  }

  override protected def getPartitions: Array[Partition] = {Array(new FileLineRDDPartition("", 0, lineList.size))}
}



class FileLineRDDPartition(
                         val fileName: String,
                         val index: Int,
                         val lines: Int
                       ) extends Partition {
  /** Number of messages this partition refers to */
  def count(): Long = lines
}

测试代码

object FileStreamingTest {
  def main(args: Array[String]) {
    val sparkConf = new SparkConf
    sparkConf.setMaster("local[10]")
    sparkConf.setAppName("streaming test")
    sparkConf.set("spark.extraListeners", "com.scala.streaming.test.SimpleSparkListener")
    val jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
    val file = "F:\\code\\product\\scala\\streaming-test\\src\\resource\\streaming.txt"
    new FileInputDstream(jssc.ssc, file).foreachRDD((rdd: RDD[String]) => rdd.foreachPartition(_.foreach(println _)))
    jssc.start();
    jssc.awaitTermination()
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Spark Streaming源码解读之Driver中的ReceiverTracker详解

本篇博文的目标是: Driver的ReceiverTracker接收到数据之后,下一步对数据是如何进行管理一:ReceiverTracker的架构设计 1. Driver在Executor启动R...

Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

背景: 整个Spark Streaming是按照Batch Duractions划分Job的。但是很多时候我们需要算过去的一天甚至一周的数据,这个时候不可避免的要进行状态管理,而Spark ...

基于案例一节课贯通Spark Streaming流计算框架的运行源码

 在线动态计算分类最热门商品案例回顾与演示 基于案例贯通Spark Streaming的运行源码 使用Spark Streaming + Spark SQL来...

第5课:基于案例一节课贯通Spark Streaming流计算框架的运行源码

一:案例实战演示: package com.dt.spark.sparkstreaming import org.apache.spark.SparkConf import org.apache...

15、Spark Streaming源码解读之No Receivers彻底思考

在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Ap...

第13课:Spark Streaming源码解读之Driver容错安全性

第13课:Spark Streaming源码解读之Driver容错安全性   1、数据层面:ReceivedBlockTracker 是专门负责管理Spark Streaming运行的元数据。跟踪数据...

16.Spark Streaming源码解读之数据清理机制解析

原创文章,转载请注明:转载自 听风居士博客(http://blog.csdn.net/zhouzx2010) 本期内容: 一、Spark Streaming 数据清理总览 二、S...

第13课:Spark Streaming源码解读之Driver容错安全性

本期内容: 1.ReceivedBlockTracker容错安全性 2.DStream和JobGenerator容错安全性因为Driver指挥了整个spark程序的运行,所以driver的安全性至...

第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

1。数据接收架构设计模式 2。数据接收源码彻底研究sparkstreaming接收数据的特征: 第一个特征:不断地持续地接收数据; 第二个特征:一般receiver和driver不再同一个进程中...

10.Spark Streaming源码分析:Receiver数据接收全过程详解

原创文章,转载请注明:转载自 听风居士博客(http://blog.csdn.net/zhouzx2010)   在上一篇中介绍了Receiver的整体架构和设计原理,本篇内容主要介绍Receiver...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)