10个使用openYuanrong最容易踩的坑:安装、调用与调试FAQ大全
【免费下载链接】yuanrongopenYuanrong runtime:openYuanrong 多语言运行时提供函数分布式编程,支持 Python、Java、C++ 语言,实现类单机编程高性能分布式运行。项目地址: https://gitcode.com/openeuler/yuanrong
openYuanrong 是一个 Serverless 分布式计算引擎,提供 Python、Java、C++ 多语言函数运行时,让你用类单机的编程体验写出高性能的分布式程序。本文整理了新手在 openYuanrong 安装、集群部署、函数调用和日志调试中最容易踩的 10 个坑,并给出对应的快速解决方法,帮你少走弯路。
一、安装阶段:3 个高频坑
坑 1:装好了却报ModuleNotFoundError: No module named 'yr'
现象:pip 安装成功,但运行 Python 程序时找不到yr模块。
原因:机器上存在多个 Python 版本,程序用的是另一个解释器,而 openYuanrong 装在了别的环境里。
解决方法:用安装 openYuanrong 时对应的 Python 版本运行程序,可用python3.9 -c "import yr; print(yr.__path__[0])"验证 SDK 是否可用。参考 安装 FAQ。
坑 2:whl 包的 Python 版本(cp39/cp310/cp311)没对上
现象:pip 安装时报依赖冲突或No matching distribution。
原因:openYuanrong 要求 Python 版本为>=3.9, <=3.11,且运行时包文件名中的cp39/cp310/cp311必须与你的 Python 小版本一一对应(如 Python 3.10 要选cp310-cp310的 whl)。
解决方法:确认架构(x86_64 / aarch64)和 Python 版本后,从官方发布渠道选择对应 whl 包安装,详见 安装指南。另外按需安装可选组件:C++ 开发装 cpp_sdk 包,开发函数服务装 faas 包,用 Dashboard 装 dashboard 包。
坑 3:Java / C++ 环境不满足编译要求
现象:Java 或 C++ 示例编译、运行失败。
原因:语言环境版本不达标——Java 需要8/17/21,C++ 需要gcc>=10.3.0 且 stdc++>=14。
解决方法:升级工具链后再编译;C++ SDK 头文件与库位于yr包路径下的cpp/include和cpp/lib目录。示例代码可参考 C++ 示例目录 和 Java 示例目录。
二、部署阶段:3 个集群坑
坑 4:防火墙拦截,从节点加入不了集群
现象:yr status查看集群状态,从节点长时间未加入。
原因:主机开启了防火墙,openYuanrong 组件端口网络不通。
解决方法:非生产环境可临时关闭防火墙验证(systemctl stop firewalld);生产环境请逐一放行 openYuanrong 使用的端口。部署拓扑可参考下图:
坑 5:主从节点版本不一致
现象:集群行为异常或从节点无法加入。
原因:主节点与从节点安装的 openYuanrong 版本不同。
解决方法:在每台节点执行pip show yr核对版本,确保所有节点重装为同一版本。
坑 6:环境里有代理,etcd 连接超时
现象:yr status报错:Connect to etcd server failed. context deadline exceeded.
原因:当前环境配置了http_proxy/https_proxy代理,干扰了 etcd 的本地通信。
解决方法:部署与集群内部通信场景下关闭代理配置。生产集群也支持 K8s 方式部署,可参考 K8s 部署文档:
三、函数调用阶段:3 个编程坑
坑 7:忘了yr.init()/yr.finalize()生命周期
现象:首次调用函数连接失败,或进程退出时资源未清理。
原因:openYuanrong SDK 要求"Init 一次"——程序开始时调用yr.init(),结束时调用yr.finalize()。另外注意:在非集群节点上运行且未配置集群地址时,SDK 会自动拉起一个临时环境(进程退出时销毁),调试时会让程序明显变慢。
解决方法:按init → invoke → get → finalize的标准顺序写程序,完整示例见 入门文档。
坑 8:把invoke()的返回值直接当结果用
现象:打印结果是ObjectRef而不是函数返回值。
原因:invoke()是异步调用,返回的是数据对象的一个引用(ObjectRef),不是值本身。
解决方法:用yr.get(results_ref)阻塞获取真实结果。以 Python 为例:
ref = say_hello.invoke('yuanrong') # 返回引用 print(yr.get(ref)) # 阻塞取值:hello, yuanrong这是新手最常犯的调用坑,Java/C++ 同理(YR.get()/YR::Get())。
坑 9:代理环境变量不生效,yr.init连接集群失败
现象:Driver 里配置了http_proxy/https_proxy,但yr.init仍报failed to connect to all addresses。
原因:openYuanrong 默认不生效http/https 代理配置。
解决方法:额外设置YR_ENABLE_HTTP_PROXY=true环境变量才会启用代理,代理地址支持user:pass@host:port形式。详见 多语言函数编程 FAQ。
四、调试排查阶段:1 个必备技能 + 1 个进阶技巧
坑 10:出问题了不知道去哪找日志
现象:函数调用超时、实例起不来,却找不到报错信息。
原因:没掌握 openYuanrong 的日志与可观测性布局。
解决方法:记住这几个关键位置——
- 部署日志:
/tmp/yr_sessions/latest/deploy_std.log,定位部署问题先看它; - 函数日志:log 目录下的
{node_id}-user_func_std.log(标准输出合并文件); - 组件日志:scheduler、frontend、agent 等各有独立日志,实例未正常拉起时重点看
job-{job_id}-runtime-{runtime_id}.log,排查函数包路径等配置错误。
详细日志目录说明见 日志文档。
💡进阶技巧:主节点部署时加上mode.master.dashboard=true等参数,可开启可视化 Dashboard,用集群总览、作业详情、日志收集等页面快速定位问题:
如果调用链路较长,还可以结合 Trace 链路追踪做性能调优:
📋 10 个坑速查表
| # | 阶段 | 坑 | 一句话解法 |
|---|---|---|---|
| 1 | 安装 | 找不到yr模块 | 用安装 SDK 的同一 Python 版本运行 |
| 2 | 安装 | whl 版本/架构不匹配 | 对齐 cp39-311、x86_64/aarch64 |
| 3 | 安装 | 语言环境不达标 | Java 8/17/21,gcc≥10.3 |
| 4 | 部署 | 从节点不加入集群 | 放行防火墙端口 |
| 5 | 部署 | 主从版本不一致 | 各节点重装相同版本 |
| 6 | 部署 | etcd 连接超时 | 关闭本地代理配置 |
| 7 | 调用 | 生命周期缺失 | 牢记 init → finalize |
| 8 | 调用 | 把引用当返回值 | 用yr.get()取值 |
| 9 | 调用 | 代理不生效 | 设置YR_ENABLE_HTTP_PROXY=true |
| 10 | 调试 | 找不到日志 | 看/tmp/yr_sessions/latest/ |
掌握以上 10 个坑的规避方法,openYuanrong 的安装、调用与调试就能顺畅 90% 以上。更多细节可查阅 常见问题 FAQ 与 入门指南。
【免费下载链接】yuanrongopenYuanrong runtime:openYuanrong 多语言运行时提供函数分布式编程,支持 Python、Java、C++ 语言,实现类单机编程高性能分布式运行。项目地址: https://gitcode.com/openeuler/yuanrong
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考