SparkStreaming基础
* SparkStreaming基础
打开之前构建好的Maven工程,如何构建?请参看SparkCore基础(二)的最后部分。
在SparkCore中,我们操作的数据都在RDD中,是Spark的一个抽象概念,也是一个抽象类,是由SparkContext对象sc转换得到的。
那么在SparkStreaming中,我们使用的Spark的StreamingContext对象,简称ssc。
我们本节内容以动手为基础,直接开始一些测试案例:具体的框架结构请参看官方文档,写的非常之详细。
SparkStreaming在Windows中使用IDEA的开发案例
WordCount在IDEA工具
首先导入相关依赖:

代码如下:

SparkStreaming与Kafka在IDEA工具
我们可以使用Flume+Kafka将数据实时转入到SparkStreaming分析进行分析,因为Flume和Kafka的集成在之前的章节中已经讲解过,所以此时只讲述如何将Kafka与SparkStreaming进行集成,首先导入依赖:

代码如下:注意红框内容

然后启动Kafka的相关服务:
启动Kafka Broker节点
$ bin/kafka-server-start.sh config/server.properties
创建Topic
$ bin/kafka-topics.sh --create --zookeeper z01:2181 --replication-factor 1 --partitions 1 --topic SparkTopic
查看一下有几个Topic
$ bin/kafka-topics.sh --list --zookeeper z01:2181
发布数据
$ bin/kafka-console-producer.sh --broker-list z01:9092 --topic SparkTopic
开启一个控制台消费者用于验证
$ bin/kafka-console-consumer.sh --zookeeper z01:2181 --topic SparkTopic --from-beginning
SparkStreaming统计录入的所有数据
你会发现之前我们统计的单词每过几秒都是新的统计,并没有把每次流入的数据进行汇总统计,那么,我们此时的目标是,你懂得:)
使用updateStateByKey将相同Key的数据的state状态进行汇总,顺便一提:hadoop,1里面的1其实就是一个state,之前我们也一直称之为count对吧,思维要扭转一下,毕竟,不是所有的数据分析统计都只是简单的加减乘除,用状态来描述,也是可以的。
统计实时的最新状态,代码如下:

SparkStreaming统计某一个时间范围内的所有数据
我们需要使用windows窗口滑动这样一个概念,比如,设定一个窗口的大小为30秒,每次我们统计的都是最近30秒的数据汇总,将Window窗口一直向某一个方向滑动,一次滑动指定的距离,进行统计即可,其实一个Window就好比是框住了一定范围时间内的batch,SparkStreaming默认将200ms的数据分为一个batch(可以暂且理解为一个数据块)
统计最近一段时间的状态,代码如下:

Spark与HBase的集成
首先导入HBase的相关依赖:

从HBase中读取数据,代码如下:

* 总结
通过一些常用的案例,你应该能够掌握SparkStreaming运行的基本原理和架构模型了,Spark的官方文档特别的相信,源码注释也非常详细,如有不太理解的地方,直接看源码和官方文档是最好的途径。
个人微博:http://weibo.com/seal13
QQ大数据技术交流群(广告勿入):476966007
作者:Z尽际
链接:https://www.jianshu.com/p/3f046697159c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SparkStreaming基础的更多相关文章
- SparkStreaming wordCountDemo基础案例
体现sparkStreaming的秒级准实时性,所以我们需要一个能够持续输入数据的东东 1.CentOS上下载nc 创建一个scala工程,导入相关pom依赖 <?xml version=&qu ...
- Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考
Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考 Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考. Job是什么? 首先, ...
- SparkStreaming流处理
一.Spark Streaming的介绍 1. 流处理 流式处理(Stream Processing).流式处理就是指源源不断的数据流过系统时,系统能够不停地连续计算.所以流式处理没有什么 ...
- SparkStreaming基本架构及使用
1.简介 Spark Streaming处理的数据流图: Spark Streaming在内部的处理机制是,接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处 ...
- 基于Java+SparkStreaming整合kafka编程
一.下载依赖jar包 具体可以参考:SparkStreaming整合kafka编程 二.创建Java工程 太简单,略. 三.实际例子 spark的安装包里面有好多例子,具体路径:spark-2.1.1 ...
- spark基础知识介绍(包含foreachPartition写入mysql)
数据本地性 数据计算尽可能在数据所在的节点上运行,这样可以减少数据在网络上的传输,毕竟移动计算比移动数据代价小很多.进一步看,数据如果在运行节点的内存中,就能够进一步减少磁盘的I/O的传输.在spar ...
- 【大数据】SparkStreaming学习笔记
第1章 Spark Streaming概述 1.1 Spark Streaming是什么 Spark Streaming用于流式数据的处理.Spark Streaming支持的数据输入源很多,例如:K ...
- 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
SparkStreaming-Kafka-Redis-集成-基础参考资料 Overview - Spark 2.2.0 Documentation Spark Streaming + Kafka In ...
- 【sparkStreaming】SparkStream的创建
DStream编程数据模型 DStream(Discretized Stream)作为Spark Streaming的基础抽象,它代表持续性的数据流. 这些数据流既可以通过外部输入源赖获取,也可以通过 ...
随机推荐
- Collection 和 Collections 的差别?
Collection 是 java.util 下的接口,它是各种集合的父接口,继承于它的 接口主要有 Set 和 List:Collections 是个 java.util 下的类.是针对集合的 帮助 ...
- cmd 下命令
tasklist 查看当前进程 taskkill /? 查看taskkill 的帮助信息 详情 cmd /? 查看cmd详情 color /? 查看颜色详情 比如 color 2 md d:\ji ...
- 【LeetCode】Palindrome Partitioning 解题报告
[题目] Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...
- node08---EJS模版
四.模板引擎 <a href="<%= url %>"><img src="<%= imageURL %>" alt= ...
- 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍
以作备份,来源http://jiasuhui.com/archives/178954 本文由“新智元”(微信ID:AI_era)编译,来源:dawn.cs.stanford.edu,编译:刘小芹 斯坦 ...
- bzoj1202: [HNOI2005]狡猾的商人(差分约束)
1202: [HNOI2005]狡猾的商人 题目:传送门 题解: 据说是带权并查集!蒟蒻不会啊!!! 可是听说lxj大佬用差分约束A了,于是开始一通乱搞. 设s[i]为前i个月的总收益,那么很容易就可 ...
- HTML5与CSS3权威指南之CSS3学习记录
title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...
- luogu 1351 联合权值
联合权值 题目大意 给你一个图,有\(n-1\)条边,距离均为\(1\),每距离为\(2\)的两个点的联合权值为\(W_u \times W_v\),求联合权值的最大值和联合权值总和. solutio ...
- Java获取环境变量和系统属性
Java获取服务器环境变量和JVM系统变量 当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty() ...
- AbstractQueuedSynchronizer中CAS的疑惑
这段代码是AQS框架中将当前节点入队的操作. Node pred = tail; if (pred != null) { node.prev = pred; if (compareAndSetTail ...