dolphinscheduler 出现 “tenant not exists” 租户不存在的相关问题解决

本文讲述了在使用DolphinScheduler时遇到的'租户不存在'错误,通过深入分析配置、源码和数据库,发现用户和租户ID对应错误。解决方案是更新数据库,确保用户和正确的租户ID关联,从而顺利进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dolphinscheduler 出现 “tenant not exists” 租户不存在的相关问题解决

问题描述:

在使用dolphinscheduler创建文件夹、上传文件时,出现“租户不存在” ,日志输出:

[INFO] 2021-04-27 14:35:38.513 org.apache.dolphinscheduler.api.controller.ResourcesController:[177] - query resource list, login user:admin, resource type:FILE
[INFO] 2021-04-27 14:35:38.557 org.apache.dolphinscheduler.api.controller.ResourcesController:[293] - query resource list, login user:admin, resource type:, program type:{}

问题排查

单从日志中看不出什么问题,查看配置文件。

# resource.storage.type=HDFS
resource.storage.type=HDFS

# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions。"/dolphinscheduler" is re
commended
resource.upload.path=/data/dolphinscheduler

# user data local directory path, please make sure the directory exists and have read write permissions
#data.basedir.path=/tmp/dolphinscheduler

# whether kerberos starts
hadoop.security.authentication.startup.state=false

# java.security.krb5.conf.path=/opt/module/dolphinscheduler//conf/krb5.conf
java.security.krb5.conf.path=/opt/module/dolphinscheduler//conf/krb5.conf

# login user from keytab username
login.user.keytab.username=hdfs-mycluster@ESZ.COM

# login user from keytab path
login.user.keytab.path=/opt/module/dolphinscheduler//conf/hdfs.headless.keytab

#resource.view.suffixs
#resource.view.suffixs=txt,log,sh,conf,cfg,py,java,sql,hql,xml,properties

# if resource.storage.type=HDFS
hdfs.root.user=wang

# if resource.storage.type=HDFS
fs.defaultFS=hdfs://192.168.179.10:9000

配置文件也没问题,hdfs 路径也已经是777读写权限,然后从用户admin 入手。

解决思路

通过查看ds源码,资源上传ResourcesService接口:org.apache.dolphinscheduler.api.service.ResourcesService中的getTenantCode

 /**
     * get tenantCode by UserId
     *
     * @param userId user id
     * @param result return result
     * @return
     */
    private String getTenantCode(int userId,Result result){

        User user = userMapper.selectById(userId);
        if (user == null) {
            logger.error("user {} not exists", userId);
            putMsg(result, Status.USER_NOT_EXIST,userId);
            return null;
        }

        Tenant tenant = tenantMapper.queryById(user.getTenantId());
        if (tenant == null){
            logger.error("tenant not exists");
            putMsg(result, Status.TENANT_NOT_EXIST);
            return null;
        }
        return tenant.getTenantCode();
    }

获取租户ID的方法,发现Tenant是通过user.getTenantId() 对应找到的。

Tenant tenant = tenantMapper.queryById(user.getTenantId());

之后赶紧到库中查看:
在这里插入图片描述

发现租户ID 和用户的tenant_id 不对应,直接update :

 update t_ds_user set tenant_id =3 where user_name="admin";

在这里插入图片描述

解决问题!

<think>我们被要求提供DolphinScheduler 3.2.2的详细部署和测试步骤。根据引用内容,我们将结合单节点部署(引用[1])和伪集群部署(引用[2])的步骤,并参考环境配置(引用[3])来编写。 # DolphinScheduler 3.2.2 详细部署与测试指南 ## 一、环境准备 1. **操作系统**:CentOS 7(推荐) 2. **依赖组件**: - JDK 1.8+ - 数据库(MySQL 5.7+ 或 PostgreSQL 8.2.15+,或人大金仓等兼容PG的数据库) - ZooKeeper 3.4.6+ - Hadoop 2.6+(可选,资源存储需要) > 注意:生产环境建议使用外部数据库(非嵌入式数据库)[^1] ## 二、单节点部署(Standalone) ### 1. 系统配置 ```bash # 创建用户(root执行) useradd dolphinscheduler echo "dolphinscheduler" | passwd --stdin dolphinscheduler echo 'dolphinscheduler ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers ``` ### 2. 解压安装包 ```bash tar -zxvf apache-dolphinscheduler-3.2.2-bin.tar.gz mv apache-dolphinscheduler-3.2.2-bin dolphinscheduler chown -R dolphinscheduler:dolphinscheduler dolphinscheduler ``` ### 3. 配置环境变量 编辑 `conf/dolphinscheduler_env.sh`: ```bash export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export PYTHON_HOME=/usr/bin/python3 export HADOOP_HOME=/opt/hadoop # 若使用HDFS存储需配置 export SPARK_HOME=/opt/spark # 若运行Spark任务需配置 ``` ### 4. 数据库配置(以MySQL为例) ```bash # 创建数据库和用户 CREATE DATABASE dolphinscheduler DEFAULT CHARSET utf8; CREATE USER 'ds'@'%' IDENTIFIED BY 'ds123'; GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds'@'%'; ``` ### 5. 修改应用配置 编辑 `conf/application.yaml`: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8 username: ds password: ds123 ``` ### 6. 初始化数据库 ```bash ./tools/bin/upgrade-schema.sh ``` ### 7. 启动服务 ```bash # 使用内置ZooKeeper ./bin/dolphinscheduler-daemon.sh start standalone-server ``` ### 8. 访问Web UI ``` http://<服务器IP>:12345/dolphinscheduler 默认账号:admin 密码:dolphinscheduler123 ``` ## 三、伪集群部署(Pseudo-Cluster) ### 1. 修改全局配置 编辑 `conf/common.properties`: ```properties # 资源存储配置(本地存储示例) resource.storage.type=HDFS resource.hdfs.fs.defaultFS=hdfs://localhost:9000 resource.upload.path=/dolphinscheduler # 注册中心 registry.plugin.name=zookeeper registry.servers=localhost:2181 ``` ### 2. 配置各节点 ```bash # 创建安装目录 mkdir -p /opt/ds/{master,worker,api,alert} cp -r dolphinscheduler/* /opt/ds/master/ cp -r dolphinscheduler/* /opt/ds/worker/ # ...(其他节点同理) ``` ### 3. 启动服务 ```bash # 启动ZooKeeper(提前安装) zkServer.sh start # 启动Master /opt/ds/master/bin/dolphinscheduler-daemon.sh start master-server # 启动Worker /opt/ds/worker/bin/dolphinscheduler-daemon.sh start worker-server # 启动API /opt/ds/api/bin/dolphinscheduler-daemon.sh start api-server # 启动Alert /opt/ds/alert/bin/dolphinscheduler-daemon.sh start alert-server ``` ## 四、功能测试 ### 1. 创建租户 进入Web UI:**安全中心** → **租户管理** → 创建租户(如:tenant1) ### 2. 创建队列 **安全中心** → **队列管理** → 添加队列(如:default) ### 3. 创建项目 **项目管理** → 创建项目(如:test_project) ### 4. 创建简单工作流 1. **工作流定义** → 创建流程 2. 拖拽Shell任务节点: ```bash echo "Hello DolphinScheduler $(date)" > test.txt ``` 3. 设置任务参数: - 租户tenant1 - 队列:default ### 5. 运行验证 1. 保存工作流 → 上线 → 执行 2. 查看任务实例日志: ``` [INFO] 2024-06-14 10:00:01.987 - Task run command: sudo -u tenant1 sh /tmp/dolphinscheduler/exec/process/.../...sh [INFO] Hello DolphinScheduler Fri Jun 14 10:00:02 CST 2024 ``` ## 五、高级功能测试 ### 1. Hive SQL任务 ```sql -- 需提前配置Hive数据源 CREATE TABLE test_ds(id INT); INSERT INTO test_ds VALUES (1); ``` ### 2. 依赖任务测试 - 创建任务A(前置任务)和任务B(依赖A) - 验证B任务在A成功后自动执行 ### 3. 告警测试 配置邮件告警: 1. **安全中心** → **告警组管理** → 添加告警组(填写邮箱) 2. 在任务中设置超时告警(如:1分钟超时) ## 六、常见问题解决 1. **数据库连接失败**: - 检查`application.yaml`中数据库IP、端口、权限 - 将JDBC驱动放入`libs`目录(MySQL驱动:`mysql-connector-java-8.0.16.jar`) 2. **任务执行卡住**: ```bash # 检查Worker状态 tail -f logs/dolphinscheduler-worker.log # 常见原因:资源足或队列满 3. **HDFS存储异常**: - 检查`common.properties`中HDFS配置 - 验证命令行能否访问HDFS: ```bash sudo -u dolphinscheduler hdfs dfs -ls / ``` > 详细日志路径:`/opt/ds/{角色名}/logs/`[^2] §§相关问题§§ 1. DolphinScheduler 如何配置高可用 Master? 2. 海豚调度如何集成 Kerberos 认证的 Hadoop 集群? 3. DolphinScheduler 如何实现自定义告警插件? 4. DolphinScheduler 3.2.2 支持哪些类型的任务? 5. 如何监控 DolphinScheduler 的运行状态?</think>## DolphinScheduler 3.2.2 详细部署与测试指南 ### 一、环境准备(CentOS 7) 1. **系统配置** ```bash # 创建部署用户 useradd dolphinscheduler echo "dolphinscheduler" | passwd --stdin dolphinscheduler sed -i '$a dolphinscheduler ALL=(ALL) NOPASSWD: ALL' /etc/sudoers sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers ``` 2. **依赖安装** ```bash # JDK 1.8+ yum install -y java-1.8.0-openjdk-devel # Python 3.6+ yum install -y python3 # 数据库驱动(以PostgreSQL为例) yum install -y postgresql-jdbc ``` ### 二、安装部署 1. **解压安装包** ```bash tar -zxvf apache-dolphinscheduler-3.2.2-bin.tar.gz mv apache-dolphinscheduler-3.2.2-bin dolphinscheduler chown -R dolphinscheduler:dolphinscheduler dolphinscheduler chmod -R 755 dolphinscheduler ``` 2. **配置数据库(以PostgreSQL为例)** ```bash # 创建数据库 sudo -u postgres psql -c "CREATE DATABASE dolphinscheduler;" sudo -u postgres psql -c "CREATE USER dsuser WITH PASSWORD 'dspass';" sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE dolphinscheduler TO dsuser;" ``` 3. **修改配置文件** `conf/dolphinscheduler_env.sh`: ```bash export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export PYTHON_HOME=/usr/bin/python3 export DATABASE="postgresql" export SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/dolphinscheduler" export SPRING_DATASOURCE_USERNAME="dsuser" export SPRING_DATASOURCE_PASSWORD="dspass" ``` `conf/common.properties`: ```properties # 资源存储配置 resource.storage.type=HDFS resource.hdfs.fs.defaultFS=hdfs://localhost:9000 resource.upload.path=/dolphinscheduler # 注册中心 registry.plugin.name=zookeeper registry.servers=localhost:2181 ``` 4. **初始化数据库** ```bash ./tools/bin/upgrade-schema.sh ``` 5. **启动服务** ```bash # 启动ZooKeeper(需提前安装) bin/dolphinscheduler-daemon.sh start zookeeper # 启动主服务 bin/dolphinscheduler-daemon.sh start master-server bin/dolphinscheduler-daemon.sh start worker-server bin/dolphinscheduler-daemon.sh start api-server bin/dolphinscheduler-daemon.sh start alert-server ``` ### 三、功能测试 1. **登录Web UI** ``` http://<服务器IP>:12345/dolphinscheduler 默认账号:admin 默认密码:dolphinscheduler123 ``` 2. **创建测试工作流** - 创建租户:安全中心 → 租户管理 → 创建租户(如:test_tenant) - 创建项目:项目管理 → 创建项目(如:test_project) 3. **Shell任务测试** ```bash # 在任务定义中创建Shell任务 echo "Start time: $(date)" sleep 5 echo "Execution completed!" ``` 验证点:查看任务日志是否正常输出时间信息 4. **SQL任务测试(MySQL示例)** ```sql -- 在SQL任务中执行 CREATE TABLE IF NOT EXISTS test_table(id INT, name VARCHAR(50)); INSERT INTO test_table VALUES (1, 'dolphin_test'); SELECT * FROM test_table; ``` 验证点:检查MySQL中是否成功创建表并插入数据 5. **依赖任务测试** - 创建任务A(前置任务)和任务B(依赖A) - 验证B任务在A成功后自动执行 ### 四、进阶测试 1. **HA高可用测试** ```bash # 停止主Master节点 bin/dolphinscheduler-daemon.sh stop master-server # 验证备用Master自动接管 tail -f logs/master-server.log # 应出现"Master failover change master from XXX to YYY" ``` 2. **告警测试** - 配置邮件告警通道 - 设置任务超时告警(1分钟) - 执行睡眠任务:`sleep 120` - 验证是否收到超时告警邮件 3. **API接口测试** ```bash # 获取访问令牌 curl -X POST http://localhost:12345/dolphinscheduler/users/login \ -d 'userName=admin&userPassword=dolphinscheduler123' # 创建项目 curl -X POST http://localhost:12345/dolphinscheduler/projects \ -H "token: <上一步获取的token>" \ -d 'projectName=api_test&description=API测试项目' ``` ### 五、常见问题排查 1. **服务启动失败** ```bash # 检查日志 tail -f logs/master-server.log tail -f logs/worker-server.log ``` 2. **数据库连接问题** - 检查`conf/dolphinscheduler_env.sh`的JDBC URL格式 - 验证数据库网络连通性:`telnet <db_host> 5432` 3. **资源存储异常** ```bash # 验证HDFS访问权限 sudo -u dolphinscheduler hdfs dfs -ls / # 修复权限 hdfs dfs -chown -R dolphinscheduler /dolphinscheduler ``` > 提示:所有配置文件修改后需重启对应服务生效[^2]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王子健121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值