输入DStream之基础数据源以及基于HDFS的实时wordcount程序
基于HDFS文件的实时计算,其实就是,监控一个HDFS目录,只要其中有新文件出现,就实时处理,相当于处理实时的文件流。
streamingContext.fileStream<KeyClass,ValueClass,InputFormatClass>(dataDirectory)
streamingContext.fileStream[KeyClass,ValueClass,InputFormatClass](dataDirectory)
Spark Streaming会监控指定的HDFS目录,并且处理出现在目录中的文件。
所有放入HDFS目录中的文件,都必须有相同的格式,必须使用移动或者重命名的方式,将文件移入目录,一旦处理之后,文件的内容即使改变,也不会再处理了。
基于HDFS文件的数据源是没有Receiver的,因此也不会占用一个cpu core。
一、Java方式
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.JavaStreamingContext;
import scala.Tuple2;
/**
* 基于HDFS文件的
*/
public class JavaHDFSWordCount {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("JavaSparkStreaming");
JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(5));
//首先,使用JavaStreamingContext的textFileStream()方法,针对HDFS目录创建输入数据流
JavaDStream<String> lines = jssc.textFileStream("hdfs://spark1:9000/wordcount_dir");
JavaDStream<String> words = lines.flatMap(
(FlatMapFunction<String, String>) s -> {
return null;
//return Arrays.asList(line.spilt(" "));
}
);
JavaPairDStream<String, Integer> pairs = words.mapToPair(
(PairFunction<String, String, Integer>) word -> new Tuple2<String, Integer>(word, 1)
);
JavaPairDStream<String, Integer> wordCounts = pairs.reduceByKey(
(Function2<Integer, Integer, Integer>) (v1, v2) -> v1 + v2
);
wordCounts.print();
jssc.start();
jssc.awaitTermination();
jssc.close();
}
}
二、Scala方式
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object ScalaHDFSWordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[2]").setMaster("ScalaHDFSWordCount")
//scala中,创建的是StreamingContext
val ssc = new StreamingContext(conf, Seconds(5))
//必须保证有该目录,否则报错
val lines = ssc.textFileStream("hdfs://spark1:9000/wordcount_dir")
val words = lines.flatMap {
_.split(" ")
}
val pairs = words.map {
word => (word, 1)
}
val wordCounts = pairs.reduceByKey {
_ + _
}
wordCounts.print()
ssc.start()
ssc.awaitTermination()
}
}
输入DStream之基础数据源以及基于HDFS的实时wordcount程序的更多相关文章
- 52、Spark Streaming之输入DStream之基础数据源以及基于HDFS的实时wordcount程序
一.概述 1.Socket:之前的wordcount例子,已经演示过了,StreamingContext.socketTextStream() 2.HDFS文件 基于HDFS文件的实时计算,其实就是, ...
- 55、Spark Streaming:updateStateByKey以及基于缓存的实时wordcount程序
一.updateStateByKey 1.概述 SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这 ...
- 53、Spark Streaming:输入DStream之Kafka数据源实战
一.基于Receiver的方式 1.概述 基于Receiver的方式: Receiver是使用Kafka的高层次Consumer API来实现的.receiver从Kafka中获取的数据都是存储在Sp ...
- 轻装上阵Flink--在IDEA上开发基于Flink的实时数据流程序
前言 本文介绍如何在IDEA上快速开发基于Flink框架的DataStream程序.先直接上手! 环境清单 案例是在win7运行.安装VirtualBox,在VirtualBox上安装Centos操作 ...
- 在Spark shell中基于HDFS文件系统进行wordcount交互式分析
Spark是一个分布式内存计算框架,可部署在YARN或者MESOS管理的分布式系统中(Fully Distributed),也可以以Pseudo Distributed方式部署在单个机器上面,还可以以 ...
- 09、高级编程之基于排序机制的wordcount程序
package sparkcore.java; import java.util.Arrays; import java.util.Iterator; import org.apache.spark. ...
- 输入DStream和Receiver详解
输入DStream代表了来自数据源的输入数据流.在之前的wordcount例子中,lines就是一个输入DStream(JavaReceiverInputDStream),代表了从netcat(nc) ...
- 51、Spark Streaming之输入DStream和Receiver详解
输入DStream代表了来自数据源的输入数据流.在之前的wordcount例子中,lines就是一个输入DStream(JavaReceiverInputDStream), 代表了从netcat(nc ...
- StreamingContext详解,输入DStream和Reveiver详解
StreamingContext详解,输入DStream和Reveiver详解 一.StreamingContext详解 1.1两种创建StreamingContext的方式 1.2SteamingC ...
随机推荐
- css浅谈
一 CSS文字属性: color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-size : 9pt; /*文字大小*/ ...
- C#扫盲篇(一):反射机制--情真意切的说
在一线编码已有多年,积累了不少非常实用的技能,最近的更新会逐步的分享出来,希望能帮助到还有一丢丢喜欢.Net的朋友,当然这些都比较适合入门选手,虽然自己已是个精通抄代码的老猿,但技术造诣仍是渣渣. 犹 ...
- mac强制关闭应用
原文链接http://zhhll.icu/2020/08/13/Mac/%E5%BC%BA%E5%88%B6%E7%BB%88%E6%AD%A2%E5%BA%94%E7%94%A8/ 有时候使用Mac ...
- WPF TreeView Indent 减少节点的缩进
www.swack.cn - 原文链接:WPF TreeView Indent 减少节点的缩进 问题 最近一个需求,需要在界面中实现Windows资源管理器TreeView的界面.但是我发现,我做出的 ...
- 【C++】《C++ Primer 》第十七章
第十七章 标准库特殊设施 一.tuple类型 tuple是类似pair的模板,每个pair的成员类型都不相同,但每个pair都恰好有两个成员. 不同的tuple类型的成员类型也不相同,一个tuple可 ...
- LeetCode662 二叉树最大宽度
给定一个二叉树,编写一个函数来获取这个树的最大宽度.树的宽度是所有层中的最大宽度.这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空. 每一层的宽度被定义为两个端点(该层 ...
- Azure Table Storage(一) : 简单介绍
Azure Table Storage是什么: Azure Table Storage是隶属于微软Azure Storage这个大服务下的一个子服务, 这个服务在Azure上算是老字号了, 个人大概在 ...
- CopyOnWriteArrayList 读写分离,弱一致性
为什么会有CopyOnWriteArrayList? 我们知道ArrayList和LinkedList实现的List都是非线程安全的,于是就有了Vector,它是基于ArrayList的线程安全集合, ...
- 【Linux】使用 iperf 测试 Linux 服务器带宽
iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...
- ctfhub技能树—信息泄露—git泄露—Log
什么是git泄露? 当前大量开发人员使用git进行版本控制,对站点自动部署.如果配置不当,可能会将.git文件夹直接部署到线上环境.这就引起了git泄露漏洞. 打开靶机环境 查看网页内容 使用dirs ...