Workflow submission failed: Error submitting workflow test_new_oozie: E0501

本文解决Ambari安装Oozie后,从Hue提交workflow时遇到的“Connection refused”错误。问题源于HDFS、YARN、MapReduce客户端配置缺失,需重新安装并重启Oozie服务。

amberi 安装oozie后从hue提交workflow报错:
Workflow submission failed: Error submitting workflow test_new_oozie: E0501: Could not perform authorization operation, Call From hdp1-oozie-1.novalocal/xxx.xxx.xxx.xxx to soapahdfs:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

错误的大致意思是:oozie的任务提交到hadoop的时候拒绝服务,我们hdfs端口是8020

问题原因:amberi在安装oozie的过程中hdfs client,yarn client,mapreduce2 client都安装失败了,导致hadoop的配置没有刷新到oozie的虚拟机上导致的

解决办法:重新安装hdfs client,yarn client,mapreduce2 client到oozie虚拟机,然后重启oozie服务即可

你遇到的错误: ``` FAILED test.py::test_user_workflow - assert 403 == 204 ``` 说明: > ❌ 你的测试期望返回状态码 `204`(No Content),但实际返回了 `403`(Forbidden) > 原因是:**权限不足**,当前登录用户 **无权删除目标用户** --- ## ✅ 问题分析 你当前的测试逻辑是这样的(简化版): ```python def test_user_workflow(test_user, auth_token): response = requests.delete(f"{BASE_URL}/users/{test_user}", headers={"Authorization": f"Bearer {auth_token}"}) assert response.status_code == 204 ``` - `test_user` 是一个由 `auth_token` 创建的用户 ID - 你尝试用同样的 `auth_token` 去删除这个用户 - 但服务端有权限控制逻辑: ```python if user_id != auth_user_id: return jsonify({"error": "无权删除此用户"}), 403 ``` 所以: - ✅ 登录的是 `test@example.com`(对应 `auth_user_id`) - ❌ 删除的是另一个用户(即 `test_user`) - ❌ 返回 `403`,测试失败 --- ## ✅ 解决方案一:修改测试逻辑,只删除当前登录用户 ### ✅ 修改 `test_user_workflow` 函数: ```python def test_user_workflow(auth_token): """🟢 删除当前登录用户""" headers = {"Authorization": f"Bearer {auth_token}"} # 获取当前用户ID response = requests.get(f"{BASE_URL}/users/me", headers=headers) assert response.status_code == 200 current_user_id = response.json()["id"] # 删除当前用户 response = requests.delete(f"{BASE_URL}/users/{current_user_id}", headers=headers) assert response.status_code == 204 print("[夹具] 成功删除当前用户") ``` 这样删除的是自己,权限验证通过。 --- ## ✅ 解决方案二:服务端放宽权限(如允许删除自己创建的用户) 如果你希望用户可以删除自己创建的用户(而不是只能删除自己),可以在服务端添加如下逻辑: ### 🔧 修改 DELETE 接口权限逻辑: ```python @app.route('/users/<int:user_id>', methods=['DELETE']) def delete_user(user_id): auth_header = request.headers.get('Authorization') if not auth_header or not auth_header.startswith('Bearer '): return jsonify({"error": "需要认证"}), 401 token = auth_header.split(' ')[1] if token not in auth_tokens or auth_tokens[token]['expires'] < time.time(): return jsonify({"error": "令牌无效或已过期"}), 401 auth_user_id = auth_tokens[token]['user_id'] user = users_db.get(user_id) if not user: return jsonify({"error": "用户不存在"}), 404 # ✅ 允许删除条件:当前用户 == 被删除用户 或 当前用户是创建者 if user_id != auth_user_id and user.get("creator_id") != auth_user_id: return jsonify({"error": "无权删除此用户"}), 403 del users_db[user_id] return jsonify({}), 204 ``` > 你需要在创建用户时记录 `creator_id` 字段。 --- ## ✅ 总结问题 | 问题 | 原因 | 解决方式 | |------|------|----------| | ❌ `assert 403 == 204` | 权限不足,不能删除他人用户 | ✅ 删除当前登录用户或服务端放宽权限 | | ❌ 权限控制逻辑严格 | 只允许删除自己 | ✅ 扩展权限逻辑支持创建者删除 | --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值