From ec5c799eb1de9b88746d40ca04a479fd2631a415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Mon, 27 May 2019 16:51:24 +0800 Subject: [PATCH] modify --- .../com/heibaiying/NetworkWordCount.scala | 2 +- .../heibaiying/NetworkWordCountToRedis.scala | 4 +- .../com/heibaiying/NetworkWordCountV2.scala | 26 ++- notes/Spark_Streaming基本操作.md | 182 ++++++++++++++++++ pictures/spark-streaming-dstream-ops.png | Bin 0 -> 33495 bytes pictures/spark-streaming-word-count-v1.png | Bin 0 -> 25872 bytes pictures/spark-streaming-word-count-v2.png | Bin 0 -> 13973 bytes 7 files changed, 203 insertions(+), 11 deletions(-) create mode 100644 notes/Spark_Streaming基本操作.md create mode 100644 pictures/spark-streaming-dstream-ops.png create mode 100644 pictures/spark-streaming-word-count-v1.png create mode 100644 pictures/spark-streaming-word-count-v2.png diff --git a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCount.scala b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCount.scala index 0dba281..f78384c 100644 --- a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCount.scala +++ b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCount.scala @@ -16,7 +16,7 @@ object NetworkWordCount { val ssc = new StreamingContext(sparkConf, Seconds(5)) /*创建文本输入流,并进行词频统计*/ - val lines = ssc.socketTextStream("192.168.200.229", 9999) + val lines = ssc.socketTextStream("hadoop001", 9999) lines.flatMap(_.split(" ")).map(x => (x, 1)).reduceByKey(_ + _).print() /*启动服务*/ diff --git a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountToRedis.scala b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountToRedis.scala index 8454cb8..9a1e275 100644 --- a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountToRedis.scala +++ b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountToRedis.scala @@ -15,11 +15,11 @@ object NetworkWordCountToRedis { def main(args: Array[String]) { /*指定时间间隔为5s*/ - val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]") + val sparkConf = new SparkConf().setAppName("NetworkWordCountToRedis").setMaster("local[2]") val ssc = new StreamingContext(sparkConf, Seconds(5)) /*创建文本输入流,并进行词频统计*/ - val lines = ssc.socketTextStream("192.168.200.229", 9999) + val lines = ssc.socketTextStream("hadoop001", 9999) val pairs: DStream[(String, Int)] = lines.flatMap(_.split(" ")).map(x => (x, 1)).reduceByKey(_ + _) pairs.foreachRDD { rdd => diff --git a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountV2.scala b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountV2.scala index 1adf684..5a9febb 100644 --- a/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountV2.scala +++ b/code/spark/spark-streaming-basis/src/main/java/com/heibaiying/NetworkWordCountV2.scala @@ -18,20 +18,16 @@ object NetworkWordCountV2 { System.setProperty("HADOOP_USER_NAME", "root") /*指定时间间隔为5s*/ - val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]") + val sparkConf = new SparkConf().setAppName("NetworkWordCountV2").setMaster("local[2]") val ssc = new StreamingContext(sparkConf, Seconds(5)) /*必须要设置检查点*/ - ssc.checkpoint("hdfs://192.168.200.229:8020/spark-streaming") + ssc.checkpoint("hdfs://hadoop001:8020/spark-streaming") /*创建文本输入流,并进行词频统计*/ - val lines = ssc.socketTextStream("192.168.200.229", 9999) + val lines = ssc.socketTextStream("hadoop001", 9999) lines.flatMap(_.split(" ")).map(x => (x, 1)) - .updateStateByKey((values: Seq[Int], state: Option[Int]) => { - val currentCount: Int = values.sum - val lastCount: Int = state.getOrElse(0) - Some(currentCount + lastCount) - }) + .updateStateByKey[Int](updateFunction _) .print() /*启动服务*/ @@ -40,4 +36,18 @@ object NetworkWordCountV2 { ssc.awaitTermination() } + + /** + * 累计求和 + * + * @param currentValues 当前的数据 + * @param preValues 之前的数据 + * @return 相加后的数据 + */ + def updateFunction(currentValues: Seq[Int], preValues: Option[Int]): Option[Int] = { + val current = currentValues.sum + val pre = preValues.getOrElse(0) + Some(current + pre) + } + } diff --git a/notes/Spark_Streaming基本操作.md b/notes/Spark_Streaming基本操作.md new file mode 100644 index 0000000..cd94b5b --- /dev/null +++ b/notes/Spark_Streaming基本操作.md @@ -0,0 +1,182 @@ +# Spark Streaming 基本操作 + +## 一、案例引入 + +这里先引入一个基本的案例来演示流的创建:监听指定端口9999上的数据并进行词频统计。项目依赖和代码实现如下: + +```xml + + org.apache.spark + spark-streaming_2.12 + 2.4.3 + +``` + +```scala +import org.apache.spark.SparkConf +import org.apache.spark.streaming.{Seconds, StreamingContext} + +object NetworkWordCount { + + def main(args: Array[String]) { + + /*指定时间间隔为5s*/ + val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]") + val ssc = new StreamingContext(sparkConf, Seconds(5)) + + /*创建文本输入流,并进行词频统计*/ + val lines = ssc.socketTextStream("hadoop001", 9999) + lines.flatMap(_.split(" ")).map(x => (x, 1)).reduceByKey(_ + _).print() + + /*启动服务*/ + ssc.start() + /*等待服务结束*/ + ssc.awaitTermination() + } +} +``` + +二、常用算子 + +使用本地模式启动Spark程序,然后使用`nc -lk 9999`打开端口并输入测试数据: + +```shell +[root@hadoop001 ~]# nc -lk 9999 +hello world hello spark hive hive hadoop +storm storm flink azkaban +``` + +此时IDEA中控制台输出如下,可以看到已经接收到每一行数据并且进行了词频统计。 + +![spark-streaming-word-count-v1](D:\BigData-Notes\pictures\spark-streaming-word-count-v1.png) + +下面我们针对示例代码进行讲解: + +### 3.1 StreamingContext + +Spark Streaming编程的入口类是StreamingContext,在创建时候需要指明`sparkConf`和`batchDuration`(批次时间),Spark流处理本质是将流数据拆分为一个个批次,然后进行微批处理,batchDuration就是用于指定流数据将被分成批次的时间间隔。这个时间可以根据业务需求和服务器性能进行指定,如果业务要求低延迟,则这个时间可以指定得很短。 + +这里需要注意的是:示例代码使用的是本地模式,配置为`local[2]`,这里不能配置为`local[1]`。这是因为对于流数据的处理,Spark必须有一个独立的Executor来接收数据,然后由其他的Executors来处理数据,所以为了保证数据能够被处理,至少要有2个Executors。这里我们的程序只有一个数据流,在并行读取多个数据流的时候,也要注意必须保证有足够的Executors来接收和处理数据。 + +### 3.2 数据源 + +在示例代码中使用的是`socketTextStream`来创建基于socket的数据流,实际上Spark还支持多种数据源,分为以下两类: + ++ 基本数据源:文件系统、socket的连接; ++ 高级数据源:Kafka,Flume,Kinesis。 + +在基本数据源中,Spark支持对HDFS上指定目录进行监听,当有新文件加入时,会获取其文件内容作为输入流。创建方式如下: + +```scala +// 对于文本文件,指明监听目录即可 +streamingContext.textFileStream(dataDirectory) +// 对于其他文件,需要指明目录,以及键的类型、值的类型、和输入格式 +streamingContext.fileStream[KeyClass, ValueClass, InputFormatClass](dataDirectory) +``` + +指定的目录时,可以是具体的目录,如`hdfs://namenode:8040/logs/`;也可以使用通配符,如`hdfs://namenode:8040/logs/2017/*`。 + +> 关于高级数据源的整合单独整理至:[Spark Streaming 整合 Flume](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark_Streaming整合Flume.md) 和 [Spark Streaming 整合 Kafka](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark_Streaming整合Kafka.md) + +### 3.3 服务的启动与停止 + +在示例代码中,使用`streamingContext.start()`代表启动服务,此时还要使`streamingContext.awaitTermination()`使服务处于等待和可用的状态,直到发生异常或者手动使用`streamingContext.stop()`进行终止。 + + + +## 二、updateStateByKey + +### 2.1 DStream与RDDs + +DStream是Spark Streaming提供的基本抽象。它表示连续的数据流。在内部,DStream由一系列连续的RDD表示。所以从本质上而言,应用于DStream的任何操作都会转换为底层RDD上的操作。例如,在示例代码中的flatMap算子操作实际上是作用在每个RDDs上(如下图)。因为这个原因,所以Spark Streaming能够支持RDD大多数的transformation算子。 + +![spark-streaming-dstream-ops](D:\BigData-Notes\pictures\spark-streaming-dstream-ops.png) + +### 2.2 updateStateByKey + +除了支持RDD上大多数的transformation算子外,DStream还有部分独有的算子,这当中比较重要的是`updateStateByKey`。文章开头的词频统计程序,只能统计每一次输入文本中单词出现的数量,想要统计所有历史输入中单词出现的数量,就需要依赖`updateStateByKey`算子。代码如下: + +```scala +object NetworkWordCountV2 { + + + def main(args: Array[String]) { + + /* + * 本地测试时最好指定hadoop用户名,否则会默认使用本地电脑的用户名, + * 此时在HDFS上创建目录时可能会抛出权限不足的异常 + */ + System.setProperty("HADOOP_USER_NAME", "root") + + val sparkConf = new SparkConf().setAppName("NetworkWordCountV2").setMaster("local[2]") + val ssc = new StreamingContext(sparkConf, Seconds(5)) + /*必须要设置检查点*/ + ssc.checkpoint("hdfs://hadoop001:8020/spark-streaming") + val lines = ssc.socketTextStream("hadoop001", 9999) + lines.flatMap(_.split(" ")).map(x => (x, 1)) + .updateStateByKey[Int](updateFunction _) //updateStateByKey算子 + .print() + + ssc.start() + ssc.awaitTermination() + } + + /** + * 累计求和 + * + * @param currentValues 当前的数据 + * @param preValues 之前的数据 + * @return 相加后的数据 + */ + def updateFunction(currentValues: Seq[Int], preValues: Option[Int]): Option[Int] = { + val current = currentValues.sum + val pre = preValues.getOrElse(0) + Some(current + pre) + } +} +``` + +使用`updateStateByKey`算子,你必须使用` ssc.checkpoint()`设置检查点,这样当使用`updateStateByKey`算子时,它会去检查点中取出上一次保存的信息,并使用自定义的`updateFunction`函数将上一次的数据和本次数据进行相加,然后返回。 + +### 2.3 启动测试 + +```shell +[root@hadoop001 ~]# nc -lk 9999 +hello world hello spark hive hive hadoop +storm storm flink azkaban +hello world hello spark hive hive hadoop +storm storm flink azkaban +``` + +控制台输出如下,可以看到每一次输入的结果都被进行了累计求值。 + +![spark-streaming-word-count-v2](D:\BigData-Notes\pictures\spark-streaming-word-count-v2.png) + +同时查看在输出日志中还可以看到检查点操作的相关信息: + +```shell +# 保存检查点信息 +19/05/27 16:21:05 INFO CheckpointWriter: Saving checkpoint for time 1558945265000 ms +to file 'hdfs://hadoop001:8020/spark-streaming/checkpoint-1558945265000' + +# 删除已经无用的检查点信息 +19/05/27 16:21:30 INFO CheckpointWriter: +Deleting hdfs://hadoop001:8020/spark-streaming/checkpoint-1558945265000 +``` + +## 三、输出操作 + +| Output Operation | Meaning | +| :------------------------------------------ | :----------------------------------------------------------- | +| **print**() | 在运行流应用程序的driver节点上打印DStream中每个批次的前十个元素。用于开发调试。 | +| **saveAsTextFiles**(*prefix*, [*suffix*]) | 将DStream的内容保存为文本文件。每个批处理间隔的文件名基于前缀和后缀生成:“prefix-TIME_IN_MS [.suffix]”。 | +| **saveAsObjectFiles**(*prefix*, [*suffix*]) | 将此DStream的内容序列化为Java对象,并保存到SequenceFiles。每个批处理间隔的文件名基于前缀和后缀生成:“prefix-TIME_IN_MS [.suffix]”。 | +| **saveAsHadoopFiles**(*prefix*, [*suffix*]) | 将此DStream的内容保存为Hadoop文件。每个批处理间隔的文件名基于前缀和后缀生成:“prefix-TIME_IN_MS [.suffix]”。 | +| **foreachRDD**(*func*) | 最通用的输出方式,它将函数func应用于从流生成的每个RDD。此函数应将每个RDD中的数据推送到外部系统,例如将RDD保存到文件,或通过网络将其写入数据库。 | + + + + + + + diff --git a/pictures/spark-streaming-dstream-ops.png b/pictures/spark-streaming-dstream-ops.png new file mode 100644 index 0000000000000000000000000000000000000000..73084ff1a1f0ccab1ba851ae9682d48face887f1 GIT binary patch literal 33495 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 W9|52C-$y~;kQRR_h7x(}^}hgG7Z)7> literal 0 HcmV?d00001 diff --git a/pictures/spark-streaming-word-count-v1.png b/pictures/spark-streaming-word-count-v1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8015689ff254dc78899790466785570ace65bd GIT binary patch literal 25872 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

^B8T&FmM+! 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 literal 0 HcmV?d00001 diff --git a/pictures/spark-streaming-word-count-v2.png b/pictures/spark-streaming-word-count-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9402ea392246166e33fee78e8539192e1048c2 GIT binary patch literal 13973 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

Yl|~kuXV1A>D@{iqxC9XAV~uU5@36F@sS|D_ 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 literal 0 HcmV?d00001