这篇文章给大家聊聊关于sparking是什么意思?用法、例句,以及Spark Streaming基本原理、执行流程以及单词统计简单应用开发对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
SparkStreaming是构建在SparkCore基础之上的实时计算框架(或流计算框架),它扩展了Spark处理大规模流式数据的能力。
SparkingStreaming可以整合多种输入数据源,如Kafka、Flume、HDFS、TCPsocket等等,经过处理的数据可以存储到HDFS、数据库和Dashboard等等。
SparkStreaming的基本原理是将实时输入数据流以时间片(秒级)为单位进行拆分,然后经过SparkEngine以类似批处理的方式处理每个时间片数据,执行流程如下图示。
SparkStreaming最主要的抽象是DStream(DiscretizedStream,离散化数据流),表示连续不断的数据流。在内部实现上,SparkStreaming的输入数据按照时间片(如1s),每一段数据转换为Spark中的RDD,DStream表示为RDD序列(DStream由连续的序列化RDD来表示)。
在SparkStreaming中,处理数据的单位是一批而不是单条,而数据采集却是逐条进行的,因此SparkStreaming系统需要设置间隔使得数据汇总到一定的量后再一并操作,这个间隔就是批处理间隔。批处理间隔是SparkStreaming的核心概念和关键参数,它决定了SparkStreaming提交作业的频率和数据处理的延迟,同时也影响着数据处理的吞吐量和性能。
以单词统计为例,每个时间片的数据(行数据的RDD)经过flatMap操作,生成了存储单词的RDD。
首先需要引入SparkStreaming的依赖jar包。
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.12</artifactId>
<version>2.4.3</version>
编写NetworkWordCount类,实现单词统计逻辑。
这个程序就是从tcpsockets中读取数据,并做单词统计(WordCount),时间间隔是1秒,结果输出在屏幕上。
packagecom.rickie.sparkstreaming;
importorg.apache.spark.SparkConf;
importorg.apache.spark.api.java.StorageLevels;
importorg.apache.spark.streaming.Durations;
importorg.apache.spark.streaming.api.java.JavaDStream;
importorg.apache.spark.streaming.api.java.JavaPairDStream;
importorg.apache.spark.streaming.api.java.JavaReceiverInputDStream;
importorg.apache.spark.streaming.api.java.JavaStreamingContext;
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.out.println("HelloWorld.");
System.err.println("Usage:NetworkWordCount<hostname><port>");
//CreatealocalStreamingContextwithtwoworkingthreadandbatchintervalof1second
SparkConfconf=newSparkConf().setMaster("local[2]").setAppName("NetworkWordCount");
JavaStreamingContextjssc=newJavaStreamingContext(conf,Durations.seconds(1));
jssc.sparkContext().setLogLevel("WARN");
//创建了一个DStream,从Socket中接受数据hostname:port,likelocalhost:9999
JavaReceiverInputDStream<String>lines=jssc.socketTextStream(args[0],
Integer.parseInt(args[1]),StorageLevels.MEMORY_AND_DISK_SER);
//以空格把收到的每一行数据分割成单词
JavaDStream<String>words=lines.flatMap(x->Arrays.asList(x.split("")).iterator());
JavaPairDStream<String,Integer>pairs=words.mapToPair(s->newTuple2<>(s,1));
JavaPairDStream<String,Integer>wordCounts=pairs.reduceByKey((i1,i2)->i1+i2);
//PrintthefirsttenelementsofeachRDDgeneratedinthisDStreamtotheconsole
//打印每个RDD中的前10个元素到控制台
jssc.awaitTermination();//等待计算结果
System.out.println("Welldone!");
编译打包,生成tutorial-1.0.jar包,复制到Spark运行环境中。
(1)为了运行NetworkWordCount,首先我们需要运行一个netcatserver(LinuxCentOS7环境)。
(2)然后,另开一个shell窗口,提交NetworkWordCount任务。
/usr/local/spark/bin/spark-submit--class"com.rickie.sparkstreaming.NetworkWordCount"tutorial-1.0.jarlocalhost9999
(3)在nc上发送消息,消费端接收消息,然后并进行单词统计计算。
如下图所示,输入一些文字,并回车。
(4)我们就可以在Spark运行窗口观察到如下的信息。
为了避免Spark应用输出信息的干扰,可以添加2>&1|grep"rickie"命令行参数,方便捕捉输出的信息。
/usr/local/spark/bin/spark-submit--class"com.rickie.sparkstreaming.NetworkWordCount"tutorial-1.0.jarlocalhost99992>&1|grep"rickie"
SparkStreamingProgrammingGuide
http://spark.apache.org/docs/latest/streaming-programming-guide.html
https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-streaming/index.html
好了,文章到这里就结束啦,如果本次分享的sparking是什么意思?用法、例句和Spark Streaming基本原理、执行流程以及单词统计简单应用开发问题对您有所帮助,还望关注下本站哦!