SparkStreaming0nHDFS实战

来源:互联网 发布:node.js 编译 编辑:程序博客网 时间:2024/06/05 15:36
public class WordCountOnline2 {public static void main(String[] args) {final SparkConf conf=new SparkConf().setAppName("SparkStreamingOnHDFS");final String checkpointDirectory="hdfs:///liberary/SparkStreaming/CheckPoint";JavaStreamingContextFactory factory=new JavaStreamingContextFactory() {public JavaStreamingContext create() {return createContext(checkpointDirectory,conf);}};/** * 可以从失败中恢复Driver,不过还需要制定Driver这个进程运行在Cluster,并且在提交应用程序的时候制定 * --superise */JavaStreamingContext jsc = JavaStreamingContext.getOrCreate(checkpointDirectory, factory);/** * 此处没有Receiver,SparkStreaming应用程序只是按照时间间隔监控每个batch新增的内容,作为RDD的数据来源生产RDD */JavaDStream<String> lines = jsc.textFileStream("hdfs:///liberary/SparkStreaming/data");JavaDStream<String> words=lines.flatMap(new FlatMapFunction<String, String>() {public Iterable<String> call(String line) throws Exception {return Arrays.asList(line.split(" "));}});/** * 在单词拆分的基础上对每个单词进行实例计数为1 */JavaPairDStream<String, Integer> pairs=words.mapToPair(new PairFunction<String, String, Integer>() {public Tuple2<String, Integer> call(String word) throws Exception {// TODO Auto-generated method stubreturn new Tuple2<String, Integer>(word, 1);}});/** * 在每个单词实例计数为1的基础上统计每个单词在文件中出现的总次数 */JavaPairDStream<String, Integer> wordCount=pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {public Integer call(Integer v1, Integer v2) throws Exception {// TODO Auto-generated method stubreturn v1+v2;}});/** * 此处的print并不会直接触发Job的支持,因为现在的一切都是在SparkStreaming的框架 * 控制之下,对于SparkStreaming而言是否触发真正的Job运行时基于Duration的时间间隔的 * SparkStreaming应用程序要想执行具体的job,对Dstream必须要有outputStream * 操作,outputStream有很多类型的函数触发,print,saveAsTextFile * 最重要的一个方法是ForeachRDD,因为SparkStreaming处理的结果一般都会放在 * Redis,数据库,DashBoard等上 面,而foreach就是用来完成这些功能的, */wordCount.print();/** * SparkStreaming执行引擎也就是Driver开始运行 * Driver启动运行的时候是位于一条新的线程中的 * 当然其内部有消息循环体用于接受应用程序本身或者Executor中的消息 * 启动框架 */jsc.start();jsc.awaitTermination();jsc.close();}private static JavaStreamingContext createContext(String checkpointDirectory,SparkConf conf){System.out.println("creating new context");SparkConf sparkConf=conf;JavaStreamingContext ssc=new JavaStreamingContext(sparkConf,Durations.seconds(15));ssc.checkpoint(checkpointDirectory);return ssc;}}

0 0
原创粉丝点击