资讯动态

Daft 读取 Google Cloud Storage 完全指南:URL 协议、认证方式、GCSConfig 参数与底层 IO 实现

发布时间:2026/9/17 21:13:17 来源:尧图企业网站定制
Daft 读取 Google Cloud Storage 完全指南URL 协议、认证方式、GCSConfig 参数与底层 IO 实现【免费下载链接】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本文以 Daft 官方连接器文档 docs/connectors/gcs.md 为主体系统讲解 Daft 读写 Google Cloud StorageGCS的完整链路gs:///gcs://地址如何被解析、Application Default CredentialsADC与手动凭证两种授权模式的适用场景、GCSConfig全部 9 个配置参数的含义与用法并结合 Daft Rust 侧源码剖析这些参数最终如何作用于底层 HTTP 客户端重试、超时、连接池与匿名访问降级。读完本文后你可以独立完成 GCS 数据接入的认证配置并按需在 Ray 等分布式环境下正确选择凭证策略。GCS 地址模型Daft 如何识别 GCS 路径Daft 原生识别两种 URL 协议gs://和gcs://将其均视为指向 GCS 上数据。在 GCS 中数据存储遵循三层层级结构Project拥有存储资源的 Google Cloud 项目Bucket数据容器Object KeyBucket 内数据的唯一标识符。因此 GCS 上的数据 URL 形式为gs://{BUCKET}/{OBJECT_KEY}例如gs://my_bucket/my_path/file.parquet。这一协议识别并非仅在 Python 层完成而是由 Rust 侧统一处理。在 IO 配置模块 src/common/io-config/src/config.rs 中协议字符串到后端的映射逻辑如下gcs | gs Some(Self::Gcs),同文件中is_supported一类方法列出的受支持 scheme 包含file, http, https, s3, s3a, s3n, az, abfs, abfss, gcs, gs, hf等说明gs/gcs两种写法在整个 IO 栈读、写、glob 展开中是等价的用户可在任意daft.read_*/daft.write_*调用中直接混用。认证方式一依赖环境凭证ADC最省事的接入方式是配置 Google Cloud 的Application Default CredentialsADC让 Daft 自动发现凭证。文档给出的三种常见配置途径设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向服务账号 JSON 密钥文件本地开发时执行gcloud auth application-default login运行在 Google Cloud 环境GCE、GKE、Cloud Run 等时直接使用实例默认服务账号。分布式环境的注意事项在 Ray 等分布式执行环境中Daft 会从worker 机器上拾取环境凭证因此每一台 worker 机器都必须被正确配置好 ADC。如果希望 Daft 改用driver节点上的凭证则应改为下文的手动指定凭证方式将凭证显式传入GCSConfig。认证方式二通过 GCSConfig 手动指定凭证另一种方式是向 Daft 的 I/O 函数传入daft.io.GCSConfig配置对象。该类的 Python 类型定义见 daft/daft/init.pyiclass GCSConfig: I/O configuration for accessing Google Cloud Storage. project_id: str | None credentials: str | None token: str | None anonymous: bool max_connections: int retry_initial_backoff_ms: int connect_timeout_ms: int read_timeout_ms: int num_tries: int使用服务账号凭证from daft.io import IOConfig, GCSConfig # 服务账号 JSON 密钥文件路径 io_config IOConfig(gcsGCSConfig(credentials/path/to/service-account-key.json)) # 全局设置默认 IOConfig作用于后续所有 I/O 调用 daft.set_planning_config(default_io_configio_config) # 执行 I/O 操作 df daft.read_parquet(gs://my_bucket/my_path/**/*)使用 OAuth2 Tokenfrom daft.io import IOConfig, GCSConfig # 直接使用 OAuth2 access token io_config IOConfig(gcsGCSConfig(tokenyour-oauth2-access-token)) # 执行 I/O 操作 df daft.read_parquet(gs://my_bucket/my_path/**/*, io_configio_config)匿名访问公开 Bucketfrom daft.io import IOConfig, GCSConfig # 无需凭证访问公开 bucket io_config IOConfig(gcsGCSConfig(anonymousTrue)) # 从公开 bucket 读取 df daft.read_parquet(gs://public_bucket/data/**/*, io_configio_config)从源码结构看匿名模式在 IO 层有专门的兜底逻辑src/daft-io/src/google_cloud.rs 中当配置anonymoustrue时直接以匿名ClientConfig构建请求而带凭证的请求在遇到失败且允许匿名降级allow_anonymous_fallback时还会回退到匿名客户端重试一次——这对公开数据源 本地恰好无有效 ADC的场景是一个隐含的容错点。IOConfig 的作用范围全局默认与逐操作覆盖Daft 提供两种粒度的配置注入方式可灵活组合全局默认daft.set_planning_configdaft.set_planning_config可将一个daft.io.IOConfig设为默认配置之后所有 Daft 方法调用在未显式传参时都会沿用该默认值。适合整条流水线只访问一个 bucket 体系的场景代码更简洁。逐操作覆盖io_config 关键字参数更灵活的方式是在每个 I/O 调用上通过io_config关键字参数覆盖默认配置。这意味着每次函数调用都可以传入不同的GCSConfig——例如同一作业中同时读取一个私有 bucket服务账号密钥和一个公开 bucket匿名from daft.io import IOConfig, GCSConfig io_config IOConfig(gcsGCSConfig(credentials/path/to/service-account-key.json)) # 执行 I/O 操作但覆盖默认 IOConfig df2 daft.read_csv(gs://my_bucket/my_other_path/**/*, io_configio_config)优先级上逐操作的io_config参数优先于set_planning_config设置的默认值两者都不提供时回落到 ADC 环境凭证发现机制。GCSConfig 完整参数说明daft.io.GCSConfig支持以下选项继承自 docs/connectors/gcs.md 的参数表并结合 daft/daft/init.pyi 的类型签名补充参数类型说明project_idstrGoogle Cloud 项目 IDcredentialsstr服务账号 JSON 密钥文件路径tokenstrOAuth2 access tokenanonymousbool是否使用匿名访问适用于公开 bucketmax_connectionsint最大并发连接数retry_initial_backoff_msint重试的初始退避时间毫秒connect_timeout_msint连接超时毫秒read_timeout_msint读取超时毫秒num_triesint重试尝试次数补充几点来自类型签名的实用细节构造函数中所有参数均为可选... | None None未提供的参数会沿用 Rust 侧crate::GCSConfig::default()的内置默认值见 src/common/io-config/src/python.rs 中GCSConfig.__new__对crate::GCSConfig::default()的兜底逻辑。每个配置对象都提供replace(...)方法用于替换指定字段并返回一个新 GCSConfig适合基于现有配置做局部修改而非整体重建。anonymous、max_connections等字段在实例属性上是必填的具体类型bool/int仅在构造参数层面为可空。源码深潜这些参数如何驱动底层 GCS 客户端GCSConfig的每一项网络参数都不是摆设src/daft-io/src/google_cloud.rs 中的客户端构建代码可以印证其实际作用点重试与超时直接透传给 HTTP 客户端google_cloud.rs.build_with_max_retries(config.num_tries) // ... .connect_timeout(Duration::from_millis(config.connect_timeout_ms)) .read_timeout(Duration::from_millis(config.read_timeout_ms)) .pool_idle_timeout(Duration::from_secs(60))num_tries控制客户端的最大重试次数retry_initial_backoff_ms控制重试退避的初始间隔二者共同决定 GCS API 抖动时的稳定性connect_timeout_ms/read_timeout_ms以毫秒为单位精确控制建连与读取阶段适合在大对象如视频、图像数据集批量下载场景下调整连接池空闲超时固定为 60 秒池大小由max_connections源码中体现为max_connections_per_io_thread见 google_cloud.rs决定每个 IO 线程可持有的并发连接数。glob 展开的扇出上限Daft 在解析gs://bucket/path/**/*这类通配符时需要列举 bucket 内容google_cloud.rs 定义了DEFAULT_GLOB_FANOUT_LIMIT: usize 1024作为默认展开上限——当匹配文件数极大时理解该上限有助于解释 glob 行为边界。匿名降级路径除前文提到的allow_anonymous_fallback外google_cloud.rs 中的测试用例也覆盖了带凭证客户端失败/无凭证时的分支行为说明认证失败与匿名降级是被测试约束过的实现路径而非偶发行为。小结与延伸阅读地址层gs://与gcs://等价统一由 src/common/io-config/src/config.rs 的协议解析逻辑映射到 GCS 后端认证层优先 ADC 环境凭证注意 Ray worker 需逐机配置需要 driver 侧凭证或公开 bucket 时使用GCSConfig手动注入配置层set_planning_config管全局、io_config管单操作GCSConfig的 9 个参数兼顾认证与网络调优replace()支持增量修改配置实现层src/daft-io/src/google_cloud.rs 将num_tries、超时、连接数与匿名模式逐一落到 HTTP 客户端可结合 src/common/io-config/src/python.rs 中GCSConfig的 PyO3 绑定进一步阅读参数序列化细节。如需接入其他对象存储可参考同目录下的 AWS S3 连接器文档 与 Azure Blob 连接器文档它们的IOConfig注入方式与本文完全一致。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价