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


    背景

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

    现象

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

    分析

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

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

    发现报如下错误:

    [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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这里我们发现主要是由于任务数据在插入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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

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

    建议

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

  • 相关阅读:
    C++ 多线程 线程安全队列设计
    CSRF漏洞
    go调用阿里云接口查询ECS信息
    【LSTM回归预测】基于matlab布谷鸟算法优化LSTM回归预测【含Matlab源码 2037期】
    数据结构刷题:第四天
    C++中如何使用通用字符名输入UNICODE字符
    Web前端 | JavaScript(事件)
    Spring Boot2.5 使用 Spring Data
    Windows10源码编译安装RDKit
    重庆自考本科可以选择全日制吗?
  • 原文地址:https://blog.csdn.net/qq_41018861/article/details/126096891