package iie.udps.example.operator.spark;

import scala.Tuple2;

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.Duration;
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 org.apache.spark.streaming.Time; import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List; import com.google.common.io.Files; import org.apache.spark.api.java.JavaPairRDD; import com.google.common.base.Optional; /**
* To run this on your local machine, you need to first run a Netcat server
*
* `$ nc -lk 9999`
*
* and run the example as
*
* spark-submit --class iie.udps.example.operator.spark.JavaNetworkWordCount
* --master local /home/xdf/test2.jar localhost 9999 /user/test/checkpoint/
* /home/xdf/outputFile /home/xdf/totalOutputFile
*
* 此示例接收Netcat server产生的数据,进行WordCount操作,分别输出当前结果和历史结果到本地文件中
*/
public final class JavaNetworkWordCount { @SuppressWarnings("serial")
public static void main(String[] args) { if (args.length != 5) {
System.err.println("You arguments were " + Arrays.asList(args));
System.err
.println("Usage: JavaNetworkWordCount <hostname> <port> <checkpoint-directory>\n"
+ " <output-file> <total-output-file>. <hostname> and <port> describe the TCP server that Spark\n"
+ " Streaming would connect to receive data. <checkpoint-directory> directory to\n"
+ " HDFS-compatible file system which checkpoint data <output-file> file to which\n"
+ " the word counts will be appended\n"
+ " <total-output-file> file to which the total word counts will be appended\n"
+ "\n"
+ "In local mode, <master> should be 'local[n]' with n > 1\n"
+ "Both <checkpoint-directory> and <output-file> and <total-output-file> must be absolute paths");
System.exit(1);
} final String checkpointDirectory = args[2]; // 检查点目录
final String curOutputPath = args[3];// 输出当前WordCount结果的路径
final String totalOutputPath = args[4];// 输出全部累计WordCount结果的路径
System.out.println("Creating new context");
final File curOutputFile = new File(curOutputPath);
if (curOutputFile.exists()) {
curOutputFile.delete();
}
final File totalOutputFile = new File(totalOutputPath);
if (totalOutputFile.exists()) {
totalOutputFile.delete();
}
// Create a StreamingContext
SparkConf conf = new SparkConf().setAppName("NetworkWordCount");
final JavaStreamingContext jssc = new JavaStreamingContext(conf,
new Duration(1000)); jssc.checkpoint(checkpointDirectory); // Create a DStream that will connect to hostname:port, like
// localhost:9999
JavaReceiverInputDStream<String> lines = jssc.socketTextStream(args[0],
Integer.parseInt(args[1])); // Split each line into words
JavaDStream<String> words = lines
.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String x) {
return Arrays.asList(x.split(" "));
}
}); // Count each word in each batch
JavaPairDStream<String, Integer> pairs = words
.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s)
throws Exception {
return new Tuple2<String, Integer>(s, 1);
}
});
JavaPairDStream<String, Integer> runningCounts = pairs
.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2)
throws Exception {
return i1 + i2;
}
}); runningCounts
.foreachRDD(new Function2<JavaPairRDD<String, Integer>, Time, Void>() {
@Override
public Void call(JavaPairRDD<String, Integer> rdd, Time time)
throws IOException {
String counts = "Counts at time " + time + " "
+ rdd.collect();
System.out.println(counts);
System.out.println("Appending to "
+ curOutputFile.getAbsolutePath());
Files.append(counts + "\n", curOutputFile,
Charset.defaultCharset());
return null;
}
}); Function2<List<Integer>, Optional<Integer>, Optional<Integer>> updateFunction = new Function2<List<Integer>, Optional<Integer>, Optional<Integer>>() {
@Override
public Optional<Integer> call(List<Integer> values,
Optional<Integer> state) {
Integer newSum = state.or(0);
for (Integer i : values) {
newSum += i;
}
return Optional.of(newSum);
}
}; JavaPairDStream<String, Integer> TotalCounts = words.mapToPair(
new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
}).updateStateByKey(updateFunction); TotalCounts
.foreachRDD(new Function2<JavaPairRDD<String, Integer>, Time, Void>() {
@Override
public Void call(JavaPairRDD<String, Integer> rdd, Time time)
throws IOException {
String counts = "Counts at time " + time + " "
+ rdd.collect();
System.out.println(counts);
System.out.println("Appending to "
+ totalOutputFile.getAbsolutePath());
Files.append(counts + "\n", totalOutputFile,
Charset.defaultCharset());
return null;
}
}); jssc.start(); // Start the computation
jssc.awaitTermination(); // Wait for the computation to terminate
System.exit(0);
} }

  

spark streaming 实现接收网络传输数据进行WordCount功能的更多相关文章

  1. Spark Streaming 数据接收过程

    SparkStreaming 源码分析 一节中从源码角度,描述了Streaming执行时代码的调用过程.下边就接收转化阶段过程再简单分析一下,为分析backpressure作准备. SparkStre ...

  2. Spark Streaming与kafka整合实践之WordCount

    本次实践使用kafka console作为消息的生产者,Spark Streaming作为消息的消费者,具体实践代码如下 首先启动kafka server .\bin\windows\kafka-se ...

  3. Spark Streaming的接收KAFKA的数据

    https://github.com/lw-lin/CoolplaySpark/blob/master/Spark%20Streaming%20%E6%BA%90%E7%A0%81%E8%A7%A3% ...

  4. Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

    本期内容 : 数据接收架构设计模式 数据接收源码彻底研究 一.Spark Streaming数据接收设计模式   Spark Streaming接收数据也相似MVC架构: 1. Mode相当于Rece ...

  5. Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

    本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...

  6. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

  7. Spark Streaming简介及原理

    简介: SparkStreaming是一套框架. SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理. 支持多种数据源获取数据: Spark ...

  8. .Spark Streaming(上)--实时流计算Spark Streaming原理介

    Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/474 ...

  9. spark streaming的理解和应用

    1.Spark Streaming简介 官方网站解释:http://spark.apache.org/docs/latest/streaming-programming-guide.html 该博客转 ...

随机推荐

  1. html标签marquee实现走马灯效果(文字浮动)

    marquee标签实现文字或图片的移动效果 <marquee direction = "right">文字<marquee>

  2. java 面向对象编程-- 第15章 集合框架

    1.  集合特点:元素类型不同.集合长度可变.空间不固定 2.  java中对一些数据结构和算法进行了封装即集合.集合也是一种对象,用于存储.检索.操作和传输对象. 3.  JCF(Java Coll ...

  3. struts2最新s2-016代码执行漏洞CVE-2013-2251

    这是一个代码执行漏洞,利用java代码来执行系统命令.   影响版本:Struts 2.0.0 – Struts 2.3.15   漏洞说明: The Struts 2 DefaultActionMa ...

  4. 使用rosed编辑ROS文件

    1.1使用rosed. rosed是rosbash套件的一部分.它可以使你通过package的名字直接编辑一个package中的文件而不用输入package的整个路径. 用法: $ rosed [pa ...

  5. poj1274 二分匹配

    今天复习二分匹配,A 了一道模板题. 二分匹配需要理解增广路的寻找.用dfs来更新最大匹配.注意一些点:赋初值:愚蠢地把==写成了= ; 然后match的记值;每个点都要重新走一遍. #include ...

  6. asp.net页面使用doPostBack的后台取值

    前台页面(aspx文件): --伪装按钮 <span onclick='__doPostBack("lkSend","key")'>发送</s ...

  7. Hibernate缓存机制 (2013-07-02 13:51:32)转载▼

    标签: java web hibernate 缓存 代码        分类: javaweb 缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访 ...

  8. iphone获取当前磁盘信息

    获取iphone磁盘总大小.已使用空间.空闲空间 [代码]悦德财富:https://www.yuedecaifu.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  9. 添加Sql作业,新建步骤出现:从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败,原因是出现以下错误:c001f011。的解决方法

    32位操作系统: 打开运行(命令提示符), 一.输入 cd c:\windows\system32 进入到c:\windows\system32路径中 二.输入 regsvr32 "C:\P ...

  10. ZOJ 2672 Fibonacci Subsequence(动态规划+hash)

    题意:在给定的数组里,寻找一个最长的序列,满足ai-2+ai-1=ai.并输出这个序列. 很容易想到一个DP方程 dp[i][j]=max(dp[k][i])+1. (a[k]+a[i]==a[j], ...