DolphinScheduler 资源中心创建文件资源错误

Posted 扫地增

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DolphinScheduler 资源中心创建文件资源错误相关的知识,希望对你有一定的参考价值。

背景

事情发生在新入职同事没有使用过,不明确DolphinScheduler对文件长度其实是有要求。

现象

同事在资源中心创建脚本时发现提示创建文件资源错误,看到这个错误,懵逼的一批,我明明是按照正常操作创建的,用户啥的都是对的,怎么都处理不好这个问题这是不是系统出bug了?随着思维对自己的一通折磨,终于他忍不住问我你有没有遇到过这种问题?应该怎么解决,没有啥日志啊。一听我知道该同事每太用过DolphinScheduler,给他一个意味深长的微笑。然后我给他提供了如下思路解决问题。

分析

我们分析一下资源中心报错提示,那么在DolphinScheduler中资源中心属于什么服务管理的呢?我们知道资源中心是属于ApiApplicationServer服务管理的。因此,要定位这个错误我们只要查看api的相关日志即可,于是我们查看了对应目录下的相关日志。(不同公司指定的api服务所在位置不一样)
我们看下日志

tail -2000f /xxx/xxx/dolphinscheduler/logs/dolphinscheduler-api.log

发现报如下错误:

[ERROR] 2022-08-01 10:27:28.700 org.apache.dolphinscheduler.api.exceptions.ApiExceptionHandler:[46] - 创建资源文件错误
org.springframework.dao.DataIntegrityViolationException:
### Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'full_name' at row 1
### The error may exist in org/apache/dolphinscheduler/dao/mapper/ResourceMapper.java (best guess)
### The error may involve org.apache.dolphinscheduler.dao.mapper.ResourceMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_ds_resources  ( file_name, size, create_time, description, full_name, alias, update_time, pid, type, user_id, is_directory )  VALUES  ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'full_name' at row 1
; Data truncation: Data too long for column 'full_name' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'full_name' at row 1
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
	at com.sun.proxy.$Proxy101.insert(Unknown Source)

这里我们发现主要是由于任务数据在插入t_ds_resources表时,任务名超过了表中定义名称

我们查看资源列表元数据目录表发现full_name和file_name两个字段仅有64个字节

CREATE TABLE `t_ds_resources` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'key',
  `alias` varchar(64) DEFAULT NULL COMMENT 'alias',
  `file_name` varchar(64) DEFAULT NULL COMMENT 'file name',
  `description` varchar(255) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL COMMENT 'user id',
  `type` tinyint(4) DEFAULT NULL COMMENT 'resource type,0:FILE,1:UDF',
  `size` bigint(20) DEFAULT NULL COMMENT 'resource size',
  `create_time` datetime DEFAULT NULL COMMENT 'create time',
  `update_time` datetime DEFAULT NULL COMMENT 'update time',
  `pid` int(11) DEFAULT NULL,
  `full_name` varchar(64) DEFAULT NULL,
  `is_directory` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `t_ds_resources_un` (`full_name`,`type`)
) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8

这样我们很容易想到了两种解决方式:

  1. 增加表对两个字段的长度的限制
  2. 缩短现有任务的名称

建议

笔者这里建议命名最好简单明了,不可太过臃肿,因此建议同事缩短的任务的名称。

以上是关于DolphinScheduler 资源中心创建文件资源错误的主要内容,如果未能解决你的问题,请参考以下文章

dolphinscheduler 1.3.8 使用AWS S3作为资源管理

dolphinscheduler 2.0.6 资源中心改造(使用本地文件系统,不再依赖HDFS)

使用DolphinScheduler调度Python任务

使用DolphinScheduler调度Python任务

Apache DolphinScheduler 征稿 — 极速入门Apache DolphinScheduler分布式调度系统

DolphinScheduler 3.1.0 海豚集群部署配置