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 解决:

jdbc:postgresql://localhost:5432/databaseName?stringtype=unspecified

但是,这样修改以后会导致查询任务实例等字符串的地方报错(所以目前PG作为数据库来做数据质量还是有很多问题):
在这里插入图片描述
同时在转换数据库连接参数的时候会报错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化:

image.png

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

image.png

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

三、使用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 的形式访问表。而源码中,采用了相同的方式:

image.png

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

image.png

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

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,即可解决:

image.png

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

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

image.png

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

添加pom依赖:

image.png

修改代码:

image.png

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

ERROR: relation “bigdata.t100” does not exist

和之前问题一样,PG这里需要的是 schema 而不是 database。
后续:PG数据源问题太多了。放弃了。目前hive可以用了,就先用着吧。

七、使用PG库作为海豚数据库时,规则列表可能查询失败

把查询SQL中的 “ ` ” 符号去掉即可:
image-20231222172415832

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

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Gradle 3.2.0是一款集成开发环境(IDE)中常用的构建工具,它用于自动化构建、测试和部署应用程序的过程。它可以帮助开发者更高效地管理项目依赖、编译代码、打包发布等任务。 Gradle 3.2.0具有许多重要的功能和改进。首先,它引入了新的构建缓存功能,可以显著提高构建速度。这意味着重复构建相同代码时,Gradle会自动利用缓存来加快构建过程,从而节省时间。 此外,Gradle 3.2.0还提供了更好的增量编译支持,可以只编译改动的部分,而不是整个项目,这样可以进一步减少构建时间。 Gradle 3.2.0还改进了构建钩子和任务处理API,使开发者能够更灵活地定义和管理构建过程。它还提供了更好的错误报告和调试功能,使开发者能够更快地定位和解决问题。 此外,Gradle 3.2.0还加强了对Kotlin的支持,使开发者能够更轻松地使用Kotlin进行构建。它还支持增强的Java编译器插件和新的Java插件API,用于更高级的Java构建。 总体而言,Gradle 3.2.0是一款强大、灵活且高效的构建工具,为开发者提供了一种简单而强大的方式来管理和构建项目。它的许多新功能和改进使其成为一款理想的开发工具,能够帮助开发人员更快速、更轻松地构建和部署应用程序。 ### 回答2: Gradle 3.2.0 是一个开源的构建自动化工具,用于构建和管理软件项目。它基于 Groovy 语言,并提供了丰富的 API 和插件来定制和扩展构建过程。 Gradle 3.2.0 带来了许多新的特性和改进,其中包括: 1. 依赖管理增强:Gradle 3.2.0 引入了新的 "Dependency Constraints" 功能,它允许开发人员对依赖项进行额外的限制和约束,以确保项目的依赖项符合预期的版本范围。 2. 构建缓存改进:Gradle 3.2.0 引入了对构建缓存的一些改进,并且默认情况下启用了构建缓存。构建缓存可以显著提高构建速度,特别是在多个项目之间共享构建缓存时。 3. 插件改进:Gradle 3.2.0 提供了一些新的插件,如 "Java Library Distribution" 插件,它使得将 Java 打包成发行版更加容易。此外,还对许多常用的插件进行了改进和优化。 4. 并行构建改进:Gradle 3.2.0 对并行构建进行了一些改进,包括增加了对任务输出文件的最小化传输,以及优化任务间的依赖关系处理等。 5. 性能改进:Gradle 3.2.0 对构建器进行了一些优化,以提高构建速度和性能。这些优化包括减少内部对象的创建和处理,并通过增加缓存项的大小来提高缓存效率等。 总之,Gradle 3.2.0 是一个功能强大的构建工具,它提供了许多新的特性和改进,以帮助开发人员更高效地构建和管理项目。无论是大型项目还是小型项目,Gradle 3.2.0 都可以提供灵活、可定制和高性能的构建解决方案。 ### 回答3: Gradle 3.2.0是一款用于构建和自动化构建过程的开源构建工具。它是一种基于Apache Ant和Apache Maven角色的构建工具,更强大和灵活。 Gradle 3.2.0的特点之一是它的高性能。它能够高效地处理大型项目,并且具有增量构建功能,只需要构建需要更新的部分,从而节省时间和资源。此外,它的增量编译功能还可以提高Java等编译型语言的编译速度。 此外,Gradle 3.2.0还引入了新的依赖管理和解析系统。它可以自动解析和下载项目所需的依赖项,并支持本地和远程存储。它还支持多模块项目,可以轻松地管理各个模块之间的依赖关系。 Gradle 3.2.0还具有强大的自定义功能。它使用Groovy作为默认的脚本语言,允许开发人员根据项目的需求编写自定义构建脚本。这样,开发人员可以自由地定义和扩展构建过程,使其更符合项目的特定需求。 此外,Gradle 3.2.0还提供了丰富的插件生态系统,可以通过插件来扩展和定制Gradle的功能。这些插件包括用于Android开发、Java开发、Web开发等各种场景的插件,可以提高开发人员的效率和工作流程。 总之,Gradle 3.2.0是一个功能强大且灵活的构建工具,可以帮助开发人员更高效地构建和管理项目,提高开发效率。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值