一、Spark Streaming处理框架:
Spark Streaming接收Kafka、Flume、HDFS等各种来源的实时输入数据,可以使用诸如map、reduce、join等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,处理结果保存到HDFS,数据库等。
二、SparkStreaming实时任务如何开发?
1. 数据的输入
1.1 socket(测试开发的时候使用起来很方便。)
1.2 HDFS(使用得很少)
1.3 Flume(也是很少)
1.4 自定义数据源(用得很少,我们公司里面没有出现过,但是不代表没有用。)
1.5 Kafka 真正企业里面使用的是kafka
2. 数据的处理:
企业里面怎么用?
2.1 RDD的那些算子
2.2 transform
2.3 updateStateByKey
2.4 mapWithState
2.5 Window窗口的计算
3. 数据的输出
3.1 print(测试的时候使用)
3.2 foreachRDD(允许用户对Dstream每一批数据对应的RDD本身做任意操作,企业里面也是使用的这个api)
这个就是真正项目上线的时候需要使用的API。
存入kafka,mysql,codis,reids,hbase
比如公司里面上班:
电梯:批处理,或者说是离线处理。
离线,数据量大
商场里面购物:
扶梯:实时处理,处理的是流数据
实时,每次处理的 数据量不大。
三、spark组件类比:
SparkCore:核心计算引擎
1. 核心的抽象 RDD
2. 程序的入口
val conf=new SparkConf
val sc=new SparkContext(conf)
后面无非就是一些算子对RDD进行各种操作。
SparkStreaming
1. 核心的抽象 DStream(一个DStream包括多个RDD,加了时间维度(隔一定时间执行一套RDD),不同时间RDD变换)
2. 程序的入口
val conf=new SparkConf()
val ssc=new StremaingContext(conf,Seoncdss(1))
SparkSQL:
1. 核心的抽象 DataFrame/DataSet
2. 程序的入口
spark1.x: val sqlContext=new SQLContext(conf)
spark2.x: val spark=SparkSessionxxx
后面的操作无非就是对dataFream/dataset进行各种算子的操作
四、Sparkstreaming架构:
– Client:负责向Spark Streaming中灌入数据(flume kafka)
• 整个架构由3个模块组成:
– Master:记录Dstream之间的依赖关系或者血缘关系,并负责任务调度以生成新的RDD
– Worker:①从网络接收数据并存储到内存中 ②执行RDD计算
spark中driver=AM , executor=worker节点
五、SparkStreaming作业提交
• Network Input Tracker:跟踪每一个网络received数据,并且将其映射到相应的input Dstream上
• Job Scheduler:周期性的访问DStream Graph并生成Spark Job,将其交给Job Manager执行
• Job Manager:获取任务队列,并执行Spark任务