61、Spark Streaming:部署、升级和监控应用程序
一、部署应用程序
1、流程
1、有一个集群资源管理器,比如standalone模式下的Spark集群,Yarn模式下的Yarn集群等。 2、打包应用程序为一个jar包。 3、为executor配置充足的内存,因为Receiver接受到的数据,是要存储在Executor的内存中的,所以Executor必须配置足够的内存来保存接受到的数据。要注意的是,
如果你要执行窗口长度为10分钟的窗口操作,那么Executor的内存资源就必须足够保存10分钟内的数据,因此内存的资源要求是取决于你执行的操作的。 4、配置checkpoint,如果你的应用程序要求checkpoint操作,那么就必须配置一个Hadoop兼容的文件系统(比如HDFS)的目录作为checkpoint目录. 5、配置driver的自动恢复,如果要让driver能够在失败时自动恢复,之前已经讲过,一方面,要重写driver程序,一方面,要在spark-submit中添加参数。
2、部署应用程序:启用预写日志机制
预写日志机制,简写为WAL,全称为Write Ahead Log。从Spark 1.2版本开始,就引入了基于容错的文件系统的WAL机制。如果启用该机制,Receiver接收到的
所有数据都会被写入配置的checkpoint目录中的预写日志。这种机制可以让driver在恢复的时候,避免数据丢失,并且可以确保整个实时计算过程中,零数据丢失。 要配置该机制,首先要调用StreamingContext的checkpoint()方法设置一个checkpoint目录。然后需要将spark.streaming.receiver.writeAheadLog.enable参数设置为true。 然而,这种极强的可靠性机制,会导致Receiver的吞吐量大幅度下降,因为单位时间内,有相当一部分时间需要将数据写入预写日志。如果又希望开启预写日志机制,
确保数据零损失,又不希望影响系统的吞吐量,那么可以创建多个输入DStream,启动多个Rceiver。 此外,在启用了预写日志机制之后,推荐将复制持久化机制禁用掉,因为所有数据已经保存在容错的文件系统中了,不需要在用复制机制进行持久化,保存一份副本了。
只要将输入DStream的持久化机制设置一下即可,persist(StorageLevel.MEMORY_AND_DISK_SER)。(之前讲过,默认是基于复制的持久化策略,_2后缀)
3、部署应用程序:设置Receiver接收速度
如果集群资源有限,并没有大到,足以让应用程序一接收到数据就立即处理它,Receiver可以被设置一个最大接收限速,以每秒接收多少条单位来限速。 spark.streaming.receiver.maxRate和spark.streaming.kafka.maxRatePerPartition参数可以用来设置,前者设置普通Receiver,后者是Kafka Direct方式。 Spark 1.5中,对于Kafka Direct方式,引入了backpressure机制,从而不需要设置Receiver的限速,Spark可以自动估计Receiver最合理的接收速度,并根据
情况动态调整。只要将spark.streaming.backpressure.enabled设置为true即可。 在企业实际应用场景中,通常是推荐用Kafka Direct方式的,特别是现在随着Spark版本的提升,越来越完善这个Kafka Direct机制。优点:1、不用receiver,
不会独占集群的一个cpu core; 2、有backpressure自动调节接收速率的机制; 3、....。
二、升级应用程序
由于Spark Streaming应用程序都是7 * 24小时运行的。因此如果需要对正在运行的应用程序,进行代码的升级,那么有两种方式可以实现: 1、升级后的Spark应用程序直接启动,先与旧的Spark应用程序并行执行。当确保新的应用程序启动没问题之后,就可以将旧的应用程序给停掉。但是要注意的是,
这种方式只适用于,能够允许多个客户端读取各自独立的数据,也就是读取相同的数据。 2、小心地关闭已经在运行的应用程序,使用StreamingContext的stop()方法,可以确保接收到的数据都处理完之后,才停止。然后将升级后的程序部署上去,启动。
这样,就可以确保中间没有数据丢失和未处理。因为新的应用程序会从老的应用程序未消费到的地方,继续消费。但是注意,这种方式必须是支持数据缓存的数据源才可以,
比如Kafka、Flume等。如果数据源不支持数据缓存,那么会导致数据丢失。 注意:配置了driver自动恢复机制时,如果想要根据旧的应用程序的checkpoint信息,启动新的应用程序,是不可行的。需要让新的应用程序针对新的checkpoint目录启动,
或者删除之前的checkpoint目录。
三、监控应用程序
当Spark Streaming应用启动时,Spark Web UI会显示一个独立的streaming tab,会显示Receiver的信息,比如是否活跃,接收到了多少数据,是否有异常等;
还会显示完成的batch的信息,batch的处理时间、队列延迟等。这些信息可以用于监控spark streaming应用的进度。 Spark UI中,以下两个统计指标格外重要:
1、处理时间——每个batch的数据的处理耗时
2、调度延迟——一个batch在队列中阻塞住,等待上一个batch完成处理的时间 如果batch的处理时间,比batch的间隔要长的话,而且调度延迟时间持续增长,应用程序不足以使用当前设定的速率来处理接收到的数据,此时,
可以考虑增加batch的间隔时间。
61、Spark Streaming:部署、升级和监控应用程序的更多相关文章
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化
第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...
- 1.Spark Streaming另类实验与 Spark Streaming本质解析
1 Spark源码定制选择从Spark Streaming入手 我们从第一课就选择Spark子框架中的SparkStreaming. 那么,我们为什么要选择从SparkStreaming入手开始我们 ...
- 4. Spark Streaming解析
4.1 初始化StreamingContext import org.apache.spark._ import org.apache.spark.streaming._ val conf = new ...
- Spark学习之Spark Streaming
一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...
- [Spark Streaming_1] Spark Streaming 概述
0. 说明 Spark Streaming 介绍 && 在 IDEA 中编写 Spark Streaming 程序 1. Spark Streaming 介绍 Spark Stream ...
- Spark Streaming任务延迟监控及告警
概述 StreamingListener 是针对spark streaming的各个阶段的事件监听机制. StreamingListener接口 //需要监听spark streaming中各个阶段的 ...
- Spark Streaming Listener 监控批次处理延迟进行告警
概述 StreamingListener 是针对spark streaming的各个阶段的事件监听机制. StreamingListener接口 //需要监听spark streaming中各个阶段的 ...
随机推荐
- 《JAVA高并发编程详解》-七种单例模式
- 使用Nginx的X-Accel-Redirect实现大文件下载
在实现文件下载功能时通常有以下几种方式: 1.直接给出下载地址,例如http://****.com/test/test.rar,这种是最直接的方式,任何人都可以下载,无法控制用户的权限. 2.验证权限 ...
- Storm大数据实时计算
大数据也是构建各类系统的时候一种全新的思维,以及架构理念,比如Storm,Hive,Spark,ZooKeeper,HBase,Elasticsearch,等等 storm,在做热数据这块,如果要做复 ...
- XML和Json的特点
Xml特点: 1.有且只有一个根节点: 2.数据传输的载体 3.所有的标签都需要自定义 4.是纯文本文件 Json(JavaScript Object Notation)特点: json分为两种格式: ...
- python 代码中log表示含义
log表示以e为底数的对数函数符号.其验证代码如下: a=np.log(np.e )print(a)print(np.e)
- 利用position absolute使div居中
外层DIV{position:realtive}内层DIV{positon:absolute;top:50%;left:50%;margin-top:-100px;margin-left:-150px ...
- 小程序的openid和公众号的openid是否一致
早期的产品只用了公众号,没有注册开放平台(没有unionid).然后现在需要上线小程序,这种情况下,企业是同一个企业的,但是公众号的openid和小程序的openid是否一致呢? 我来回答你这个问题: ...
- 如何利用python教程判断一个 IP 在不在线?
假设今天老板给我们一个任务,让我们判断一下一个 IP 在不在线.我们随手用 python 写一个 ping IP 的代码: import os host = input('请输入要检测的 IP : ' ...
- 「资料分享」理解uboot要看哪些书
最开始是看的韦东山老师的视频,确实很不错,不过总感觉是不够深入扎实,还是想自己看看书,就总结搜罗下,以供参考 学习交流可以添加 微信读者交流①群 (添加微信:coderAllen) 程序员技术交流①群 ...
- 快速部署ldap服务
快速部署ldap服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LDAP概述 .什么是目录服务 ()目录是一类为了浏览和搜索数据二十几的特殊的数据库,例如:最知名的的微软公 ...