热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Spark3.0中新加的StructuredStreamingUI来进行异常分析

本文为阿里巴巴技术专家余根茂在社区发的一篇文章。StructuredStreaming最初是在ApacheSpark2.0中引入的,它已被证明是构建分布式流处理应用程序的最佳平台。


本文为阿里巴巴技术专家余根茂在社区发的一篇文章。


Structured Streaming 最初是在 Apache Spark 2.0 中引入的,它已被证明是构建分布式流处理应用程序的最佳平台。SQL/Dataset/DataFrame API 和 Spark 的内置函数的统一使得开发人员可以轻松实现复杂的需求,比如支持流聚合、流-流 Join 和窗口。自从 Structured Streaming 发布以来,社区的开发人员经常要求需要更好的方法来管理他们的流作业,就像我们在 Spark Streaming 中所做的那样。为此,Apache Spark 3.0 为 Structured Streaming 开发了一套全新的 UI。


新的 Structured Streaming UI 通过有用的信息和统计信息提供了一种简单的方法来监控所有流作业,从而使开发调试期间的故障排除变得更容易,在生产环境下通过实时度量更好的理解我们的作业瓶颈。新的 UI 提供了两组统计信息:





流查询作业的聚合信息;



流查询的详细统计信息,包括输入速率(Input Rate)、处理速率(Process Rate)、输入行数(Input Rows)、批处理持续时间(Batch Duration,)、操作持续时间等(Operation Duration)。


流查询作业的聚合信息


当开发人员提交一个流 SQL 查询时,这个作业的信息将在 Structured Streaming 选项卡中显示,其中包括活动的流查询和已完成的流查询。流查询的一些基本信息将在结果表中列出,包括查询名称、状态、ID、运行 ID、提交时间、查询持续时间、最后一个批次的 ID 以及聚合信息,如平均输入速率和平均处理速率。流查询的状态有三种:运行(RUNNING),完成(FINISHED)以及失败(FAILED)。所有完成的和失败的查询都在已完成的流查询列表中显示。表格中的错误列(Error)显示失败查询的异常详细信息。具体如下:





我们可以通过单击表格中 Run ID 那列链接查看流查询的详细统计信息。


详细统计信息


统计信息页面显示了包括输入/处理速率、延迟和详细操作持续时间在内的指标,这对于洞察流查询的状态非常有用,使我们能够轻松地调试流作业运行过程中的异常情况。页面如下所示:








上图包含以下的监控信息:





Input Rate: 所有数据源数据流入的聚合之后速度



Process Rate: Spark 处理所有数据源的处理速度,也是聚合后的结果。



Batch Duration: 每个批次处理时间。



Operation Duration: 执行各种操作所花费的时间,以毫秒为单位。


使用新的 UI 进行故障排除


在这一小节,让我们来看看如何使用 Structured Streaming 新的 UI 来进行异常排除。我们的测试代码如下:


import java.util.UUID


val bootstrapServers = ...

val topics = ...

val checkpointLocation = "/tmp/temporary-" + UUID.randomUUID.toString


val lines = spark

.readStream

.format("kafka")

.option("kafka.bootstrap.servers", bootstrapServers)

.option("subscribe", topics)

.load()

.selectExpr("CAST(value AS STRING)")

.as[String]


val wordCounts = lines.flatMap(_.split(" ")).groupBy("value").count()


val query = wordCounts.writeStream

.outputMode("complete")

.format("console")

.option("checkpointLocation", checkpointLocation)

.start()


由于处理能力不足而导致延迟增加


在第一种情况下,我们运行查询来尽快处理 Apache Kafka 中读取的数据。在每批中,流作业将处理 Kafka 中所有可用的数据。如果我们的资源不足以快速处理当前批次的数据,那么延迟将迅速增加。最直观的判断是输入行和批处理持续时间会呈线性增长。处理速率(Process Rate)提示流作业最多只能处理大约8,000条记录/秒。但是当前的输入速率大约是每秒 20,000 条记录。我们可以为流作业提供更多的执行资源,或者添加足够的分区来处理这些数据。





处理时间比较稳定但延迟很高


这种情况相比第一种情况是处理延迟没有持续增加,具体如下所示:





我们发现在相同的输入速率(Input Rate)下,处理速率(Process Rate)可以保持稳定。这意味着作业的处理能力足以处理输入数据。然而,每批处理的进程持续时间(即延迟)仍然高达20秒。高延迟的主要原因是每个批处理中有太多数据需要处理。通常我们可以通过增加作业的并行性来减少延迟。在为 Spark 任务添加了10个Kafka分区和10个核心之后,我们发现延迟大约为5秒——比20秒要好得多。





使用 Operation Duration 图来进行异常诊断


操作持续时间(Operation Duration)图以毫秒为单位显示执行各种操作所花费的时间。这对于了解每个批次的时间分布并简化故障排除很有用。让我们以Apache Spark 社区中的性能改进 SPARK-30915 为例进行说明。


在 SPARK-30915 工作之前,当压缩后的元数据日志变得很大时,压缩后的下一批处理要比其他批处理花费更多的时间。





经过对代码进行分析之后,发现并修复了不必要的读取压缩日志文件的问题,也就是 SPARK-30915 解决的,下图的运行时间确认了我们预期的效果:





未来工作


通过上面三个案例,新的 Structured Streaming UI 将帮助开发人员通过更加有用的流查询信息来更好地监视流作业。作为早期发布版本,新的 UI 仍在开发中,并将在以后的版本中进行改进,包括但不限于以下功能:





更多流查询执行细节:延迟数据(late data),水印(watermark),状态数据指标(state data metrics)等等。



Spark 历史服务器中支持 Structured Streaming UI。



针对异常情况的更明显的提示:比如延迟发生等。



本文翻译自: A look at the new Structured Streaming UI in Apache Spark™ 3.0
https://databricks.com/blog/2020/07/29/a-look-at-the-new-structured-streaming-ui-in-apache-spark-3-0.html





猜你喜欢






1、 Spark 背后的商业公司收购的 Redash 是个啥?




2、 马铁大神的 Apache Spark 十年回顾




3、 基于Apache Iceberg打造T+0实时数仓




4、 马蜂窝数据仓库的架构、模型与应用实践







过往记忆大数据微信群,请添加微信:
fangzhen0219,备注【进群】





推荐阅读
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 在使用sbt构建项目时,遇到了“对象apache不是org软件包的成员”的错误。本文详细分析了该问题的原因,并提供了有效的解决方案,包括检查依赖配置、清理缓存和更新sbt插件等步骤,帮助开发者快速解决问题。 ... [详细]
  • 大数据深度解读系列官网资源分享 ... [详细]
  • 9月10日,ShanghaiApacheSparkMeetup聚会在上海通茂大酒店成功举办。本次活动邀请到运营商和高校讲师来分享经验,主题覆盖了从Spark研发到应用的各种不同视角 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • Apache Hadoop HDFS QJournalProtocol 中 getJournalCTime 方法的应用与代码实例分析 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在MySQL中生成UUID可以通过以下SQL语句实现:生成大写的UUID使用 `SELECT UPPER(UUID())`;生成小写的UUID使用 `SELECT LOWER(UUID())`;生成标准格式的UUID使用 `SELECT UUID()`;若需生成去掉横杠的UUID,可以使用 `SELECT REPLACE(UUID(), '-', '')`。这些方法为数据标识提供了灵活且唯一的解决方案。 ... [详细]
author-avatar
桃Z夭夭
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有