Spark Streaming笔记(一)

spark streaming 通过maven管理依赖:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.0.2</version>
</dependency>

数据源可能来自以下组件,其Artifact对应关系如下:

SourceArtifact
Kafkaspark-streaming-kafka-0-8_2.11
Flumespark-streaming-flume_2.11
Kinesisspark-streaming-kinesis-asl_2.11 [Amazon Software License]

创建SparkStreaming程序的一个基本流程

​ 流程看起来是固定的,如下所示:

1.创建SparkConf配置文件,appName参数是应用展示在UI上的标志,master是Spark、Mesos或者YARN集群的URL,本地测试时,可以设置为local[] 表示要创建工作线程的数量。在这里创建的上下文对象,可以通过ssc.sparkContext访问到。

SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);

2.创建StreamingContext上下文对象,Duration是流采集的间隔时长。

JavaStreamingContext ssc = new JavaStreamingContext(conf, new Duration(1000));

我们所需的JavaStreamContent对象,也可以通过SparkContent对象创建得到。

import org.apache.spark.streaming.api.java.*;

JavaSparkContext sc = ...   //existing JavaSparkContext
JavaStreamingContext ssc = new JavaStreamingContext(sc, Durations.seconds(1));

3.通过定义DStream来确定数据源。

4.通过使用transformation来定义流计算操作,计算结果生成新的DStream对象。

5.调用streamingContext对象的start方法开始接收处理数据。

6.调用streamingContext的awaitTermination方法,等待处理结束。或者手动调用stop结束数据的处理,但可以出现异常。

DStream

​ DStream是Spark提供的基本抽象,代表了连续不断的流数据,可以输从输入源采集,也可以是通过transformation变化得到。通常一个DStream是由一系列的RDD组成,RDD是Spark中内容不可变分布数据集。不同的时间采集到的数据装入不同的RDD,组成一个DStream。对DStream进行transformation状态转换操作时,也是对不同的RDD分别进行变化操作。

​ DStream进行状态转换操作,分为无状态转换和有状态转换。无状态转换,每个批次数据的处理不依赖之前其他批次;而又状态转换,则需要使用之前批次的数据或中间结果。有状态转换分为滑动窗口转换和状态追踪转换(UpdateStateByKey)。

Input DStreams and Receivers

​ Input DStream代表了从数据流源接收到的输入数据。数据源分为两类,一类是基本数据源和高级数据源。基本的数据源的使用方法已经内置在StreamingContext API中,如文件系统以及Socket连接;高级数据源如Kafka、Flume、Kinesis等等,需要添加管理额外的依赖。

​ 如果我们想接收、并行处理多个数据流,就需要创建多个DStream对象,这将创建多个receiver,并发接收多个数据流。

基本输入源

FileStream

Spark Streaming自动将待处理的文件复制到新的目录,目录中可以有多个文件,但文件格式需要保持一致。文件一旦复制过,源文件再做修改,Spark对修改不生效。

Receiver Reliability

按照可靠性区分,Spark有两种类型的receiver,可靠的接收器和不可靠接收器。可靠接收器通过ack(确认)机制来避免数据丢失导致的故障。

Spark Streaming工作原理

在Spark中,一个应用Application由一个任务控制节点Driver和多个若干作业(Job)组成,一个作业又由多个阶段Stage组成,一个阶段由多个Task组成。

### 回答1: Kafka和Spark Streaming大数据领域非常重要的技术,它们可以协同工作,实现实时数据处理和分析。Kafka是一个分布式的消息队列系统,可以高效地处理海量数据流,而Spark Streaming则是一个基于Spark的流处理框架,可以实现实时数据处理和分析。在学习Kafka和Spark Streaming时,需要掌握它们的基本概念、原理和使用方法,以及如何将它们结合起来实现实时数据处理和分析。同时,还需要了解Kafka和Spark Streaming的优缺点,以及如何优化它们的性能和可靠性。 ### 回答2: Kafka是一个高性能,可扩展的分布式消息系统。它通过将消息划分成一个或多个主题,然后将这些主题划分成一个或多个分区来进行实现。Kafka是由LinkedIn开发的,由Apache基金会进行管理。它的主要设计目标是支持分布式处理,如流处理和批处理等。Kafka通过使用Zookeeper来进行节点管理和故障转移,能够快速处理海量的数据。Kafka采用发布/订阅模式,支持多个消费者订阅同一个主题,每个消费者可以读取主题的所有分区数据,也可以选择读取其的某个分区。 Spark Streaming是一个流处理框架,它能够利用Spark的分布式处理能力来对实时数据进行处理。Spark Streaming采用微批处理的方式,将实时数据流切片成一段一段的,并通过并行处理的方式进行计算Spark Streaming的数据源可以是Kafka、Flume或者TCP sockets等。与Kafka相比,Spark Streaming更适合于需要进行实时计算的场景,例如:实时日志分析、实时推荐、实时风控等。同时,Spark Streaming还能够与Spark的批处理进行无缝对接,实现流处理与批处理的统一计算引擎。Spark Streaming支持机器学习、图计算等高级计算库,能够为用户提供更强大的计算能力。 学习Kafka和Spark Streaming的过程,需要掌握Java、Scala等编程语言基础知识,并具备分布式系统的相关知识。对于Kafka,需要了解其基本概念、架构、API等,理解消息系统、发布/订阅模式、分区等内容。对于Spark Streaming,需要掌握其基本概念、流式计算流程、数据源等,同时也要熟悉Spark的RDD、DataFrame等相关知识。在学习,需要结合实际项目,进行代码实践和调试,同时不断学习、思考和总结,以加深对Kafka和Spark Streaming的理解和应用。 ### 回答3: Kafka是由Apache SoftWare Foundation开发的一种分布式发布/订阅消息系统。其主要目的是为数据传输提供一种高吞吐量、低延迟的解决方案。Kafka提供了一种可靠的、持久化的、实时的数据传输方式,适用于众多的场景,如:日志收集、数据传输、消息系统等。 Kafka的特点: 1、高吞吐量:Kafka可以支持非常高的数据传输吞吐量,同时保持低延迟和高稳定性。 2、可扩展性:Kafka可以轻松扩展以适应更大的数据需求,并可以在运行时添加新的主题分区。 3、持久化:Kafka保证数据能够可靠地在分布式集群传输,同时保证数据不会丢失或者被意外删除。 4、多样化的客户端:Kafka提供了多种语言的客户端接口,以满足不同的开发需求。 SparkStreaming 是由Apache Spark社区发展的一个实时数据处理框架。它用于将实时数据流分成小批处理,可以跨越不同的时间窗口进行计算Spark Streaming提供了与Spark非常相似的编程模型,同时支持不同的输入源,包括社交媒体、传感器、消息队列等。 SparkStreaming的特点: 1、处理速度快:它可以支持毫秒级别的处理速度,并且可以在分布式系统实现高吞吐量。 2、支持多种数据源:Spark Streaming可以从多种类型的数据源读取数据,如HDFS、Flume、Kafka等。 3、编程简单:Spark Streaming提供了与Spark相似的编程模式,使得开发人员可以将Spark StreamingSpark整合在一起进行处理。 4、高容错性:Spark Streaming在分布式环境实现了高可靠性和容错性,使得它可以支持大规模的实时数据处理需求。 总之,Kafka和Spark Streaming这两个工具是在大数据处理领域非常重要的工具。它们可以很好地相互结合,支持大规模的实时数据处理和分析,进而为企业提供更好更快的数据处理方案。如果你对这两个技术感兴趣,可以从官方文档和教程开始学习,逐步掌握它们的定义、特点、应用场景和基本使用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值