大家好,又见面了,我是你们的朋友全栈君。
1.离线和流处理的区别
1)离线处理是针对一个批次,这个批次一般情况下都比较大流处理对应的数据是连续不断产生,处理时间间隔非常短的数据
2)离线处理程序,因为数据是有限的(bounded),所以会终止流数据因为是连续不断的产生,所以数据是无限的(unbounded)
由于数据的特征,一般离线处理比较缓慢,流数据处理相对较快
流处理:
实时流处理:(Storm 、Flink)
每一条记录,都会提交一次计算作业。
每一条记录,一般都被称为一个事件
准实时流处理:(Spark Streaming)
介于批处理和实时流处理之间,是一个较小的时间间隔的数据处理
其底层原理还是基于SparkCore来处理
2.Spark Streaming的简介
1.Spark Streaming提供了一种高级的抽象,DStream
“离散流”,它代表了一持续不断的数据流,DStream可以通过输入数源来创建,比如kafka、Flume等 1). DStream的内部,其实是一系列持续不断产生的RDD。 DStream中的每个RDD都包括了一个时间段内的数据。
2.Spark Streaming由Spark Core的计算引擎来实现的
3)步骤 1、接受实时输入数据流,然后将数据拆分成多个batch(比如每收集1秒的数据封装为一个batch) 2、将每个batch交给Spark的计算引擎进行处理,最后生产出一个结果数据流(其中的数据,也是由一个一个的batch所组成)
1.离散流(DStream) : 这是 Spark Streaming 对内部持续的实时数据流的抽象描述,即我们处理的一个实时数据流,在 Spark Streaming 中对应于一个 DStream 实例。 2.批数据(batch data): 这是化整为零的第一步,将实时流数据以时间片为单位进行分批,将流处理转化为时间片数据的批处理。 3.时间片或批处理时间间隔(batch interval) 这是人为地对流数据进行定量的标准,以时间片作为我们拆分流数据的依据。一个时间片的数据对应一个 RDD 实例。 4.窗口长度(window length) 一个窗口覆盖的流数据的时间长度。必须是批处理时间间隔的倍数 5.滑动时间间隔 前一个窗口到后一个窗口所经过的时间长度。必须是批处理时间间隔的倍数 6.Input DStream 一个InputDStream是一个特殊的DStream,将Spark Streaming连接到一个外部数据源来读取数据
1.DStream相关操作 DStream上的原语与RDD类似,分为Transformations(转换)和Output Operations(输出和RDD的action操作类似)两种。
2.StreamingContext 在Spark Streaming当中,StreamingContext是整个程序的入口
object StreamingContextTest {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("SCTest").setMaster("local[4]")
val streamingContext = new StreamingContext(sparkConf, Seconds(2))
}
}
当创建完成StreamingContext之后,再按下列步骤进行:
1、通过输入源创建 InputDStream
2、对 DStream 进行 transformation 和 output 操作,这样操作构成了后期流式计算的逻辑
3、 通过 streamingContext.start()方法启动接收和处理数据的流程
4、使用 streamingContext.awaitTermination()方法等待程序结束(手动停止或出错停止)
5、也可以调用 streamingContext.stop()方法结束程序的
3.InputDStreams 和Receivers
InputDStream 指的是从数据流的源头接受的输入数据流,在将来习的 StreamingWordCount程序当中,val lines =ssc.textFileStream(args(0)) 就是一种 InputDStream。除文件流外每个InputDStream 都关联一个 Receiver 对象,该 Receiver 对象接收数据源传来的数据并将其保存在内存中以便后期 Spark 处理。 Spark Streaming提供两种原生支持的数据源和自定义的数据源:
1、Basic Sources(基础数据源) 直接通过 StreamingContext API 创建,例如文件系统(本地文件系统及分布式文件系统)、Socket 连接及 Akka 的 Actor。 2、Advanced Sources(高级流数据源) 如 Kafka, Flume, Kinesis, Twitter 等,需要借助外部工具类,在运行时需要外部依赖(下一节内容中介绍) 3、Custom Sources(自定义流数据源) Spark Streaming 还支持用户,它需要用户定义 receiver
注意:
1、在本地运行 Spark Streaming 时,master URL 能使用”local”或”local[1] ”,因为当 Input DStream 与 Receiver(如sockets, Kafka, Flume 等)关联时,Receiver 自身就需要一个线程来运行, 2、在集群上运行 Spark Streaming 时,分配给 Spark Streaming 程的 CPU 核数也必须大于receiver 的数量,否则系统将只接受数据,无法处理数据。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151237.html原文链接:https://javaforall.cn