Spark-Spark Streaming(4)-- 部署、监控

如果觉得不错,请给博主点个赞呗!!! 谢谢
如果觉得不错,请给博主点个赞呗!!! 谢谢
如果觉得不错,请给博主点个赞呗!!! 谢谢

目录

1、部署应用程序

1.1、要求

1.2、更新应用程式代码

2、监控


1、部署应用程序

本节讨论部署 Spark Streaming 应用程序的步骤。

1.1、要求

要运行 Spark Streaming 应用程序,您需要具备以下功能。

  • Cluster with a cluster manager - 这是任何 Spark 应用程序的一般需求,并在部署指南中进行了详细讨论。
  • Package the application JAR - 必须将流式应用程序编译到 JAR 中。如果使用 Spark-submit 启动应用程序,则不需要在 JAR 中提供 Spark 和 Spark Streaming。但是,如果您的应用程序使用高级源(例如 Kafka) ,那么您必须将它们链接到的额外artifact 以及它们的依赖项打包到用于部署应用程序的 JAR 中。例如,使用 kafkails 的应用程序必须在应用程序 JAR 中包含 spark-streaming-kafka-0-10 _ 2.12及其所有可传递的依赖项。
  • Configuring sufficient memory for the executors - 由于接收到的数据必须存储在内存中,因此必须为执行器配置足够的内存来保存接收到的数据。请注意,如果您正在执行10分钟的窗口操作,系统必须至少保留10分钟的数据在内存中。因此,应用程序的内存需求取决于其中使用的操作。
  • Configuring checkpointing - 配置检查点——如果流应用程序需要它,那么 Hadoop API 兼容的容错存储(如 HDFS、 S3等)中的一个目录必须配置为检查点目录和流应用程序,以便检查点信息可用于故障恢复。有关更多细节,请参阅检查点部分
  • Configuring automatic restart of the application driver  -为了从驱动程序故障中自动恢复,用于运行流应用程序的部署基础设施必须监视驱动程序进程,并在驱动程序故障时重新启动。不同的集群管理器有不同的工具来实现这一点。
    • Spark Standalone -Spark应用程序可以提交到Spark Standalone集群中运行(参见集群部署模式),也就是说,应用程序本身运行在其中一个工作节点上。此外,可以指示Standalone集群管理器来监督驱动程序,如果驱动程序由于非零退出码或运行驱动程序的节点失败而失败,则重新启动它。更多详细信息请参见Spark Standalone指南中的集群模式和监督。
    • YARN -Yarn支持自动重新启动应用程序的类似机制。更多细节请参考YARN文档。
    • Mesos -在Mesos中, Marathon已经被用来实现这一目标。
  • Configuring write-ahead logs -自从 Spark 1.2以来,我们已经引入了提前写日志,以实现强大的容错保证。如果启用,则从接收方接收的所有数据都将写入配置检查点目录中的提前写入日志。这可以防止驱动程序恢复时的数据丢失,从而确保零数据丢失(在容错语义一节中详细讨论)。可以通过将配置参数 spark.streaming.receiver.writeAheadLog.enable 设置为 true 来启用。然而,这些更强大的语义可能会以单个接收者的接收吞吐量为代价。这可以通过并行运行更多的接收机来纠正,以增加总吞吐量。此外,建议在启用写前日志时禁用在 Spark 中复制接收到的数据,因为日志已经存储在复制存储系统中。这可以通过将输入流的存储级别设置为 StorageLevel.MEMORY _ and _ disk _ ser 来实现。当使用 S3(或任何不支持刷新的文件系统)进行预写日志时,请记住启用 spark.streaming.driver.writeAheadLog.closeFileAfterWrite 和 spark.streamreceies.writeaheadlog.closefileafterwrite。更多详细信息请参阅Spark Streaming配置。注意,当启用 i/o 加密时,Spark 不会加密写入提前写入日志的数据。如果需要对预写日志数据进行加密,则应将其存储在本机支持加密的文件系统中。
  • Setting the max receiving rate  -如果群集资源不够大,无法让流式传输应用程序尽快处理接收到的数据,则可以通过以记录/秒为单位设置最大速率限制来限制接收器的速率。 请参阅配置参数spark.streaming.receiver.maxRate(用于接收器)和spark.streaming.kafka.maxRatePerPartition(用于直接Kafka方法)。 在Spark 1.5中,我们引入了一个称为背压的功能,该功能消除了设置此速率限制的需要,因为Spark Streaming会自动计算出速率限制,并在处理条件发生变化时动态调整它们。 可以通过将配置参数spark.streaming.backpressure.enabled设置为true来启用此背压。

1.2、更新应用程式代码

如果运行中的 Spark Streaming 应用程序需要使用新的应用程序代码进行升级,那么有两种可能的机制。

  • 升级后的 Spark Streaming 应用程序将与现有应用程序并行启动和运行。一旦新的一个(接收与旧数据相同的数据)已经预热,并准备好黄金时间,旧的一个可以被带下来。注意,对于支持将数据发送到两个目的地(即早期和升级的应用程序)的数据源,可以这样做。
  • 现有的应用程序被优雅地关闭(请参阅 StreamingContext.stop (...)或 JavaStreamingContext.stop (...)以获得优雅的关闭选项) ,确保在关闭之前完全处理已接收的数据。然后可以启动升级后的应用程序,这将从早期应用程序中断的相同位置开始处理。请注意,这只能通过支持源端缓冲(如 Kafka)的输入源来实现,因为在前一个应用程序关闭且升级的应用程序尚未启动时,需要缓冲数据。无法从升级前代码的早期检查点信息重新启动。检查点信息本质上包含序列化的 Scala/Java/Python 对象,尝试用新的、修改过的类反序列化对象可能会导致错误。在这种情况下,要么使用不同的检查点目录启动升级后的应用程序,要么删除以前的检查点目录。

2、监控

除了 Spark 的监控功能,还有其他特定于 Spark Streaming 的功能。当使用 StreamingContext 时,Spark web UI 显示了一个附加的 Streaming 选项卡,它显示了运行接收器(接收器是否处于活动状态、接收记录的数量、接收器错误等)和已完成批处理(批处理时间、排队延迟等)的统计信息。这可用于监视流应用程序的进度。

在 web UI 中,以下两个指标尤其重要:

  • Processing Time -  处理每批数据所需的时间
  • Scheduling Delay - 一个批处理在队列中等待先前批处理完成的时间

如果批处理时间始终大于批处理时间间隔,并且/或者排队延迟不断增加,则表明系统无法在批处理产生的同时快速处理批处理,并且落后了。在这种情况下,可以考虑减少批处理时间。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值