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
这样我们很容易想到了两种解决方式:
增加表对两个字段的长度的限制
缩短现有任务的名称
建议
笔者这里建议命名最好简单明了,不可太过臃肿,因此建议同事缩短的任务的名称。
以上是关于DolphinScheduler 资源中心创建文件资源错误的主要内容,如果未能解决你的问题,请参考以下文章
dolphinscheduler 1.3.8 使用AWS S3作为资源管理
dolphinscheduler 2.0.6 资源中心改造(使用本地文件系统,不再依赖HDFS)
Apache DolphinScheduler 征稿 — 极速入门Apache DolphinScheduler分布式调度系统