Spark Streaming、离线计算、实时计算、实时查询、Spark Streaming 原理、Spark Streaming WordCount、Spark Streaming 架构图
Spark Streaming、离线计算、实时计算、实时查询、Spark Streaming 原理、Spark Streaming WordCount、Spark Streaming 架构图
目录
- Spark Streaming
- 离线计算、实时计算、实时查询
- Spark Streaming 原理
- Spark Streaming WordCount
- 1、导入依赖
- 2、WordCount 示例
- Spark Streaming 架构图
Spark Streaming
spark 中 最重要的就是 spark core 和 spark sql (也就是之前笔记的内容)
离线计算、实时计算、实时查询
Spark Streaming 原理
Spark Streaming WordCount
1、导入依赖
org.apache.spark
spark-streaming_2.11
2.4.5
以下列出 spark 项目 目前所需的所有依赖和插件
org.scala-lang
scala-library
2.11.12
org.scala-lang
scala-compiler
2.11.12
org.scala-lang
scala-reflect
2.11.12
org.apache.spark
spark-core_2.11
2.4.5
org.apache.spark
spark-sql_2.11
2.4.5
org.apache.spark
spark-streaming_2.11
2.4.5
mysql
mysql-connector-java
5.1.40
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
1.8
org.scala-tools
maven-scala-plugin
2.15.2
compile
testCompile
2、WordCount 示例
package com.shujia.stream
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Duration, Durations, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}
object Demo1WordCount {
def main(args: Array[String]): Unit = {
/**
* 1、创建 SparkContext
*
*/
val conf: SparkConf = new SparkConf()
//在local后面可以通过[]指定一个参数,指定一个任务运行时使用的CPU核数,不能超过自己电脑的CPU核数
//因为在处理数据的时候还要接收数据,所以这里要指定为 2 才能跑起来
.setMaster("local[2]")
.setAppName("stream")
val sc = new SparkContext(conf)
/**
* 2、创建 SparkStreaming 环境
*
* 需要SparkContext对象+指定batch的间隔时间(多久处理一次)
*
*/
val ssc = new StreamingContext(sc, Durations.seconds(5))
/**
* 实时计算的数据源一般是 Kafka
* 因为目前 Kafka 没有学,所以通过 socket 去模拟实时环境
*
* 读取socket中的数据 -- socketTextStream("主机名","端口号")
*
* 在Linux中启动 socket 服务
* 没有nc命令的话,要yum一个
* yum install nc
* nc -lk 8888
* 之后就可以在Linux的shell中输入数据,然后谁连接了我指定的端口号,谁就能拿到我输入的数据
*
*/
/**
* DStream : Spark Streaming 的编程模型,其底层也是RDD,每隔5秒将数据封装成一个rdd
*/
val lineDS: DStream[String] = ssc.socketTextStream("master", 8888)
/**
* 统计单词的数量
*
*/
val wordsDS: DStream[String] = lineDS.flatMap(line => line.split(","))
val kvDS: DStream[(String, Int)] = wordsDS.map(word => (word, 1))
val countDS: DStream[(String, Int)] = kvDS.reduceByKey(_ + _)
countDS.print()
/**
* 启动Spark Streaming程序
* 这几行代码是必须的,这和RDD中不一样
*/
ssc.start()//启动
ssc.awaitTermination()//等待关闭
ssc.stop()//关闭
}
}