第82课:案例动手实战并在电光石火间理解其工作原理 Ok-2

内容


1、Spark Streaming 动手实战演示 
2、闪电般理解Spark Streaming原理 
3、案例动手实战并在电光石火间理解其工作原理

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

(1)什么是Spark Streaming?

  Spark Streaming 类似于 Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming 有高吞吐量和容错能力强这两个特点。Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如:map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。另外 Spark Streaming 也能和 MLlib(机器学习)以及 Graphx 完美融合。 
在 Spark Streaming 中,处理数据的单位是一批而不是单条,而数据采集却是逐条进行的,因此 Spark Streaming 系统需要设置间隔使得数据汇总到一定的量后再一并操作,这个间隔就是批处理间隔。批处理间隔是 Spark Streaming 的核心概念和关键参数,它决定了 Spark Streaming 提交作业的频率和数据处理的延迟,同时也影响着数据处理的吞吐量和性能。 
平时用户都有网上购物的经历,用户在网站上进行的各种操作通过Spark Streaming流处理技术可以被监控,用户的购买爱好、关注度、交易等可以进行行为分析。还可以用在如:垃圾邮件监控过滤、交通监控、网络监控、生产监控的背后都是Spark Streaming发挥强大流处理的地方。

(2)海量数据价值一般怎么定义?

  所有没经过流处理的数据都是无效数据或没有价值的数据;数据产生之后立即处理产生的价值是最大的,数据放置越久或越滞后其使用价值越低。 
  以前的电商公司浪费了大量的数据,他们只是收集海量的数据却没有处理,通过数据流技术让电商网站的各种数据流动起来,通过实时流动的数据及时分析、挖掘出各种有价值的数据;例如说:在还没有完成购物的时候就可以推荐出类似的各种商品来供用户选择,这样极大的节省了顾客的挑选时间。并且还可以记住用户的偏好,依次向顾客推荐更多的喜欢的商品(我是深受其害,总是点进去。

(3)SparkStreaming 与 Hadoop MR、Storm的比较

  Spark Streaming是一个准实时流处理框架,而Hadoop MR是一个离线、批处理框架;很显然,在数据的价值性角度,Spark Streaming完胜于Hadoop MR。Spark Streaming处理响应时间一般以分钟为单位,也就是说处理实时数据的延迟时间是秒级别的;Storm是一个实时流处理框架,处理响应是毫秒级的。所以在流框架选型方面要看具体业务场景。需要澄清的是现在很多人认为Spark Streaming流处理运行不稳定、数据丢失、事务性支持不好等等,那是因为很多人不会驾驭Spark Streaming及Spark本身。

(4)SparkStreaming的优缺点

优点 
  1. Spark Streaming 内部的实现和调度方式高度依赖 Spark 的 DAG 调度器和 RDD,这就决定了 Spark Streaming 的设计初衷必须是粗粒度方式的,同时,由于 Spark 内部调度器足够快速和高效,可以快速地处理小批量数据,这就获得准实时的特性。 
  2. Spark Streaming 的粗粒度执行方式使其确保“处理且仅处理一次”的特性,同时也可以更方便地实现容错恢复机制。 
  3. 由于 Spark Streaming 的 DStream 本质是 RDD 在流式数据上的抽象,因此基于 RDD 的各种操作也有相应的基于 DStream 的版本,这样就大大降低了用户对于新框架的学习成本,在了解 Spark 的情况下用户将很容易使用 Spark Streaming。 
  4. 由于 DStream 是在 RDD 上的抽象,那么也就更容易与 RDD 进行交互操作,在需要将流式数据和批处理数据结合进行分析的情况下,将会变得非常方便。 
缺点 
  1. Spark Streaming 的粗粒度处理方式也造成了不可避免的延迟。在细粒度处理方式下,理想情况下每一条记录都会被实时处理,而在 Spark Streaming 中,数据需要汇总到一定的量后再一次性处理,这就增加了数据处理的延迟,这种延迟是由框架的设计引入的,并不是由网络或其他情况造成的。 
  2. Spark Streaming 当前版本稳定性不是很好。 
总而言之,Spark Streaming 为我们提供了一种崭新的流式处理框架,相信未来随着 Spark Streaming 会在易用性、稳定性以及其他方面有很大的提升。

(5)SparkStreaming企业级最佳实践 

Kafka业界认同最主流的分布式消息框架,此框架即符合消息广播模式又符合消息队列模式。

Kafka内部使用的技术

1.Cache

2. Interface

3. Persistence(默认最大持久化一周)

4.Zero-Copy技术让Kafka每秒吞吐量几百兆,而且数据只需要加载一次到内核提供其他应用程序使用 外部各种源数据推进(Push)Kafka,然后再通过Spark Streaming抓取(Pull)数据,抓取的数据量可以根据自己的实际情况确定每一秒中要处理多少数据。

二:通过Spark Streaming动手实战wordCount实例

这里是运行一个Spark Streaming的程序:统计这个时间段内流进来的单词出现的次数. 它计算的是:他规定的时间段内每个单词出现了多少次。 
1.先启动下Spark集群之后按照官网API进行试验: 

 è¿éåå¾çæè¿°

2.但是此时我的程序出了一个错,关于Spark Streaming 的Exception in thread “streaming-job-executor-0” 

è¿éåå¾çæè¿° 

è¿éåå¾çæè¿°

此时解决的方法:首先进入Spark的web ui 查看core是否大于等于2个,因为Spark Streaming程序在运行的时候最少需要两个core,一个用来接收数据,一个用来输出数据。然后是在集群中修改core的个数。 

è¿éåå¾çæè¿° 

è¿éåå¾çæè¿°

3.此时重新运行程序可得出下面结果说明你成功啦!! 
这里写图片描述 

在没有输入数据的时候输出为空: 

但是实际上,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. 
如果一秒内计算不完数据,就只能调优了.

 转载地址:Spark Streaming Hello World案例动手实战其工作原理

猜你喜欢

转载自blog.csdn.net/someby/article/details/87798317
OK