您的位置 首页 > 德语词汇

sparking是什么意思?用法、例句,四十六、Spark Streaming简介及入门

大家好,今天小编来为大家解答sparking是什么意思?用法、例句这个问题,四十六、Spark Streaming简介及入门很多人还不知道,现在让我们一起来看看吧!

SparkStreaming是基于SparkCore之间的实时计算框架,可以从很多数据源消费数据并对数据进行处理。它是Spark核心API的一个扩展与封装,可以实现高吞吐、可容错的实时流数据处理框架。支持从多种数据源获取数据,包括Kafka,Flume,Twitter,ZeroMQ,Kinesis以及TCPsockets,从数据源获取到数据之后,可以使用像map,reduce,join,window等高级函数进行复杂的处理,最后通过OutputOperation类算子可以将处理结果存储到多种存储结构如hdfs,数据库,或直接输出到仪表盘。下面看SparkStreaming官方提供的数据处理流程图:

SparkStreaming在内部的处理机制是,接收实时数据,并根据一定的时间间隔将流式数据拆分成一个个微批的数据,然后通过SparkEngine来处理这一批批的数据,最终得到处理后的一批批的结果数据。如下图所示:

sparking是什么意思?用法、例句,四十六、Spark Streaming简介及入门

可以这样来理解,它把流数据按时间间隔分割成一批批的数据后,通过一个先进先出的队列,然后SparkEngine从该队列中依次取出一批批的数据,把批数据封装成一个个RDD依赖关系构成的DAG,然后进行处理,这非常类似于生产者消费者模型。

DStream(discretizedstream)离散流,它代表一个连续的数据流,本质上就是一系列连续的RDD,DStream其实就是对RDD的封装,可以形象地把DStream看成是一个RDD的工厂,在一个DStream内部里面生产的都是具有相同计算逻辑的RDD,只不过是将来运行时里面要处理的数据是不相同的。DStream是SparkStreaming中的一个最基本的抽象,代表了一系列的连续的数据流,底层封装的就是一系列连续的RDD,对DStream进行操作,本质上就是对RDD进行操作。

和RDD一样,DStream和DStream之间存在着依赖关系,在一个固定的时间点,多个存在依赖关系的DStream其底层的对应的RDD也存在着依赖关系,这些具有依赖关系的底层RDD构成了一个DAG,周期性将这一个个的DAG提交到集群上运行。

SparkStreaming是一个对实时数据流进行高吞吐、容错处理机制的流式处理系统。它的计算流程与编程模型如下:

在了解了SparkStreaming的概念及运行原理后,让我们通过一个编写一个快速示例来体会SparkStreaming的处理过程,这个示例是网络版的wordcount,是通过接收TCPsocket端发过来的文本来实时统计单词的个数。

在编写程序前,先要在pom.xml添加SparkStreaming的依赖:

<dependency>\n<groupId>org.apache.spark</groupId>\n<artifactId>spark-streaming_2.12</artifactId>\n<version>${spark.version}</version>\n</dependency>

使用的IDEA工具

importorg.apache.spark.SparkConf\nimportorg.apache.spark.streaming.dstream.{DStream,ReceiverInputDStream}\nimportorg.apache.spark.streaming.{Seconds,StreamingContext}\n\nobjectScalaNetworkWordCount{\ndefmain(args:Array[String]):Unit={\n\n//local[2]:由于程序执行SparkStreaming应用需要至少一个线程,用于接收网络端口的数据也至少需要一个task,所以,这里至少需要2个工作线程\nvalconf:SparkConf=newSparkConf().setMaster("local[2]").setAppName(ScalaNetworkWordCount.getClass.getSimpleName)\n\n//将数据流切分批次的时间间隔设置为10s,也就是说对于数据流,每10s切一下,将来的每个批次就是处理10s的批次数据\n//ssc是接入流数据的入口,它提供了从外部数据源接入数据流的方法\nvalssc=newStreamingContext(conf,Seconds(10))\n\n//读取hostname为"localhost"的9999端口的socket文本数据\n//数据读取过来的默认的存储是default:StorageLevel.MEMORY_AND_DISK_SER_2\n//即存在内存和磁盘,序列化,有两个副本,这是容错机制的一种应用\n//ReceiverInputDStream是DStream的一个具体实现类,它代表从socket的9999端口读取的一行行的文本数据流\nvallines:ReceiverInputDStream[String]=ssc.socketTextStream("localhost",9999)\n\n//每行的文本数据流按空格切分单词,压平\n//flatMap是DStream的转换算子,是一对多,对于每一行文件,切分多个单词\n//由这些单词组成了新的DStream\nvalwords:DStream[String]=lines.flatMap(_.split(""))\n\n//对每个单词计数1,组成一个(word,1)的键值对,转换为新的DStream\nvalpairs:DStream[(String,Int)]=words.map((_,1))\n\n//计算每个批次中单词的数据\n//通过上步的转换,假如10s内的批次有以下数据:(a,1)(b,1),(a,1),(a,1),(a,1),(b,1),(c,1)\n//经过聚合,可以得到聚合后的单词与数量组成的键值对DStream:(a,4),(b,2),(c,1)\nvalreducedWords:DStream[(String,Int)]=pairs.reduceByKey(_+_)\n\n//打印该批次的数据,print()是一个OutputOperations算子,是触发执行的\nreducedWords.print()\n\n//启动计算\nssc.start()\n//等待被终止\nssc.awaitTermination()\n\n}\n}\n

你需要运行NetCat来启动9999端口(在unix-like操作系统上的小工具):

SparkStreaming就可以获取这一批次的数据:

关于本次sparking是什么意思?用法、例句和四十六、Spark Streaming简介及入门的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023