火花流实现数据实时统计案例

  

火花是一个基于内存式的分布式计算框架。具有高性能,高效可扩展,容错等优点。

今天讲解一下火花的流计算,其实它也不完全是实时的流计算,算是一种准实时的流计算。

上图讲解

火花流实现数据实时统计案例

运行环境:需要linux环境下的火花环境

本例用的centOS 6.5 x64因为需要使用TCP协议传输数据,所以需要安装一个数控插件。

安装方式:百胜,安装ncxxx或者挂载光盘安装

安装后启动数控路9999端口可以随便指定,最好是1024年以上的就可以。

下面贴出代码

java版本的

import  java.util.Arrays;   import 并不知道;   import  org.apache.spark.SparkConf;   import  org.apache.spark.api.java.function.FlatMapFunction;   import  org.apache.spark.api.java.function.Function2;   import  org.apache.spark.api.java.function.PairFunction;   import  org.apache.spark.streaming.Durations;   import  org.apache.spark.streaming.api.java.JavaDStream;   import  org.apache.spark.streaming.api.java.JavaPairDStream;   import  org.apache.spark.streaming.api.java.JavaReceiverInputDStream;   import  org.apache.spark.streaming.api.java.JavaStreamingContext;      import  com.google.common.base.Optional;      import  scala.Tuple2;   public  class  SparkDemo  {   public  static  void  main (String [], args), {   SparkConf 相依=new  SparkConf () .setAppName .setMaster (“sparkDemo2”)(“地方[3]”);   JavaStreamingContext  jsc=new  JavaStreamingContext(参看Durations.seconds (5));//使用带状态的算子,需要检查点做容错处理   jsc.checkpoint (“D://chkspark”);   JavaReceiverInputDStream (), {      private  static  final  long  serialVersionUID l=1;   public  Iterable< String>,调用(String 线),throws  Exception  {   return  arrays . aslist (line.split (", "));   }   });   字符串,JavaPairDStream, wordsToPairDstream=wordsDstream.mapToPair (new  PairFunction<字符串,字符串,Integer> (), {      private  static  final  long  SerialVersionUID l=1;   public  Tuple2<字符串,Integer>,叫(String 词),throws  Exception  {      字符串,return  new  Tuple2(单词,,1);   }   });/* *   ,*一个批处理对应一个抽样又是;   ,* */,   字符串,JavaPairDStream, resultDstream=wordsToPairDstream.updateStateByKey (new  Function2< List,, Optional,, Optional在(),{      private  static  final  long  serialVersionUID l=1;   public  Optional< Integer>,调用(List,状态),throws  Exception  {   Integer  oldValue=https://www.yisu.com/zixun/0;//默认旧值是0   如果(state.isPresent ()) {   oldValue=state.get ();   }   (整型值:值){   oldValue +=价值;   }   返回Optional.of (oldValue);   }   });//打印结果   resultDstream.print ();   jsc.start ();   jsc.awaitTermination ();   }   }

程序测试:从linux端的数控下输入任意字符串,火花流会实时对输入的数据做出统计。类似于wordcount。除非手动杀了这个进程,否则会一直运行下去。因为它的原理就是和自来水的水流一样,是一连串的数据流。

运行结果展示:

火花流实现数据实时统计案例

也可以用scala写出同样的程序,代码量更少。

火花流实现数据实时统计案例