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

相关推荐
sin220117 分钟前
springboot测试类里注入不成功且运行报错
spring boot·后端·sqlserver
kirito学长-Java1 小时前
springboot/ssm网上宠物店系统Java代码编写web宠物用品商城项目
java·spring boot·后端
海绵波波1071 小时前
flask后端开发(9):ORM模型外键+迁移ORM模型
后端·python·flask
余生H2 小时前
前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计
前端·后端·python·flask·全栈
绝无仅有2 小时前
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
后端·面试·架构
AI人H哥会Java2 小时前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
计算机学长felix2 小时前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
sin22012 小时前
springboot数据校验报错
spring boot·后端·python
去哪儿技术沙龙2 小时前
去哪儿机票智能预警系统-雷达系统落地实践
后端