火花是一个基于内存式的分布式计算框架。具有高性能,高效可扩展,容错等优点。
今天讲解一下火花的流计算,其实它也不完全是实时的流计算,算是一种准实时的流计算。
上图讲解
运行环境:需要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写出同样的程序,代码量更少。