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

相关推荐
IT_陈寒1 天前
Redis 性能翻倍的 7 个冷门技巧,第 5 个大多数人都不知道!
前端·人工智能·后端
你的人类朋友1 天前
说说签名与验签
后端
databook1 天前
Manim实现脉冲闪烁特效
后端·python·动效
canonical_entropy1 天前
AI时代,我们还需要低代码吗?—— 一场关于模型、演化与软件未来的深度问答
后端·低代码·aigc
颜如玉1 天前
HikariCP:Dead code elimination优化
后端·性能优化·源码
考虑考虑1 天前
Jpa使用union all
java·spring boot·后端
bobz9651 天前
virtio vs vfio
后端
Rexi2 天前
“Controller→Service→DAO”三层架构
后端
bobz9652 天前
计算虚拟化的设计
后端
深圳蔓延科技2 天前
Kafka的高性能之路
后端·kafka