[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理

本课内容提要:
(1)什么是流处理以及Spark Streaming主要介绍
(2)Spark Streaming初体验

一、什么是流处理以及Spark Streaming主要介绍

(Streaming),在大数据时代为数据流处理,就像水流一样,是数据流;既然是数据流处理,就会想到数据的流入、数据的加工、数据的流出。
日常工作、生活中数据来源很多不同的地方。例如:工业时代的汽车制造、监控设备、工业设备会产生很多源数据;信息时代的电商网站、日志服务器、社交网络、金融交易系统、黑客攻击、垃圾邮件、交通监控等;通信时代的手机、平板、智能设备、物联网等会产生很多实时数据,数据流无处不在。

在大数据时代Spark Streaming能做什么?
平时用户都有网上购物的经历,用户在网站上进行的各种操作通过Spark Streaming流处理技术可以被监控,用户的购买爱好、关注度、交易等可以进行行为分析。在金融领域,通过Spark Streaming流处理技术可以对交易量很大的账号进行监控,防止罪犯洗钱、财产转移、防欺诈等。在网络安全性方面,黑客攻击时有发生,通过Spark Streaming流处理技术可以将某类可疑IP进行监控并结合机器学习训练模型匹配出当前请求是否属于黑客攻击。其他方面,如:垃圾邮件监控过滤、交通监控、网络监控、工业设备监控的背后都是Spark Streaming发挥强大流处理的地方。

大数据时代,数据价值一般怎么定义?
所有没经过流处理的数据都是无效数据或没有价值的数据;数据产生之后立即处理产生的价值是最大的,数据放置越久或越滞后其使用价值越低。以前绝大多数电商网站盈利走的是网络流量(即用户的访问量),如今,电商网站不仅仅需要关注流量、交易量,更重要的是要通过数据流技术让电商网站的各种数据流动起来,通过实时流动的数据及时分析、挖掘出各种有价值的数据;比如:对不同交易量的用户指定用户画像,从而提供不同服务质量;准对用户访问电商网站板块爱好及时推荐相关的信息。

Spark Streaming VS Hadoop MR:
Spark Streaming是一个准实时流处理框架,而Hadoop MR是一个离线、批处理框架;很显然,在数据的价值性角度,Spark Streaming完胜于Hadoop MR。

Spark Streaming VS Storm:
Spark Streaming是一个准实时流处理框架,处理响应时间一般以分钟为单位,也就是说处理实时数据的延迟时间是秒级别的;Storm是一个实时流处理框架,处理响应是毫秒级的。所以在流框架选型方面要看具体业务场景。需要澄清的是现在很多人认为Spark Streaming流处理运行不稳定、数据丢失、事务性支持不好等等,那是因为很多人不会驾驭Spark Streaming及Spark本身。在Spark Streaming流处理的延迟时间方面,DT_Spark大数据梦工厂即将推出的Spark定制版本,会将Spark Streaming的延迟从秒级别推进到100毫秒之内甚至更少。

Spark Streaming优点:
1、提供了丰富的API,企业中能快速实现各种复杂的业务逻辑。
2、流入Spark Streaming的数据流通过和机器学习算法结合,完成机器模拟和图计算。
3、Spark Streaming基于Spark优秀的血统。

Spark Streaming能不能像Storm一样,一条一条处理数据?
Storm处理数据的方式是以条为单位来一条一条处理的,而Spark Streaming基于单位时间处理数据的,Spark Streaming能不能像Storm一样呢?答案是:可以的。
业界一般的做法是Spark Streaming和Kafka搭档即可达到这种效果,入下图:

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第1张图片

Kafka业界认同最主流的分布式消息框架,此框架即符合消息广播模式又符合消息队列模式。
Kafka内部使用的技术:
1、 Cache
2、 Interface
3、 Persistence(默认最大持久化一周)
4、 Zero-Copy技术让Kafka每秒吞吐量几百兆,而且数据只需要加载一次到内核提供其他应用程序使用
外部各种源数据推进(Push)Kafka,然后再通过Spark Streaming抓取(Pull)数据,抓取的数据量可以根据自己的实际情况确定每一秒中要处理多少数据。

二、Spark Streaming初体验

下面我们通过Spark Streaming动手实战WordCount实例。
这里是运行一个Spark Streaming的程序:统计这个时间段内流进来的单词出现的次数. 它计算的是:他规定的时间段内每个单词出现了多少次。
1、启动Spark集群:

这里写图片描述

我们从集群里面打开下官方网站

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第2张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第3张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第4张图片

接受这个数据进行加工,就是流处理的过程,刚才那个WordCount就是以1s做一个单位。刚才运行的时候,为什么没有结果呢?因为需要数据源。

2、获取数据源:

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第5张图片

新开一个命令终端,然后输入:

$ nc -lk 9999

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第6张图片

现在我们拷贝数据源进入运行:

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第7张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第8张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第9张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第10张图片

DStream和RDD关系:
没有输入数据会打印的是空结果:

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第11张图片

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第12张图片

但是实际上,Job的执行是Spark Streaming框架帮我们产生的和开发者自己写的Spark代码业务逻辑没有关系,而且Spark Streaming框架的执行时间间隔可以手动配置,如:每隔一秒钟就会产生一次Job的调用。所以在开发者编写好的Spark代码时(如:flatmap、map、collect),不会导致job的运行,job运行是Spark Streaming框架产生的,可以配置成每隔一秒中都会产生一次job调用。

Spark Streaming流进来的数据是DStream,但Spark Core框架只认RDD,这就产生矛盾了?
Spark Streaming框架中,作业实例的产生都是基于rdd实例来产生,你写的代码是作业的模板,即rdd是作业的模板,模板一运行rdd就会被执行,此时action必须处理数据。RDD的模板就是DStream离散流,RDD之间存在依赖关系,DStream就有了依赖关系,也就构成了DStream 有向无环图。这个DAG图,是模板。Spark Streaming只不过是在附在RDD上面一层薄薄的封装而已。你写的代码不能产生Job,只有框架才能产生Job。如果一秒内计算不完数据,就只能调优了。

[置顶] 第82课 Spark Streaming第一课 案例动手实战并在电光石火间理解其工作原理_第13张图片

总结:本节课我们了解什么是流处理以及Spark Streaming是如何进行流处理的,并且我们通过WordCount实例以纯实战的方式体验了Spark Streaming的威力,简单解析了DStream和RDD的关系,而这也是我们理解Spark Streaming非常重要的内容。后续我们会对这些内容进行深度解析。

版权声明:本文为博主原创文章,未经博主允许不得转载

你可能感兴趣的:(spark,大数据)