将 Snowflake 暂存区卷与服务搭配使用

Snowflake 支持应用程序容器的 各种存储卷类型,包括内部暂存区、本地存储、内存存储和块存储卷。本部分介绍如何为内部暂存区配置卷和卷挂载。

在服务规范中指定 Snowflake 暂存区

要创建服务容器使用 Snowflake 暂存区挂载的服务,请在服务规范中提供必要的配置,如下所示:

  1. 指定用于定义要使用的暂存区卷的 spec.volumes 字段。

    volumes:
    - name: <name>
      source: <stage name>
    
    Copy

    以下字段为必填字段:

    • name:卷的名称。

    • source:要挂载的 Snowflake 内部暂存区,例如,@my_stage@my_stage/folder。这个值必须放在双引号内。

  2. 指定 spec.containers.volumeMounts 字段以描述在应用程序容器中将卷挂载到何处。您在此字段中提供的信息对于所有支持的存储卷都是相同的。 例如:

    volumeMounts:
    - name: <name>
      mountPath: <absolute-directory-path>
    
    Copy

在以下示例规范中,app 容器挂载了 @model_stage 内部暂存区:

spec:
  containers:
  - name: app
    image: <image1-name>
    volumeMounts:
    - name: models
      mountPath: /opt/models
  volumes:
  - name: models
    source: "@model_stage"
Copy

访问控制要求

服务的所有者角色是用于创建服务的角色。这也是服务在与 Snowflake 交互时使用的角色。所有者角色确定授予应用程序容器访问已挂载暂存区的权限。所有者角色必须对暂存区具有 READ 权限。

如果所有者角色在某个暂存区没有 WRITE 权限,则该暂存区的挂载为只读。也就是说,容器只能从暂存区读取文件。所有者角色需要暂存区挂载的暂存区 WRITE 权限才能支持读取和写入。

准则和限制

当应用程序容器使用暂存区挂载时,以下准则和限制适用:

限制

  • 以下是一般限制。如果您在这些限制方面遇到任何问题,请联系您的账户代表。

    • 每项服务最多可支持五个暂存区卷。这引用了 服务规范 中的 spec.volumes 字段。

    • 每个节点仅支持八个暂存区挂载。 Snowflake 管理每个节点的暂存区挂载限制,与管理内存、CPU 和 GPU 的方式类似。当现有节点无法支持所请求的暂存区挂载时,启动新的服务实例可能会导致 Snowflake 启动新节点。

  • 您只能在暂存区中挂载暂存区或子目录。例如,@my_stage@my_stage/folder。您不能在一个暂存区挂载单个文件,例如 @my_stage/folder/file

  • 不支持外部暂存区。仅支持 Snowflake 内部暂存区。

    • AWS 上的账户同时支持 SNOWFLAKE_FULL 和 SNOWFLAKE_SSE 暂存区加密(请参阅 内部暂存区参数)。

    • Azure 上的账户目前支持 SNOWFLAKE_SSE 加密暂存区。在执行 CREATE STAGE 时,请使用 ENCRYPTION 参数指定加密类型:CREATE STAGE my_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

  • 不支持从多个暂存区挂载(安装在不同容器上的同一个暂存区卷)对同一文件进行并发写入。

  • 暂存区挂载不是完全 POSIX 兼容的文件系统。例如:

    • 文件和目录重命名不是原子的。

    • 不支持硬链接。

  • 监控文件系统变更的 Linux 内核子系统索引节点通知 (inotify) 不适用于暂存区挂载。

准则

  • 暂存区挂载针对顺序读写进行了优化。

  • 避免在暂存区挂载中同时写入多个文件。

  • 暂存区挂载 I/O 操作的延迟可能高于容器文件系统和块存储卷上的 I/O 操作。您应始终检查 I/O 操作的状态码,以确保它们成功。

  • 为保持性能,请避免创建或修改大于 25 GB 的文件。

  • 暂存区挂载异步上传文件更新。只有在成功关闭或刷新文件描述符后,才能保证在暂存区挂载中对文件所做的变更保留到暂存区中。暂存区挂载中的文件变更可能会有一些延迟才能对其他容器和 Snowflake 可见。

  • 已挂载暂存区中的每个目录应包含少于 100,000 个文件。预计 readdir 延迟会随着目录中文件数量的增加而增加。

  • 暂存区挂载不是网络文件系统。不要使用暂存区挂载进行多客户协调。

  • 不要同时打开同一个文件的多个句柄。使用打开的文件句柄进行读取或写入操作,但不能将两者混用。要在写入文件后读取文件,请关闭该文件,然后在读取之前重新打开该文件。

语言: 中文