为了账号安全,请及时绑定邮箱和手机立即绑定

亚马逊S3新表格功能深度解析

标签:
云计算 AWS
1. 简介

在2024年的AWS re:Invent大会上,AWS发布了Amazon S3 Tables,这是一个专为可扩展存储和管理表格数据而设计的解决方案,它基于Apache Iceberg标准。在详细介绍Amazon S3 Tables之前,我们先来了解一下Apache Iceberg的相关信息。

什么是开放表格(OTF)?

在传统数据库中,使数据变得可读的过程通常包括安装数据库软件、创建数据库、定义模式、表或外部表,然后从这些表中读取数据。相比之下,采用开放表格式时,数据会直接以文件格式存储在数据湖中,如 Apache Parquet、Apache ORC 或 Apache Avro 等格式中。而不是将数据加载到传统数据库中,开放表格式允许你将这些文件组织和管理为虚拟表,这些虚拟表实际上位于文件目录之上。

为了简化查询过程,可以使用像 AWS Glue Catalog 这样的目录系统来注册这些虚拟表。这样,查询引擎如 Apache Spark、Trino 或 AWS Athena 就可以无缝地访问和处理数据。在可用的开放表格式中,Apache Iceberg、Delta Lake 和 Apache Hudi 是最广泛采用的。这些格式因其出色的性能、可扩展性和高级特性(如时间旅行查询和模式演变支持)而受到推崇。

Apache 冰山 (注:在软件和技术领域,“冰山”对应英文中的“Iceberg”)

Apache Bīngshān (注:在软件和技术领域,“冰山”对应英文中的“Iceberg”)

Apache Iceberg 是一个开源的表格式,用于在数据湖中处理大型数据集,它增加了对 ACID 事务、模式演进和时间旅行查询的支持,从而增强了系统功能。它有助于更可靠地管理在云存储系统(如 AWS S3 通用存储桶)中的数据,使数据湖在性能、数据完整性和灵活性方面更类似于传统数据库。

直到现在,S3 存储桶共有两种类型:一种是普通的通用存储桶;另一种是与 S3 Express 相关的目录存储桶,该存储桶在 2023 年的 re:Invent 大会上发布,性能更佳,支持分层存储。现在,随着 2024 年 re:Invent 大会的召开,又推出了一种新的存储桶类型——Amazon S3 Table 桶。

Amazon S3 存储桶

位于 Amazon S3 中的 Apache Iceberg 表是完全托管的,旨在更轻松且高效地存储和分析类似每日购买记录、传感器数据或广告展示的表格数据。这种数据组织方式是以行和列的形式,类似于数据库表。

通过 S3 Tables,您的数据会被存放在一种特殊的 S3 存储桶里,称为表存储桶,将表组织成子资源。这些存储桶支持 Apache Iceberg 格式,从而使您能够轻松管理和查询数据。

您可以使用标准SQL查询这些表,支持的工具如Amazon Athena、Amazon Redshift和Apache Spark等,这使得数据分析变得简单直接。S3表格不仅能提升查询性能,还能保持较低的存储费用。

    ######################  
    ## 创建 S3 表存储桶 ##
    ########################  

    aws s3control create-table-bucket \  
        --account-id <AWS_ACCOUNT_ID> \  
        --bucket-name data-bucket  

    ######################  
    ## 创建 S3 表 ##
    ########################  
    aws s3control create-table \  
        --account-id <AWS_ACCOUNT_ID> \  
        --bucket-name my-table-bucket \  
        --table-name my_table \  
        --table-type ICEBERG \  
        --namespace namespace1 
  1. 新的分类系统

命名空间(Namespace): 命名空间是逻辑分组的 S3 表。这些命名空间不是像 S3 表或表桶那样的物理资源,而是简单的组织工具,帮助您更有效地管理表。命名空间使控制访问和扩展数据管理变得更容易。

S3 表存储桶 & 表的策略:现在可以编写 bucket、表 基于资源的策略(RBAC)和 特定命名空间的策略

表格ARN:现在每个表格都拥有一个ARN,你可以用它来唯一标识并编写资源描述。

S3 表格端点: 现在我们有了新的 S3 表格接口端点,这是特定于各个区域的。

S3tables 操作API: 新增的操作API包括列出表、创建表、获取元数据位置、更新元数据位置、删除表

S3tables 管理 APIs 新增的管理用 APIs 设置表策略, 设置表桶策略, 设置表维护配置, 设置表桶维护配置

4. S3表格的物理架构

5. 为什么选择亚马逊S3?

Amazon S3 表结合了现代表存储系统的可扩展性、性能和管理性。通过提高性能、确保表级安全以及优化存储成本,它们解决了大规模管理表数据的关键挑战,使其非常强大。

5.1 性能增强

Amazon S3 表专门设计来高效处理分析工作负载。借助 Apache Iceberg 格式,S3 表利用分区修剪和元数据索引等特性提升查询效率。相比传统的自行管理的表存储:

更快的查询速度: S3 Tables(S3 表)可以通过优化数据访问和处理,使查询速度可提升至原来的3倍。

支持并发工作负载: 它们能提供高性能的读写操作,每秒的事务吞吐量可以比以前多10倍。

利用时间旅行查询功能,您可以以最小的代价检索您数据的历史版本,从而确保更快、更可靠的审计和调试过程。

5.2 表级别安全

管理数据湖中表格数据的访问和权限传统上比较复杂,而且容易出现不一致的问题。S3 表提供了强大的安全措施。

基于命名空间的访问控制:将表分组到例如人力资源或财务这样的命名空间,并设置更详细的访问控制策略来控制不同团队或部门的访问。

基于资源的策略: 在表或桶级别上应用特定于资源的策略,以控制谁可以读取、写入或修改数据的权限。

与 AWS IAM 集成:通过细粒度的权限设置,轻松管理用户访问权限。

5.3 降低存储成本

Amazon S3 表格可以帮助在多个方面降低大规模数据集的存储及管理成本:

高效管理元数据: Apache Iceberg 的基于树的元数据结构减少了数以百万计或数十亿文件的管理费用,从而大大降低了运营成本。

不再需要重复数据:与传统系统相比,我们不再需要在数据湖和数据仓库之间重复数据,节省了大量存储和处理成本。

6. 自动维护功能 — 全部由系统自动搞定!

您可以通过PutTableMaintenanceConfiguration API为S3表定义维护规则。该规则指定了任务的规则,比如压缩频度、数据过期时间或快照保留时间等。

AWS 会按照你设定的时间或条件自动执行这些规则。维护操作无需人工干预自动触发,确保表始终处于优化状态。

维护操作会更新内部 Iceberg 元数据文件(例如,清单表和快照文件),以反映表的当前状态。

    #########################  
    # 表维护配置  
    ###########################    

    {  
      "TableMaintenanceConfiguration": {  
        "Compaction": {  
          "Enabled": "启用",  
          "MaxFileSizeMB": "最大文件大小MB",  
          "CompactionFrequencyHours": "压缩频率小时"  
        },  
        "SnapshotRetention": {  
          "Enabled": "启用",  
          "MaxSnapshots": "最大快照数",  
          "RetentionPeriodDays": "保留周期天"  
        },  
        "GarbageCollection": {  
          "Enabled": "启用",  
          "OrphanedFileRetentionDays": "孤儿文件保留天数"  
        }  
      }  
    } 
使用 aws s3control put-table-maintenance-configuration 命令 \
    --账户ID <AWS_ACCOUNT_ID> \  
    --表名 <TABLE_NAME> \  
    --表维护配置 file://table-maintenance-config.json   

6.1 压实

压缩部分定义了将小文件合并为大文件的设置,这可以提高查询性能并减少元数据开销。启用: 表示是否启用了自动化压缩。例如:true 表示开启压缩过程。MaxFileSizeMB: 指定压缩后文件的目标最大大小(以兆字节为单位)。例如:128 表示文件将被压缩成大约 128 MB 的块。CompactionFrequencyHours: 设置压缩过程的运行频率。示例: 24 表示每 24 小时执行一次压缩过程。

6.2 快照保留

快照保留部分管理用于时间旅行查询和版本控制的表快照保留策略。是否启用快照保留的指示: 表示快照保留是否开启。例如: true 表示启用快照保留。最多保留的快照数: 定义最多保留的快照数量。例如: 5 表示仅保留最新的 5 个快照。保留时间天数: 指定快照的最大保留期限(以天为单位)。例如: 30 表示超过 30 天的快照将被自动删除。

6.3 垃圾回收

垃圾收集部分负责处理不再被任何活动快照引用的数据文件,这些文件被称为孤儿文件。是否启用: 表示垃圾收集是否已开启。 示例: 设置为 true 表示启用清理过程。保留孤儿文件的天数: 指定孤儿文件在被删除前应保留多久。 示例: 孤儿文件在被清理前将保留 7 天。

7. Amazon S3 表的访问权限管理
7.1 表存储桶级别:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "AllowBucketAction",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/dataengineer"
      },
      "Action": [
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData",
        "s3tables:ListTables",
        "s3tables:GetTableMaintenanceConfig",
        "s3tables:GetTableBucketMaintenanceConfig"
      ],
      "Resource": "arn:aws:s3tables:us-east-1:123456789012:bucket/data-bucket/table/*"
    }
  ]
}
7.2 表级别的访问控制规则:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "AllowTableAction",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/dataengineer"
      },
      "Action": [
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": "arn:aws:s3tables:us-east-1:123456789012:bucket/data-bucket/table/table-UUID"
    }
  ]
}
7.3 命名空间级访问控制策略 :
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "允许表操作",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/dataengineer"
      },
      "Action": [
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": "arn:aws:s3tables:us-east-1:123456789012:bucket/data-bucket/table/*",
      "Condition": {
        "StringLike": {
          "s3tables:namespace": "namespace1"
        }
      }
    }
  ]
}
8. 湖formation集成

你也可以开启Lake Formation功能,从而实现数据库、表,甚至是列级别的细粒度的访问控制。

Lake Formation带来的好处

列权限:允许特定用户仅访问表中的特定列。

行级过滤: 根据过滤条件限制对特定行的访问(部门 = ‘HR’)。

统一访问控制:在所有服务(例如 Athena、EMR 和 Redshift Spectrum)中,实施一致的访问控制规则。

Lake Formation 例如: 在 Lake Formation 中,您可以创建如下权限:将 data 分析师的权限限定为只能访问 table1 表中的 sales 和 region 两列。

Amazon Athena, Apache Spark 这样的查询引擎会遵循这些访问控制:当用户查询 S3 表时,会检查权限。如果使用了 Lake Formation,它会自动应用细粒度的访问策略,例如列级访问。

9. 灾难恢复

这是在AWS路线图中,目前暂时不可用。AWS S3 表仅限于特定区域。不过,您可以使用自定义解决方案来实现这一目标。

请参阅下面的示例:https://medium.com/@naren3883/how-to-backup-and-restore-apache-iceberg-table-5f09eeedc721

我的最后感想

Amazon S3 表使得管理和查询大量数据变得更加简单,解决了性能、安全性和成本等方面的难题。它们帮助企业现代化其数据系统架构并简化分析流程。然而,设置灾难恢复(DR)仍然需要一些手动操作。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消