EMR上如何进行流式SQL调试

简介: 本文将简单介绍EMR提供的一个流式SQL调试工具。

1.前言

从EMR-3.21.0版本开始,EMR正式发布了Spark Streaming SQL功能,支持使用Spark SQL进行流式数据处理。经过两个版本的迭代,不少用户反馈当使用SQL进行流式作业开发时,查询结果正确性的调试过程比较麻烦。当前,我们需要完成用户真实的数据流开发,才能在结果存储系统中查看结果是否正确。有些数据存储系统又不方便查看,例如Kafka。这里简单罗列几点不便于调试的问题:

  • 无法在控制台输出中直观看到SQL的执行结果,传统的需要在输出存储系统查看。
  • 数据是变化的:包括输入数据和输出结果都是不断变化的,无法方便看到每个批次的执行结果。
  • 每个批次执行的metrics也不方便查看,传统的需要在日志中查找。

除此外,还有一些高级功能也可以考虑到调试工具中,例如:

  • 脱离真实数据源的数据模拟功能。
  • 数据采样功能。

本文将介绍EMR提供的流式SQL调试功能,它可以很好地解决了SQL调试中的基本需求。高级调试功能也将会在后续的迭代中逐步放出。

:本功能将在EMR-3.23.0版本提供出来。

2.工具介绍

2.1 演示SQL

我想实现以下功能,将kafka的一个binlog主题同步到Kafka的另一个主题中。

CREATE TABLE rds_binlog
USING kafka
OPTIONS (
  kafka.bootstrap.servers='a.b.c.d:9092',
  subscribe='rds-binlog')

CREATE TABLE result_table
USING kafka
OPTIONS (
  kafka.bootstrap.servers='a.b.c.d:9092',
  subscribe='result-table')

CREATE SCAN rds_binlog_stream_read ON rds_binlog USING stream;

CREATE STREAM sync_rds_binlog 
OPTIONS(
triggerInterval=1000, 
checkpointLocation='/tmp/checkpoint/sync_rds_binlog') 
INSERT INTO result_table 
SELECT cast(value as string), * 
FROM rds_binlog_stream_read;

我现在不确定查询结果是不是符合预期,所以下面我就用到流式SQL的调试功能。上面的SQL需要做一点点修改,这里不能直接将查询结果写到“result_table”,而是改成调试表“stream_debug_table”。Spark会默认创建出这个表。即改成如下:

CREATE STREAM sync_rds_binlog 
OPTIONS(
triggerInterval=1000, 
checkpointLocation='/tmp/checkpoint/sync_rds_binlog') 
INSERT INTO stream_debug_table 
SELECT cast(value as string), * 
FROM rds_binlog_stream_read;

当我们调试确认没问题后,我们再改回去,正式部署上线运行。执行后,我们就可以在控制台看到如下SQL执行结果:

image

2.2 操作介绍

流式SQL结果输出界面主要分为三个功能区域:

  • 顶部:简单展示流式作业的关键信息,包括:输出模式,批次间隔,批次ID等
  • 中间:流式SQL每个批次的执行结果
  • 底部:功能键,包括:退出(Quit),自动刷新(Refresh),批次跳转(Goto Batch),结果页跳转(Goto Page),下一个批次(Next Batch),上一个批次(Prev Batch),下一个结果页(Next Page),上一个结果页(Prev Page),当前批次Metrics(Metrics),最后一个批次(Last Batch)。

具体每个功能键的使用说明如下:

  • 【Q】Quit: 退出当前界面。
  • 【R】Refresh: 触发页面的自动刷新。当你进行【B】,【P】,【+】,【-】,【<】,【>】,【M】,【L】操作会触发停止页面自动刷新,自动刷新会从当前页面批次开始。
  • 【B】Goto Batch:手动跳转到某个批次结果。当我们跳转到具体某个批次后,输出界面将会停止刷新,这不会影响流式作业的执行。
  • 【P】Goto Page:当某个批次的结果数据较多,一页无法展示时,可以手动跳转到某一页。
  • 【+】Next Batch:手动跳转到下一个批次结果。
  • 【-】Prev Batch:手动跳转到前一个批次结果。
  • 【>】Next Page:手动跳转到下一个结果分页。
  • 【<】Prev Page:手动跳转到上一个结果分页。
  • 【M】Metrics:查看当前批次的Metrics信息。
  • 【L】Last Batch:直接跳转到最后一个批次。

当我们需要跳转到某个批次页面时,会弹出输入框,输入需要跳转到哪一个批次。

image

这里会提示合法的Batch ID区间,超出区间会提示非法。我们可以使用“ECS”键或者不输入直接回车退出。

对于每一个批次,我们可以查看它执行阶段的Metrics信息,输入“【M】Metrics”键:

image

当信息比较多时会分页展示,我们可以通过“<”和“>”进行翻页。同样的,我们可以输入“ECS”,“Q”或者“q”退出。

2.3 注意事项

使用过程中有一些注意事项:

  • Driver内存保存了每个批次的执行结果,所以会消耗一定的内存资源。长时间运行,或者输出结果较大时可能会出现内存不足问题。
  • 建议修改Spark的log4j级别为ERROR,否则INFO/WARN日志会打印到控制台中,影响调试体验。
  • 为了支持调试,我们会在Spark中默认创建一个表“stream_debug_table”。如果您已经存在了这个表名,则无法创建出来并且无法进行调试。您可以自己创建一个调试表,例如:
CREATE TABLE my_debug_table USING MEMORY;

3.小结

本文主要介绍了EMR提供的一个流式SQL控制台调试小工具,可以解决基本的SQL正确性调试需求。除此外,一些高级的调试功能也在开发中。下面是录制的一段视频,直观感受下整个工具的使用:
_SQL_

相关实践学习
数据湖构建DLF快速入门
本教程通过使⽤数据湖构建DLF产品对于淘宝用户行为样例数据的分析,介绍数据湖构建DLF产品的数据发现和数据探索功能。
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
目录
相关文章
|
3月前
|
SQL 存储 Apache
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
379 1
|
3月前
|
SQL 消息中间件 监控
流计算中的流式SQL是什么?请解释其作用和用途。
流计算中的流式SQL是什么?请解释其作用和用途。
45 0
|
3月前
|
SQL BI 数据处理
Flink中的流式SQL是什么?请解释其作用和用途。
Flink中的流式SQL是什么?请解释其作用和用途。
52 0
|
3月前
|
SQL Kubernetes 调度
DataphinV3.14 Flink SQL任务支持基于Session集群调试,模拟生产代码逻辑的调试效果
实时研发一直以来的都是通过local-debug的方式来调试开发中的Flink SQL任务,该方式有如下不足: 1. 支持的采样数据有限,且非是流式数据的调试。 2. 手动上传构造数据的方式较为繁琐,局限性较大。 为便于Flink SQL任务的调试,DataphinV3.14版本支持Flink SQL任务基于Session集群调试,期望做到像离线即席查询般方便地获取实时任务的输出结果,方便用户对线上的真实数据进行代码逻辑上的调试。
|
4月前
|
SQL Java 数据库连接
【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
53 0
|
4月前
|
SQL Python BI
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
|
4月前
|
SQL 存储 Apache
基于 Flink SQL 和 Paimon 构建流式湖仓新方案
阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员李劲松在云栖大会开源大数据专场的分享。
796 0
基于 Flink SQL 和 Paimon 构建流式湖仓新方案
|
5月前
|
SQL 存储 Oracle
Oracle如何使用PL/SQL调试存储过程
Oracle如何使用PL/SQL调试存储过程
102 0
|
SQL 数据库 开发者
Yii 2.0 如何打印 SQL 语句调试呢?底层原理是什么?
Yii 2.0 如何打印 SQL 语句调试呢?底层原理是什么?
321 0
|
SQL Java Apache
【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤
以测试集群版本为例(EMR-4.4.1)—— Flink SQL Client 集成 Hive 使用文档
【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤