
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),仅供参考