dolphinscheduler 3.2.0 数据质量模块问题汇总

近期打算升级dolphinscheduler到3.2.0,因此进行了一波测试。本文主要讲解在测试数据质量模块的时候遇到的问题,以及问题的原因。和临时解决方案(由于非专门后端,修改的代码可能没有考虑全局,仅为解决当前问题而修改。)

目前改下来,hive数据源算可以用了。PG数据源问题太多,可能是多了一层schema的原因,放弃了。先记录一下遇到的问题,先去测试数据质量各种检测了。

一、类找不到异常

根据官网描述,当前 dolphinscheduler-data-quality-3.2.0.jar 是瘦包,不包含任何 JDBC 驱动。 如果有 JDBC 驱动需要,可以在节点设置 选项参数处设置 --jars 参数, 如:--jars /lib/jars/mysql-connector-java-8.0.16.jar

其他类找不到的问题类似。除此之外还可以直接将对应的包放入 ${SPARK_HOME}/jars 目录下。如果只在海豚工作节点的客户端上放置JAR包,需要用client或者local模式启动任务。

二、使用PG库作为海豚数据库时,可能会遇到时间类型错误

ERROR: column "create_time" is of type timestamp without time zone but expression is of type character varying

可以通过添加URL参数 stringtype=unspecified 解决:

bash 复制代码
jdbc:postgresql://localhost:5432/databaseName?stringtype=unspecified

但是,这样修改以后在转换数据库连接参数的时候会报错JSON转换异常:

at Source: (String)"{"other":"stringtype=unspecified","address":"jdbc:postgresql://IP:PORT","user":"user","password":"\*\*\*\*\*\*\*","database":"bigdata","jdbcUrl":"jdbc:postgresql://IP:PORT/bigdata"}"; line: 1, column: 10 (through reference chain: org.apache.dolphinscheduler.plugin.datasource.postgresql.param.PostgreSQLConnectionParam"other")

因为 PostgreSQLConnectionParam 中,other 字段是一个Map结构。但是在数据质量中,用了 Properties 来存储,再JSON化:

这样在后续JSON转对象的时候,因为String类型不能转Map而报错。因此,我对 TaskExecutionContextFactory 类 进行了修改:

修改后,就可以正常转换了。

三、使用PG库作为海豚数据库时,可能会遇到最后写入结果表失败的问题

INFO 2023-12-28 11:53:43.857 +0800 - -> Exception in thread "main" org.postgresql.util.PSQLException: ERROR: schema "bigdata" does not exist

这是因为与 mysql 的 database.table 不同,PG库中是以 schema.table 的形式访问表。而源码中,采用了相同的方式:

因此,最简单的方式就是直接访问表。但是,需要注意的是。这样的话,存储海豚的数据库就需要单独用一个,且把表放在 public 模式下。修改 JdbcWriter 类 后的代码:

四、数据质量任务节点重跑的时候,可能会失败

Exception in thread "main" org.apache.spark.sql.AnalysisException: path hdfs://MYCLUSTER/user/dolphinscheduler/data_quality_error_data/0_10_空值检测 already exists.;

这是因为数据质量任务执行的最后会把结果写入到HDFS上,但是写入模式是使用ERROR,因此重跑的时候遇到相同的目录,自然报错了。把 BaseFileWriter 类中的写入模式改成 overwrite,即可解决:

五、当数据源采用加密策略的时候,会导致数据质量任务连接数据源失败

这是因为在源码中,并没有对密码部分进行解密操作。因此会报错:

因为这里涉及到了 common.properties,尝试了几次没有好的办法,只能用默认密钥加密才有效。因此以下方案适用于默认密钥,或者直接将自定义密钥替换源码中的默认密钥常量。

添加pom依赖:

修改代码:

六、检测数据源为PG库时,报错表不存在

ERROR: relation "bigdata.t100" does not exist

和之前问题一样,PG这里需要的是 schema 而不是 database。

以上就是目前测试的经验,有需要的小伙伴可以参考。

后续:PG数据源问题太多了。放弃了。目前hive可以用了,就先用着吧。

相关推荐
雪隐35 分钟前
个人电脑玩AI-16让5060 Ti给你打工——MiniMax H3 提速实录:从"泡杯茶等视频"到"视频等你",一张 5060 Ti 的自我修养
前端·人工智能·后端
9523644 分钟前
Sentinel
java·后端·spring·sentinel·springcloud
名字还没想好☜1 小时前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
zzzll11111 小时前
Spring Boot 入门指南:从零开始构建微服务
spring boot·后端·微服务
运维行者_2 小时前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
长栎2 小时前
你用了五年的消息队列,不知道它背后站着中介者模式
后端
Gopher_HBo2 小时前
路由注册:RouterGroup(routergroup.go)
后端
用户608186527902 小时前
Avalonia UI 控件样式定义的三种方式详解
后端
feng尘2 小时前
volatile 可见性与内存屏障知识点
后端
SamDeepThinking2 小时前
第3篇:企业级CAS单点登录实战-技术架构设计方案
后端·程序员·架构