Daft 连接腾讯云 COS 完整实践:cos:// 协议、CosConfig 鉴权配置与 OpenDAL 底层实现解析

发布时间:2026/9/17 19:25:29

Daft 连接腾讯云 COS 完整实践:cos:// 协议、CosConfig 鉴权配置与 OpenDAL 底层实现解析 Daft 连接腾讯云 COS 完整实践cos:// 协议、CosConfig 鉴权配置与 OpenDAL 底层实现解析【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/DaftDaft 将腾讯云对象存储Tencent Cloud COS作为一等存储后端接入其 I/O 层原生识别cos://与cosn://Hadoop CosN 兼容两种 URL 协议支持基于区域region或自定义 endpoint 的自动推导、永久密钥与 STS 临时凭证、匿名访问等多种鉴权方式。本文基于当前仓库的连接器文档与 Rust/Python 源码覆盖从凭证配置、读写操作到参数默认值的完整实操路径并剖析CosConfig如何被翻译成 OpenDAL 后端配置、URL 如何被路由到 COS 存储源帮助你在 Daft 上把 COS 数据真正跑起来并理解其底层行为。数据寻址cos:// 与 cosn:// 两种协议在腾讯云 COS 中数据按以下层级组织Bucket存储桶数据容器的顶层命名空间Object Key对象键桶内某份数据的唯一标识。因此 COS 上的数据 URL 形式为cos://{BUCKET}/{OBJECT_KEY}Daft 同时支持cos://和cosn://两种 URL 协议——后者用于兼容 Hadoop 生态中广泛使用的 CosN 协议两者在 Daft 内部被同等对待。这一点在源码中有直接依据URL 协议路由 中cos与cosn两个 scheme 都被映射到同一个SourceType::OpenDAL { scheme: cos }存储源cos | cosn Ok(( SourceType::OpenDAL { scheme: cos.to_string(), }, fixed_input, )),这意味着从 Hadoop CosN 环境迁移过来的既有cosn://路径可以原样用于 Daft 的read_parquet、read_csv等 API无需改写。鉴权方式一依赖环境变量最省事的方式是让 Daft 从环境变量自动发现凭证。CosConfig支持两组前缀的环境变量环境变量说明COS_ENDPOINTCOS 服务端点COS_REGION或TENCENTCLOUD_REGIONCOS 服务所在区域COS_SECRET_ID或TENCENTCLOUD_SECRET_IDCOS 鉴权 SecretIdCOS_SECRET_KEY或TENCENTCLOUD_SECRET_KEYCOS 鉴权 SecretKeyCOS_SECURITY_TOKEN或TENCENTCLOUD_SECURITY_TOKEN临时凭证STS安全令牌其中TENCENTCLOUD_前缀与腾讯云 SDK 的通用环境变量命名保持一致便于与既有云原生工具链复用同一套凭证。分布式环境的注意事项在 Ray 等分布式运行时下Daft 会从各 worker 机器上读取这些环境变量因此每台 worker 都需要被正确注入凭证如果你希望统一使用driver上的凭证则应改用下面的手动指定方式。CosConfig.from_env()的这条凭证发现路径有专门的测试覆盖tests/io/test_cos_config.py 中分别验证了COS_前缀与TENCENTCLOUD_前缀两种变量被from_env()正确读取的行为。鉴权方式二手动指定 CosConfig通过daft.io.CosConfig配置对象可以把凭证显式传入 Daft 的 I/O 调用。有两种注入粒度全局默认daft.set_planning_config(default_io_configio_config)将一份IOConfig设为后续所有 Daft 方法调用的默认 I/O 配置逐操作覆盖在每个读取/写入函数的io_config关键字参数中传入配置同一进程内不同操作可以使用不同的 COS 配置。以下示例完整继承自官方连接器文档可直接复制运行替换为你自己的凭证。使用永久密钥from daft.io import IOConfig, CosConfig io_config IOConfig( cosCosConfig( regionap-guangzhou, secret_idyour-secret-id, secret_keyyour-secret-key, ) ) # 全局设置默认 IOConfig作用于后续所有 I/O 调用 daft.set_planning_config(default_io_configio_config) # 执行 I/O 操作 df daft.read_parquet(cos://my-bucket/my_path/**/*)使用 STS 临时凭证临时凭证额外需要security_token字段from daft.io import IOConfig, CosConfig io_config IOConfig( cosCosConfig( regionap-guangzhou, secret_idyour-tmp-secret-id, secret_keyyour-tmp-secret-key, security_tokenyour-security-token, ) ) # 逐操作传入 io_config df daft.read_parquet(cos://my-bucket/my_path/**/*, io_configio_config)使用自定义 Endpoint当你使用私有化部署或非默认域名时可以直接提供endpoint区域会从 endpoint 自动推导from daft.io import IOConfig, CosConfig # 使用自定义 endpointregion 将从 endpoint 自动推导 io_config IOConfig( cosCosConfig( endpointhttps://cos.ap-beijing.myqcloud.com, secret_idyour-secret-id, secret_keyyour-secret-key, ) ) df daft.read_parquet(cos://my-bucket/data/**/*, io_configio_config)匿名访问公开桶from daft.io import IOConfig, CosConfig # 无需凭证访问公开桶 io_config IOConfig(cosCosConfig(anonymousTrue)) df daft.read_parquet(cos://public-bucket/data/**/*, io_configio_config)使用 CosN 协议from daft.io import IOConfig, CosConfig io_config IOConfig( cosCosConfig( regionap-guangzhou, secret_idyour-secret-id, secret_keyyour-secret-key, ) ) # 使用 cosn:// 协议Hadoop CosN 兼容 df daft.read_parquet(cosn://my-bucket/my_path/**/*, io_configio_config)逐操作覆盖配置io_config参数使得同一脚本中不同路径可以使用不同的桶、区域或凭证这是官方文档强调的高灵活性用法from daft.io import IOConfig, CosConfig io_config IOConfig( cosCosConfig( regionap-guangzhou, secret_idyour-secret-id, secret_keyyour-secret-key, ) ) # 执行 I/O 操作并覆盖默认 IOConfig df2 daft.read_csv(cos://my-bucket/my_other_path/**/*, io_configio_config)写入 COS写入与读取共用同一套CosConfig。下面示例从 Python 字典构造 DataFrame 并以 Parquet 格式写入 COSimport daft from daft.io import IOConfig, CosConfig io_config IOConfig( cosCosConfig( regionap-guangzhou, secret_idyour-secret-id, secret_keyyour-secret-key, ) ) df daft.from_pydict({a: [1, 2, 3], b: [x, y, z]}) # 以 Parquet 格式写入 COS df.write_parquet(cos://my-bucket/output/, io_configio_config)CosConfig 全参数说明daft.io.CosConfig支持的完整选项如下与 daft/daft/__init__.pyi 中的类型声明及 Rust 侧 Default 实现 一致参数类型默认值说明regionstrNone区域名如ap-guangzhou、ap-beijing、ap-shanghaiendpointstrNone自定义 endpoint URL如https://cos.ap-guangzhou.myqcloud.com。未提供时由 region 推导secret_idstrNone腾讯云 SecretIdsecret_keystrNone腾讯云 SecretKeysecurity_tokenstrNone临时凭证STS安全令牌anonymousboolFalse是否使用匿名访问公开桶max_retriesint3失败请求的最大重试次数retry_timeout_msint30000重试的总超时时长毫秒connect_timeout_msint10000建立连接的超时时间毫秒read_timeout_msint30000读取首字节的超时时间毫秒max_concurrent_requestsint50最大并发请求数max_connectionsint50每个 IO 线程的最大连接数此外CosConfig还提供replace()方法返回替换字段后的新实例与from_env()静态方法方便在已有配置基础上做派生。Region 与 Endpoint 的自动推导规则region与endpoint只需提供其一Daft 会自动推导另一个。endpoint_and_region 实现 定义了四种情况的精确行为仅提供regionendpoint 推导为https://cos.{region}.myqcloud.com仅提供endpoint从 endpoint URL 中解析出 region。解析逻辑见 extract_region 函数它剥离协议头后按.切分主机名匹配以ap-、na-、eu-、sa-开头的段作为区域标识因此https://cos.na-siliconvalley.myqcloud.com或虚拟主机风格https://bucket.cos.ap-shanghai.myqcloud.com都能正确提取两者都提供按原样使用两者都不提供回退到默认区域ap-guangzhouDEFAULT_REGION 常量并记录告警日志。以上每种分支都有对应的单元测试tests 模块例如endpoint 无法解析出区域时回退默认区域、只给 region 时推导出正确 endpoint等场景均已固化在测试中。底层实现CosConfig 如何桥接到 OpenDAL从源码结构看Daft 并没有为 COS 编写独立的客户端而是复用通用的OpenDAL 存储源。调用链如下URL 路由cos:///cosn://被解析为SourceType::OpenDAL { scheme: cos }src/daft-io/src/lib.rs#L655-L660配置翻译创建存储客户端时从 URL 的 host 部分取出 bucket调用CosConfig::to_opendal_config(bucket)把友好的CosConfig翻译成 OpenDAL 的键值配置src/daft-io/src/lib.rs#L296-L303OpenDAL 执行OpenDALSource 持有Operatorcos在其 available_schemes 列表中实际的 GET/PUT/LIST 请求由 OpenDAL 的 COS 服务完成URL 中的路径部分通过 url_to_opendal_path 剥离出bucket/path中的相对路径后交给 operator 处理。to_opendal_config 实现 中有两个值得注意的细节匿名模式的安全语义当anonymousTrue时配置会写入disable_config_loadtrue即跳过凭证转发、同时阻止 OpenDAL 再从环境变量加载凭证避免匿名访问公开桶时意外拾取进程里残留的密钥非匿名模式下则写disable_config_loadfalse允许 OpenDAL 从环境变量补齐未显式提供的凭证凭证脱敏secret_key与security_token在 Rust 结构体中用ObfuscatedString包装其Display实现固定输出***multiline_display()同样只打印Secret key ***、Security token ***。这意味着配置对象在日志、错误信息或repr中不会泄露密钥——test_cos_config_display 测试专门断言了脱敏行为。这套友好配置 API 通用 OpenDAL 后端的设计让 COS 得以支持官方文档列出的全部操作同时保持与 OSS、TOS、Obs 等其他 OpenDAL 系存储源一致的 I/O 行为读read_parquet、read_csv、read_json等文件读取器写write_parquet、write_csv、write_json含分片上传 multipart upload列举支持 glob 模式匹配的对象列举删除对象删除。验证与回归配置行为的测试覆盖对 COS 配置层的断言集中存放在 tests/io/test_cos_config.py涵盖默认值校验重试 3 次、各类超时 30000/10000/30000ms、并发 50、全参数构造、replace()语义、from_env()对COS_与TENCENTCLOUD_双前缀的读取、匿名模式、仅指定 region 时 endpoint 的自动推导以及repr中密钥被掩码等。若你在使用中遇到配置解析类问题这份测试文件是快速确认当前实现约定行为的参照。小结Daft 对腾讯云 COS 的支持可以概括为三条主线URL 层面cos://与cosn://双协议同构、认证层面环境变量 / 永久密钥 / STS 临时凭证 / 匿名访问四路可选且支持全局或逐操作注入、实现层面CosConfig经 region-endpoint 自动推导后翻译为 OpenDAL 后端配置并统一承接读写、列举与删除。配合上文给出的默认值参数表与源码定位你可以在生产环境中按数据规模与凭证形态选择最合适的接入方式。【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/Daft创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 19:25:29

EasyCode:IDEA代码生成插件,带你告别手写CRUD

写代码这几年,最烦的一件事就是写重复的 CRUD 代码。每次新建一张表,都要手写一个 entity、一个 dao、一个 service、一个 controller,还要配一个 XML mapper。字段一多,光是 getter/setter 就够磨半天的。后来我在 IDEA 里接触到…

2026/9/17 19:25:29

Mac上VSCode报错includePath?一文搞定C/C++环境配置

“检测到 #include 错误,请更新 includePath”——只要你在 Mac 上用 VSCode 写过 C 语言,大概率见过这句话。前几天我帮一个大一学弟配环境,他照着教程敲完第一个 hello world,代码还没编译,编辑器里已经铺满红色波浪…

2026/9/17 19:20:28

Rerun 实战:使用 NV12 像素格式流式显示摄像头视频

Rerun 实战:使用 NV12 像素格式流式显示摄像头视频 【免费下载链接】rerun Visualize, query, and stream to train on multimodal robotics data. 项目地址: https://gitcode.com/GitHub_Trending/re/rerun 本篇技术指南围绕 Rerun 官方示例 examples/python…

2026/9/17 20:20:33

以身份为边界:Security-101 之 IAM 零信任架构深度解析

以身份为边界:Security-101 之 IAM 零信任架构深度解析 【免费下载链接】Security-101 8 Lessons, Kick-start Your Cybersecurity Learning. 项目地址: https://gitcode.com/GitHub_Trending/se/Security-101 本指南以 Security-101 课程第 2 模块「Identit…

2026/9/17 20:20:33

Feast 与 dbt 集成实战:让 dbt 模型直接成为生产级 AI 特征

Feast 与 dbt 集成实战:让 dbt 模型直接成为生产级 AI 特征 【免费下载链接】feast The Open Source Feature Store for AI/ML 项目地址: https://gitcode.com/GitHub_Trending/fe/feast 在 Feast 开源特征存储(The Open Source Feature Store fo…

2026/9/17 20:20:33

SwiftUI弹窗选型与实现:系统API与自定义方案边界解析

1. 弹窗选型之前,先看清SwiftUI的弹窗家底做SwiftUI开发的人都会遇到一个问题:弹窗到底用系统的还是自己写?这个问题的答案没有大家想得那么非黑即白。系统弹窗的好处是省事、交互统一、天生适配无障碍,但缺点是长什么样由系统说了…

2026/9/17 20:20:33

计算机网络基础知识:从分层模型到排障实操

简介:面向面试突击与日常复习的计算机网络基础知识 PDF,适合开发者、网络工程师及计算机专业学生。内容以网络模型为主线,从 OSI 七层参考模型讲到 TCP/IP 四层模型,并对比两套模型的差异;随后系统梳理 TCP/IP 协议族&…

2026/9/17 20:20:33

Flutter开发智能单词背诵应用的技术实践

1. 项目概述:基于Flutter的智能单词背诵应用开发作为一名长期从事移动应用开发的工程师,我最近使用Flutter框架完成了一个智能单词背诵应用的开发。这个应用的核心创新点在于将艾宾浩斯遗忘曲线算法与单词记忆过程深度整合,通过科学记忆方法帮…

2026/9/17 20:15:33

通达信资金流指标原理与主力吃货量化建模

简介:本资源是一份面向股票量化分析初学者与通达信公式编写者的实用型技术指标教程,提供可直接导入使用的「超级资金流」与「超级主力吃货」双指标源码及深度解读。文档系统拆解了11个核心计算模块,包括散户套牢筹码比率、主力控盘筹码比率、…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码