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可以用了,就先用着吧。

相关推荐
程序员爱钓鱼6 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
ChinaRainbowSea8 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
舒一笑8 小时前
同步框架与底层消费机制解决方案梳理
后端·程序员
minh_coo8 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
白初&9 小时前
SpringBoot后端基础案例
java·spring boot·后端
计算机学姐11 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在12 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
David爱编程12 小时前
深入 Java synchronized 底层:字节码解析与 MonitorEnter 原理全揭秘
java·后端
KimLiu13 小时前
LCODER之Python:使用Django搭建服务端
后端·python·django
再学一点就睡13 小时前
双 Token 认证机制:从原理到实践的完整实现
前端·javascript·后端