基于Spark core API 的一个扩展,处理实时数据流
Spark Core 模型是RDD SparkContext
Spark SQL 模型是DF/DS SparkSession
Spark Streaming 模型是DStream StreamingContext
处理实时数据流过程
Spark Streaming
input(Flume、Kafka、Socket) --> compute(基于core之上的一些算子) --> output(filesystem、hbase、sql、nosql)
Spark Streaming on ML and gragh processing algorithms,体现了spark一站式解决方案的特性
1、在内部,它的工作原理如下。 Spark Streaming接收实时输入数据流并将数据分成批,然后由Spark引擎处理,以批量生成最终结果流。
数据流进来先离散化,分成多个batch,然后持久化存两份,一个在executor一份存内存,然后对每个batch进行批处理
SparkStreaming测试
SparkStreaming支持三种socket通信:socketTextStream socketStream rawSocketTextStream
import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} object SocketWordCountApp { def main(args: Array[String]){ val sparkConf = new SparkConf().setAppName("SocketWordCountApp").setMaster("local[2]") val ssc = new StreamingContext(sparkConf,Seconds(10)) val lines = ssc.socketTextStream("hadoop",9999) lines.flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).print ssc.start() ssc.awaitTermination() } }
划重点:运行一个有reciver的SparkStreaming任务,至少要分配两个core,一个用于reciver,一个用于处理数据