您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 好程序员大数据培训:解析Spark Streaming原理
SparkStreaming------------类比SparkSQL是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力Sparkstreaming就是不断产生RDD,并且按照时间间隔不断的提交到集群进行执行1.SparkStreaming把实时输入数据流以时间片Δt(如1秒)为单位切分成块2.SparkStreaming会把每块数据作为一个RDD,并使用RDD操作处理每一小块数据,每个块都会生成一个SparkJob处理,最终结果也返回多块。3.在SparkStreaming中,则通过操作DStream(表示数据流的RDD序列)提供的接口,这些接口和RDD提供的接口类似。应用场景:正如SparkStreaming最初的目标一样,它通过丰富的API和基于内存的高速计算引擎让用户可以结合流式处理,批处理和交互查询等应用。因此SparkStreaming适合一些需要历史数据和实时数据结合分析的应用场合。当然,对于实时性要求不是特别高的应用也能完全胜任,另外通过RDD的数据重用机制可以得到更高效的容错处理。概念理解:SparkStreaming启动执行步鄹:1、加载SparkConf和StreamingContext2、建立DStream接收器vallines=ssc.socketTextStream(“192.168.200.11”,9999)3、lines就是一个DStream,每一个Duration就是一个RDD(一直循环RDD)4、输出函数5、开启SparkStreaming6、一直循环第3,4步的操作DStream和Rdd的理解一个数据接收源就是一个DStream(本例子中lines),一个Duration就是一个RDD(本例子中10s),下面例子中:println(“===========ProjectStart=================”)println(“===========ProjectEnd=================”)只出现一次。而隔10秒,出现下面内容println(“===========RDDStart=================”)rdd.foreach(x=println(x))println(“===========RDDEnd=================”)1.DStream1.1.什么是DStreamDiscretizedStream是SparkStreaming的基础抽象,代表持续性的数据流和经过各种Spark原语操作后的结果数据流。在内部实现上,DStream是一系列连续的RDD来表示。每个RDD含有一段时间间隔内的数据,如下图:对数据的操作也是按照RDD为单位来进行的计算过程由Sparkengine来完成DStream:是一个离散流,是SparkStreaming的基本的数据抽象,代表了一系列连续的RDD,在执行过程中是把数据按照时间间隔分成一个个批次(batch)进行处理的。特性:一个放了多个DStream的列表,而且DStream之间是有依赖关系的每隔一段时间DStream就会生成一个RDD每隔一段时间生成的RDD都有一个函数作用在这个RDD上---------------------------------------------------------------------------------------------------------------------------1.DStream是SparkStreaming的基础抽象,代表持续性的数据流和经过各种Spark原语操作后的结果数据流2.在内部实现上,DStream是一系列连续的RDD来表示。每个RDD含有一段时间间隔内的数据,如下图:3.对数据的操作也是按照RDD为单位来进行的,4.计算过程由Sparkengine来完成SparkStreaming是计算框架,DStream是SparkStreaming处理的数据单位(数据和算子的封装)2.1.DStream相关操作DStream上的原语与RDD的类似,分为Transformations(转换)和OutputOperations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()[调用原语处理DStream里包含的RDD]以及各种Window(窗口操作)相关的原语。2.1.1.TransformationsonDStreamsTransformationMeaningmap(func)ReturnanewDStreambypassingeachelementofthesourceDStreamthroughafunctionfunc.flatMap(func)Similartomap,buteachinputitemcanbemappedto0ormoreoutputitems.filter(func)ReturnanewDStreambyselectingonlytherecordsofthesourceDStreamonwhichfuncreturnstrue.repartition(numPartitions)ChangesthelevelofparallelisminthisDStreambycreatingmoreorfewerpartitions.union(otherStream)ReturnanewDStreamthatcontainstheunionoftheelementsinthesourceDStreamandotherDStream.count()ReturnanewDStreamofsingle-elementRDDsbycountingthenumberofelementsineachRDDofthesourceDStream.reduce(func)ReturnanewDStreamofsingle-elementRDDsbyaggregatingtheelementsineachRDDofthesourceDStreamusingafunctionfunc(whichtakestwoargumentsandreturnsone).Thefunctionshouldbeassociativesothatitcanbecomputedinparallel.countByValue()WhencalledonaDStreamofelementsoftypeK,returnanewDStreamof(K,Long)pairswherethevalueofeachkeyisitsfrequencyineachRDDofthesourceDStream.reduceByKey(func,[numTasks])WhencalledonaDStreamof(K,V)pairs,returnanewDStreamof(K,V)pairswherethevaluesforeachkeyareaggregatedusingthegivenreducefunction.Note:Bydefault,thisusesSpark'sdefaultnumberofparalleltasks(2forlocalmode,andinclustermodethenumberisdeterminedbytheconfigpropertyspark.default.parallelism)todothegrouping.YoucanpassanoptionalnumTasksargumenttosetadifferentnumberoftasks.join(otherStream,[numTasks])WhencalledontwoDStreamsof(K,V)and(K,W)pairs,returnanewDStreamof(K,(V,W))pairswithallpairsofelementsforeachkey.cogroup(otherStream,[numTasks])WhencalledonaDStreamof(K,V)and(K,W)pairs,returnanewDStreamof(K,Seq[V],Seq[W])tuples.transform(func)ReturnanewDStreambyapplyingaRDD-to-RDDfunctiontoeveryRDDofthesourceDStream.ThiscanbeusedtodoarbitraryRDDoperationsontheDStream.updateStateByKey(func)ReturnanewstateDStreamwherethestateforeachkeyisupdatedbyapplyingthegivenfunctiononthepreviousstateofthekeyandthenewvaluesforthekey.Thiscanbeusedtomaintainarbitrarystatedataforeachkey.2.1.2特殊的Transformations1.UpdateStateByKeyOperation-----(每次数据后分析完成后,结果输出并保存)UpdateStateByKey原语用于记录历史记录,上文中WordCount示例中就用到了该特性。若不用UpdateStateByKey来更新状态,那么每次数据进来后分析完成后,结果输出后将不再保存,注意:需要配合checkpoint才能达到保存历史记录的效果2.TransformOperation----(调用原语处理DStream里包含的RDD,直接使用rdd算子操作DStream中的RDD)Transform原语允许DStream上执行任意的RDD-to-RDD函数。通过该函数可以方便的扩展SparkAPI。此外,MLlib(机器学习)以及Graphx也是通过本函数来进行结合的。3.WindowOperations(窗口操作)WindowOperations有点类似于Storm中的State,可以设置窗口的大小和滑动窗口的间隔来动态的获取当前Steaming的允许状态1.1.1.OutputOperationsonDStreamsOutputOperations可以将DStream的数据输出到外部的数据库或文件系统,当某个OutputOperations原语被调用时(与RDD的Action相同),streaming程序才会开始真正的计算过程。OutputOperationMeaningprint()PrintsthefirsttenelementsofeverybatchofdatainaDStreamonthedrivernoderunningthestreamingapplication.Thisisusefulfordevelopmentanddebugging.saveAsTextFiles(prefix,[suffix])SavethisDStream'scontentsastextfiles.Thefilenameateachbatchintervalisgeneratedbasedonprefixandsuffix:prefix-TIME_IN_MS[.suffix].saveAsObjectFiles(prefix,[suffix])SavethisDStream'scontentsasSequenceFilesofserializedJavaobjects.Thefilenameateachbatchintervalisgeneratedbasedonprefixandsuffix:prefix-TIME_IN_MS[.suffix].saveAsHadoopFiles(prefix,[suffix])SavethisDStream's
本文标题:好程序员大数据培训:解析Spark Streaming原理
链接地址:https://www.777doc.com/doc-3310028 .html