目录
Spark Streaming概述
目前对于流式数据实时处理方案主要有两种:
一条一条数据的处理,它的实时性很高,亚秒级别,延迟性非常的低,比如:Storm、JStorm
一批次一批次数据的处理,按时间间隔进行划分,时间间隔比较短,运行延迟性在毫秒到秒级别,比如SparkStreaming
一、Apache Spark
集批处理、交互式处理和流式处理,一栈式大数据解决方案
Spark Core
Spark Core主要是作为离线批处理(Batch Processing),每次处理的数据都是一个固定的数据集,而不是变化的
相关概念
RDD:弹性分布式数据集
Spark Context:Spark的上下文,它负责与程序和spark集群进行交互,包括申请集群资源、创建RDD、accumulators及广播变量等。
Spark SQL
Spark SQL用于交互式处理(interactive Processing),同样的,每次处理的数据都是一个固定的数据集,而不是变化的
相关概念
DataFrame=RDD+Schema
DataSet:相当于一个Row类型的DataFrame,在Spark 2.x之后推荐使用DataSet
SQLContext:SQL的上下文
Spark Streaming
Spark Streaming是一个流式数据处理(Stream Processing)的框架,要处理的数据就像流水一样源源不断的产生,就需要实时处理。在Spark Streaming中,对于Spark Core进行了API的封装和扩展,将流式的数据切分为小批次(batch,称之为微批,按照时间间隔切分)进行处理,可以用于进行大规模、高吞吐量、容错的实时数据流的处理。
支持从很多种数据源中读取数据,使用算子来进行数据处理,处理后的数据可以被保存到文件系统、数据库等存储中
相关概念
DStream:离散流,相当于是一个数据的集合
StreamingContext:在创建StreamingContext的时候,会自动的创建SparkContext对象
对于电商来说,每时每刻都会产生数据(如订单,网页的浏览数据等),这些数据就需要实时的数据处理
将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果并展示
二、Spark Streaming处理数据的流程
1.数据源
大多情况从Kafka中获取数据,还可以从Flume中直接获取,还能从TCP Socket中获取数据(一般用于开发测试)
2.数据处理
主要通过DStream针对不同的业务需求使用不同的方法(算子)对数据进行相关操作,企业中最多的两种类型统计:实时累加统计(如统计某电商销售额)会用到DStream中的算子updateStateBykey、实时统计某段时间内的数据(如对趋势进行统计分析,实时查看最近20分钟内各个省份用户点击广告的流量统计)会用到reduceByKeyAndWindow这个算子。
3.存储结果
调用RDD中的API将数据进行存储,因为Spark Streaming是将数据分为微批处理的,所以每一批次就相当于一个RDD,可以把结果存储到Console(控制台打印,开发测试)、Redis(基于内存的分布式Key-Value数据库)、HBase(分布式列式数据库)、RDBMS(关系型数据库,如MySQL,通过JDBC)
三、Spark Streaming工作原理
Spark Streaming的工作原理是,先接收实时输入的数据流,然后将数据拆分成多个batch(批),比如每收集1秒的数据封装为一个batch,然后将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,其中的数据,也是由一个一个的batch所组成的