一、部署应用程序

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:部署、升级和监控应用程序的更多相关文章

  1. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  2. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  3. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化

    第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...

  4. 1.Spark Streaming另类实验与 Spark Streaming本质解析

    1 Spark源码定制选择从Spark Streaming入手  我们从第一课就选择Spark子框架中的SparkStreaming. 那么,我们为什么要选择从SparkStreaming入手开始我们 ...

  5. 4. Spark Streaming解析

    4.1 初始化StreamingContext import org.apache.spark._ import org.apache.spark.streaming._ val conf = new ...

  6. Spark学习之Spark Streaming

    一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...

  7. [Spark Streaming_1] Spark Streaming 概述

    0. 说明 Spark Streaming 介绍 && 在 IDEA 中编写 Spark Streaming 程序 1. Spark Streaming 介绍 Spark Stream ...

  8. Spark Streaming任务延迟监控及告警

    概述 StreamingListener 是针对spark streaming的各个阶段的事件监听机制. StreamingListener接口 //需要监听spark streaming中各个阶段的 ...

  9. Spark Streaming Listener 监控批次处理延迟进行告警

    概述 StreamingListener 是针对spark streaming的各个阶段的事件监听机制. StreamingListener接口 //需要监听spark streaming中各个阶段的 ...

随机推荐

  1. 《JAVA高并发编程详解》-七种单例模式

  2. 使用Nginx的X-Accel-Redirect实现大文件下载

    在实现文件下载功能时通常有以下几种方式: 1.直接给出下载地址,例如http://****.com/test/test.rar,这种是最直接的方式,任何人都可以下载,无法控制用户的权限. 2.验证权限 ...

  3. Storm大数据实时计算

    大数据也是构建各类系统的时候一种全新的思维,以及架构理念,比如Storm,Hive,Spark,ZooKeeper,HBase,Elasticsearch,等等 storm,在做热数据这块,如果要做复 ...

  4. XML和Json的特点

    Xml特点: 1.有且只有一个根节点: 2.数据传输的载体 3.所有的标签都需要自定义 4.是纯文本文件 Json(JavaScript Object Notation)特点: json分为两种格式: ...

  5. python 代码中log表示含义

    log表示以e为底数的对数函数符号.其验证代码如下: a=np.log(np.e )print(a)print(np.e)

  6. 利用position absolute使div居中

    外层DIV{position:realtive}内层DIV{positon:absolute;top:50%;left:50%;margin-top:-100px;margin-left:-150px ...

  7. 小程序的openid和公众号的openid是否一致

    早期的产品只用了公众号,没有注册开放平台(没有unionid).然后现在需要上线小程序,这种情况下,企业是同一个企业的,但是公众号的openid和小程序的openid是否一致呢? 我来回答你这个问题: ...

  8. 如何利用python教程判断一个 IP 在不在线?

    假设今天老板给我们一个任务,让我们判断一下一个 IP 在不在线.我们随手用 python 写一个 ping IP 的代码: import os host = input('请输入要检测的 IP : ' ...

  9. 「资料分享」理解uboot要看哪些书

    最开始是看的韦东山老师的视频,确实很不错,不过总感觉是不够深入扎实,还是想自己看看书,就总结搜罗下,以供参考 学习交流可以添加 微信读者交流①群 (添加微信:coderAllen) 程序员技术交流①群 ...

  10. 快速部署ldap服务

    快速部署ldap服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LDAP概述 .什么是目录服务 ()目录是一类为了浏览和搜索数据二十几的特殊的数据库,例如:最知名的的微软公 ...