Apache Spark™ 3.0中全新的Structured Streaming UI

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: Spark 3.0中新的Structured Streaming UI会提供一些有用的信息和统计数据,以此来监视所有流作业,便于在开发调试过程中排除故障。同时,开发者还能够获得实时的监测数据,这能使生产流程更直观。

作者:Genmao Yu
原文链接:https://databricks.com/blog/2020/07/29/a-look-at-the-new-structured-streaming-ui-in-apache-spark-3-0.html

编译:邵嘉阳,计算机科学与技术大三在读,Apache Spark 中文社区志愿者


在Apache Spark 2.0中,我们迎来了Structured Streaming——构建分布式流处理应用的最佳平台。统一的API(SQL,Dataset和DataFrame)以及Spark内置的大量函数为开发者实现复杂的需求提供了便利,比如流的聚合,流-流连接和窗口支持。开发者们普遍喜欢通过Spark Streaming中的DStream的方式来管理他们的流,那么类似的功能什么时候能在Structured Streaming中得到实现呢?这不,在Apache Spark 3.0中,全新的Structured Streaming可视化UI和开发者们见面了。

新的Structured Streaming UI会提供一些有用的信息和统计数据,以此来监视所有流作业,便于在开发调试过程中排除故障。同时,开发者还能够获得实时的监测数据,这能使生产流程更直观。在这个新的UI中,我们会看到两组统计数据:1)流查询作业的聚合信息;2)流查询的具体统计信息,包括输入速率(Input Rate)、处理速率(Process Rate)、输入行数(Input Rows)、批处理持续时间(Batch Duration)和操作持续时间(Operation Duration)等。

流查询作业的聚合信息

开发者提交的流SQL查询会被列在Structured Streaming一栏中,包括正在运行的流查询(active)和已完成的流查询(completed)。结果表则会显示流查询的一些基本信息,包括查询名称、状态、ID、运行ID、提交时间、查询持续时间、最后一批的ID以及一些聚合信息,如平均输入速率和平均处理速率。流查询有三种状态:运行(RUNNING)、结束(FINISHED)、失败(FAILED)。所有结束(FINISHED)和失败(FAILED)的查询都在已完成的流式查询表中列出。Error列显示有关失败查询的详细信息。

1.png

我们可以通过单击Run ID链接查看流查询的详细信息。

详细的统计信息

Statistics页面显示了包括输入速率、处理速率、延迟和详细的操作持续时间在内的一系列指标。通过图表,开发者能全面了解已提交的流查询的状态,并且轻松地调试查询处理中的异常情况。
2.png
image.png

它包含以下指标:

  • Input Rate:数据到达的聚合速率(跨所有源)。
  • Process Rate: Spark处理数据的聚合速率(跨所有源)。
  • Batch Duration: 每一批的处理时间。
  • Operation Duration: 执行各种操作所花费的时间(以毫秒为单位)。
    被追踪的操作罗列如下:
  • addBatch:从源读取微批的输入数据、对其进行处理并将批的输出写入接收器所花费的时间。这应该会占用微批处理的大部分时间。
  • getBatch:准备逻辑查询以从源读取当前微批的输入所花费的时间。
  • getOffset:查询源是否有新的输入数据所花费的时间。
  • walCommit:将偏移量写入元数据日志。
  • queryPlanning:生成执行计划。

需要注意的是,由于数据源的类型不同,一个查询可能不会包含以上列出的所有操作。

使用UI解决流的性能故障

在这一部分中,我们会看到新的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中所有可用的数据。如果处理能力不足以处理批数据,那么延迟将迅速增加。最直观的现象是Input Rows和Batch Duration会呈线性上升。Process Rate提示流作业每秒最多只能处理大约8000条记录,但是当前的输入速率是每秒大约20000条记录。产生问题的原因一目了然,那么我们可以为流作业提供更多的执行资源,或者添加足够的分区来处理与生产者匹配所需的所有消费者。
5.png

稳定但高延迟

第二种情况下,延迟并没有持续增加,而是保持稳定,如下截图所示:
image.png

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

image.png

使用操作持续时间图进行故障排除

操作持续时间图(Operation Duration Chart)显示了执行各种操作所花费的时间(以毫秒为单位)。这对于了解每个批处理的时间分布和故障排除非常有用。让我们以Apache Spark社区中的性能改进“Spark-30915:在查找最新批处理ID时避免读取元数据日志文件“为例。
在某次查询中我们发现,当压缩后的元数据日志很大时,下一批要花费比其他批更多的时间来处理。

image.png

在进行代码审查之后,我们发现这是由对压缩日志文件的不必要读取造成的并进行了修复。新的操作持续时间图确认了我们想法:

image.png

未来的开发方向

如上所示,新的Structured Streaming UI将通过提供更有用的流查询信息帮助开发者更好地监视他们的流作业。作为早期发布版本,新的UI仍在开发中,并将在未来的发布中得到改进。有几个未来可以实现的功能,包括但不限于:

  • 更多的流查询执行细节:延迟数据,水印,状态数据指标等等。
  • 在Spark历史服务器中支持Structured Streaming UI。
  • 对于不寻常的情况有更明显的提示:发生延迟等。

近期活动:

8月24日开始 Spark 实战训练营正式开课
免费报名链接:https://developer.aliyun.com/learning/trainingcamp/spark/2


入群照片.png

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
相关文章
|
5天前
|
分布式计算 Apache 数据安全/隐私保护
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
12 1
|
11天前
|
存储 数据挖掘 数据处理
【破晓数据湖新时代!】巴别时代揭秘:Apache Paimon 打造 Streaming Lakehouse 的神奇之旅!
【8月更文挑战第9天】随着数据湖技术的发展,企业积极探索优化数据处理的新途径。Apache Paimon 作为一款高性能数据湖框架,支持流式与批处理,适用于实时数据分析。本文分享巴别时代使用 Paimon 构建 Streaming Lakehouse 的实践经验。Paimon 统一了数据存储与查询方式,对构建实时数据管道极具价值。
35 3
|
13天前
|
分布式计算 资源调度 测试技术
“Spark Streaming异常处理秘籍:揭秘如何驯服实时数据流的猛兽,守护你的应用稳如泰山,不容错过!”
【8月更文挑战第7天】Spark Streaming 是 Apache Spark 中的关键组件,用于实时数据流处理。部署时可能遭遇数据问题、资源限制或逻辑错误等异常。合理处理这些异常对于保持应用稳定性至关重要。基础在于理解其异常处理机制,通过 DSC 将数据流切分为 RDD。对于数据异常,可采用 try-catch 结构捕获并处理;资源层面异常需优化 Spark 配置,如调整内存分配;逻辑异常则需加强单元测试及集成测试。结合监控工具,可全面提升应用的健壮性和可靠性。
22 3
|
2月前
|
分布式计算 Java Scala
如何处理 Spark Streaming 的异常情况?
【6月更文挑战第16天】如何处理 Spark Streaming 的异常情况?
135 56
|
4天前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
31 0
|
1月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
76 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
1月前
|
分布式计算 监控 数据处理
Spark Streaming:解锁实时数据处理的力量
【7月更文挑战第15天】Spark Streaming作为Spark框架的一个重要组成部分,为实时数据处理提供了高效、可扩展的解决方案。通过其微批处理的工作模式和强大的集成性、容错性特性,Spark Streaming能够轻松应对各种复杂的实时数据处理场景。然而,在实际应用中,我们还需要根据具体需求和资源情况进行合理的部署和优化,以确保系统的稳定性和高效性。
|
1月前
|
分布式计算 Apache Spark
|
2月前
|
分布式计算 大数据 数据处理
Apache Spark在大数据处理中的应用
Apache Spark是大数据处理的热门工具,由AMPLab开发并捐赠给Apache软件基金会。它以内存计算和优化的执行引擎著称,提供比Hadoop更快的处理速度,支持批处理、交互式查询、流处理和机器学习。Spark架构包括Driver、Master、Worker Node和Executor,核心组件有RDD、DataFrame、Dataset、Spark SQL、Spark Streaming、MLlib和GraphX。文章通过代码示例展示了Spark在批处理、交互式查询和实时数据处理中的应用,并讨论了其优势(高性能、易用性、通用性和集成性)和挑战。【6月更文挑战第11天】
76 6
|
9月前
|
消息中间件 分布式计算 Kafka
195 Spark Streaming整合Kafka完成网站点击流实时统计
195 Spark Streaming整合Kafka完成网站点击流实时统计
58 0

推荐镜像

更多