阿帕奇·胡迪 是一种开放表格式,可为数据湖带来数据库和数据仓库功能。 Apache Hudi 帮助数据工程师应对复杂的挑战,例如通过事务管理不断发展的数据集,同时保持查询性能。 数据工程师使用 Apache Hudi 来传输工作负载并创建高效的增量数据管道。 Hudi提供 表, 交易, 高效的更新插入和删除, 高级指标, 流媒体摄取服务, 数据 集群 和 压实 优化,和 并发控制,同时将数据保存为开源文件格式。 Hudi 的高级性能优化使任何流行查询引擎(包括 Apache Spark、Presto、Trino、Hive 等)的分析工作负载速度更快。
许多 AWS 客户在其基于 Amazon S3 构建的数据湖上采用了 Apache Hudi,使用 AWS胶水,一种无服务器数据集成服务,可以更轻松地发现、准备、移动和集成来自多个来源的数据,以进行分析、机器学习 (ML) 和应用程序开发。 AWS Glue 爬虫 是 AWS Glue 的一个组件,它允许您自动从数据内容创建表元数据,而无需手动定义元数据。
AWS Glue 爬网程序现在支持 Apache Hudi 表,简化采用 AWS Glue数据目录 作为 Hudi 表的目录。 一种典型的用例是注册 Hudi 表,它没有目录表定义。 另一个典型的用例是从其他 Hudi 目录(例如 Hive 元存储)迁移。 从其他 Hudi 目录迁移时,您可以创建和计划 AWS Glue 爬网程序并提供 Hudi 表文件所在的一个或多个 Amazon S3 路径。 您可以选择提供 AWS Glue 爬网程序可以遍历的 Amazon S3 路径的最大深度。 每次运行时,AWS Glue 爬网程序都会提取架构和分区信息,并使用架构和分区更改更新 AWS Glue 数据目录。 AWS Glue 爬网程序更新 AWS 分析引擎可以直接使用的 AWS Glue 数据目录中的最新元数据文件位置。
通过此次发布,您可以创建并安排 AWS Glue 爬网程序以在 AWS Glue 数据目录中注册 Hudi 表。 然后,您可以提供 Hudi 表所在的一个或多个 Amazon S3 路径。 您可以选择提供爬网程序可以遍历的 Amazon S3 路径的最大深度。 每次爬网程序运行时,爬网程序都会检查每个 S3 路径并对架构信息进行编目,例如 AWS Glue 数据目录中架构的新表、删除和更新。 爬网程序检查分区信息并将新添加的分区添加到 AWS Glue 数据目录。 爬网程序还会更新 AWS 分析引擎可以直接使用的 AWS Glue 数据目录中的最新元数据文件位置。
这篇文章演示了这种抓取 Hudi 表的新功能是如何工作的。
AWS Glue 爬网程序如何与 Hudi 表配合使用
Hudi 表有两个类别,每个类别都有特定的含义:
- 写时复制 (CoW) – 数据以列式格式 (Parquet) 存储,每次更新在写入期间都会创建文件的新版本。
- 读取时合并 (MoR) – 使用列式 (Parquet) 和基于行 (Avro) 格式的组合来存储数据。 更新记录到基于行的
delta
文件并根据需要进行压缩以创建新版本的柱状文件。
对于 CoW 数据集,每次更新记录时,包含该记录的文件都会用更新的值重写。 对于 MoR 数据集,每次更新时,Hudi 仅写入已更改记录的行。 MoR 更适合写入或更改较多且读取较少的工作负载。 CoW 更适合对更改频率较低的数据进行读取繁重的工作负载。
Hudi 提供了三种用于访问数据的查询类型:
- 快照查询 – 查看给定提交或压缩操作时表的最新快照的查询。 对于 MoR 表,快照查询通过合并查询时最新文件切片的基本文件和增量文件来公开表的最新状态。
- 增量查询 – 查询只能看到自给定提交或压缩以来写入表的新数据。 这有效地提供了变更流以启用增量数据管道。
- 读取优化查询 – 对于 MoR 表,查询会看到压缩后的最新数据。 对于 CoW 表,查询会看到提交的最新数据。
对于写时复制表,爬网程序使用 ReadOptimized Serde 在 AWS Glue 数据目录中创建单个表 org.apache.hudi.hadoop.HoodieParquetInputFormat
.
对于读取时合并表,爬网程序在 AWS Glue 数据目录中为同一表位置创建两个表:
- 带后缀的表
_ro
,它使用 ReadOptimized Serdeorg.apache.hudi.hadoop.HoodieParquetInputFormat
- 带后缀的表
_rt
,它使用 RealTime Serde 允许快照查询:org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat
在每次爬网期间,对于提供的每个 Hudi 路径,爬网程序都会进行 Amazon S3 列表 API 调用,并根据 .hoodie
文件夹,然后在该 Hudi 表元数据文件夹下找到最新的元数据文件。
使用 AWS Glue 爬网程序爬网 Hudi CoW 表
在本部分中,我们将介绍如何使用 AWS Glue 爬网程序爬网 Hudi CoW。
先决条件
以下是本教程的先决条件:
- 安装和配置 AWS命令行界面(AWS CLI).
- 如果您没有 S3 存储桶,请创建它。
- 为 AWS Glue 创建 IAM 角色 如果你没有它。 你需要
s3:GetObject
s3://your_s3_bucket/data/sample_hudi_cow_table/
. - 运行以下命令将示例 Hudi 表复制到 S3 存储桶中。 (代替
your_s3_bucket
使用您的 S3 存储桶名称。)
本说明指导您复制示例数据,但您可以使用 AWS Glue 轻松创建任何 Hudi 表。 了解更多信息 在 AWS Glue for Apache Spark 上引入对 Apache Hudi、Delta Lake 和 Apache Iceberg 的原生支持,第 2 部分:AWS Glue Studio 可视化编辑器.
创建Hudi爬虫
在本说明中,通过控制台创建爬网程序。 完成以下步骤创建Hudi爬虫:
- 在 AWS Glue 控制台上,选择 爬行.
- 创建爬虫.
- 针对 名字,输入
hudi_cow_crawler
。 选 下一页. - 下 数据源配置, 选择 添加数据源.
- 针对 数据源,选择 胡迪.
- 针对 包含hudi表路径,输入
s3://your_s3_bucket/data/sample_hudi_cow_table/
. (代替your_s3_bucket
使用您的 S3 存储桶名称。) - 添加Hudi数据源.
- 下一页.
- 针对 现有 IAM 角色,选择您的 IAM 角色,然后选择 下一页.
- 针对 目标数据库,选择 添加数据库,则 添加数据库 对话框出现。 为了 数据库名称,输入
hudi_crawler_blog
,然后选择 创建。 选 下一页. - 创建爬虫.
现在一个新的Hudi爬虫就已经成功创建了。 可以使用以下命令通过控制台或通过开发工具包或 AWS CLI 触发爬网程序运行: StartCrawl
应用程序接口。 它还可以通过控制台安排在特定时间触发爬虫。 在本说明中,通过控制台运行爬虫。
- 运行搜寻器.
- 等待爬虫完成。
爬网程序运行后,您可以在 AWS Glue 控制台中看到 Hudi 表定义:
您已成功抓取包含 Amazon S3 上数据的 Hudi CoR 表,并创建了填充了架构的 AWS Glue 数据目录表。 在 AWS Glue Data Catalog 上创建表定义后,Amazon Athena 等 AWS 分析服务就可以查询 Hudi 表。
完成以下步骤以在 Athena 上启动查询:
- 打开亚马逊雅典娜控制台。
- 运行以下查询。
以下屏幕截图显示了我们的输出:
使用具有 AWS Lake Formation 数据权限的 AWS Glue 爬网程序爬网 Hudi MoR 表
在本部分中,我们将介绍如何使用 AWS Glue 爬网 Hudi MoR 表。 这次,您使用 AWS Lake Formation 数据权限来爬网 Amazon S3 数据源,而不是 IAM 和 Amazon S3 权限。 这是可选的,但当您的数据湖由 AWS Lake Formation 权限管理时,它可以简化权限配置。
先决条件
以下是本教程的先决条件:
- 安装和配置 AWS命令行界面(AWS CLI).
- 如果您没有 S3 存储桶,请创建它。
- 为 AWS Glue 创建 IAM 角色 如果你没有它。 你需要
lakeformation:GetDataAccess
。 但你不需要s3:GetObject
s3://your_s3_bucket/data/sample_hudi_mor_table/
因为我们使用 Lake Formation 数据权限来访问文件。 - 运行以下命令将示例 Hudi 表复制到 S3 存储桶中。 (代替
your_s3_bucket
使用您的 S3 存储桶名称。)
除了处理步骤之外,还可以完成以下步骤来更新 AWS Glue 数据目录设置,以使用 Lake Formation 权限来控制目录资源,而不是基于 IAM 的访问控制:
- 以数据湖管理员身份登录 Lake Formation 控制台。
- 如果这是第一次访问 Lake Formation 控制台, 将自己添加为数据湖管理员。
- 下 行政和支持部门,选择 数据目录设置.
- 针对 新创建的数据库和表的默认权限,取消选择 仅对新数据库使用 IAM 访问控制 和 仅对新数据库中的新表使用 IAM 访问控制.
- 针对 跨账户版本设置,选择 版本 3.
- 保存.
下一步是在 Lake Formation 数据湖位置注册您的 S3 存储桶:
- 在 Lake Formation 控制台上,选择 数据湖位置,并选择 注册地点.
- 针对 Amazon S3路径,输入
s3://your_s3_bucket/
。 (代替your_s3_bucket
使用您的 S3 存储桶名称。) - 注册地点.
然后,授予 Glue 爬虫角色对数据位置的访问权限,以便爬虫可以使用 Lake Formation 权限访问数据并在该位置创建表:
- 在 Lake Formation 控制台上,选择 数据位置 并选择 格兰特.
- 针对 IAM用户和角色,选择您用于爬网程序的 IAM 角色。
- 针对 存储位置,输入
s3://your_s3_bucket/data
/。 (代替your_s3_bucket
使用您的 S3 存储桶名称。) - 格兰特.
然后,授予爬虫角色,在数据库下创建表 hudi_crawler_blog
:
- 在 Lake Formation 控制台上,选择 数据湖权限.
- 格兰特.
- 针对 Principals,选择 IAM用户和角色,然后选择爬虫角色。
- 针对 LF 标签或目录资源,选择 命名数据目录资源.
- 针对 数据库, 选择数据库
hudi_crawler_blog
. - 下 数据库权限, 选择 创建表格.
- 格兰特.
创建具有Lake Formation数据权限的Hudi爬虫
完成以下步骤创建Hudi爬虫:
- 在 AWS Glue 控制台上,选择 爬行.
- 创建爬虫.
- 针对 名字,输入
hudi_mor_crawler
。 选 下一页. - 下 数据源配置, 选择 添加数据源.
- 针对 数据源,选择 胡迪.
- 针对 包含hudi表路径,输入
s3://your_s3_bucket/data/sample_hudi_mor_table
/。 (代替your_s3_bucket
使用您的 S3 存储桶名称。) - 添加Hudi数据源.
- 下一页.
- 针对 现有 IAM 角色,选择您的 IAM 角色。
- 下 Lake Formation 配置 – 可选, 选择 使用 Lake Formation 凭据爬取 S3 数据源.
- 下一页.
- 针对 目标数据库,选择
hudi_crawler_blog
。 选 下一页. - 创建爬虫.
现在一个新的Hudi爬虫就已经成功创建了。 该爬网程序使用 Lake Formation 凭证来爬网 Amazon S3 文件。 让我们运行新的爬虫:
- 运行搜寻器.
- 等待爬虫完成。
爬网程序运行后,您可以在 AWS Glue 控制台中看到 Hudi 表定义的两个表:
sample_hudi_mor_table_ro
(阅读优化表)sample_hudi_mor_table_rt
(实时表)
您向 Lake Formation 注册了数据湖存储桶,并使用 Lake Formation 权限启用了对数据湖的爬网访问。 您已成功爬取包含 Amazon S3 上数据的 Hudi MoR 表,并创建了填充了架构的 AWS Glue 数据目录表。 在 AWS Glue Data Catalog 上创建表定义后,Amazon Athena 等 AWS 分析服务就可以查询 Hudi 表。
完成以下步骤以在 Athena 上启动查询:
- 打开亚马逊雅典娜控制台。
- 运行以下查询。
以下屏幕截图显示了我们的输出:
- 运行以下查询。
以下屏幕截图显示了我们的输出:
使用 AWS Lake Formation 权限进行细粒度访问控制
要对 Hudi 表应用细粒度访问控制,您可以受益于 AWS Lake Formation 权限。 Lake Formation 权限允许您限制对特定表、列或行的访问,然后通过具有细粒度访问控制的 Amazon Athena 查询 Hudi 表。 让我们为 Hudi MoR 表配置 Lake Formation 权限。
先决条件
以下是本教程的先决条件:
- 完成上一节 使用具有 AWS Lake Formation 数据权限的 AWS Glue 爬网程序爬网 Hudi MoR 表.
- 创建具有 AWS 托管策略的 IAM 用户 DataAnalyst 亚马逊雅典娜完全访问.
创建 Lake Formation 数据单元格过滤器
我们首先为 MoR 读取优化表设置一个过滤器。
- 以数据湖管理员身份登录 Lake Formation 控制台。
- 数据过滤器.
- 建立新的筛选器.
- 针对 数据过滤器名称,输入
exclude_product_price
. - 针对 目标数据库, 选择数据库
hudi_crawler_blog
. - 针对 目标表, 选择表
sample_hudi_mor_table_ro
. - 针对 列级 访问,选择 排除列,然后选择列价格。
- 针对 行过滤器表达式,输入
true
. - 创建过滤器.
向 DataAnalyst 用户授予 Lake Formation 权限
完成以下步骤,将 Lake Formation 权限授予 DataAnalyst
用户
- 在 Lake Formation 控制台上,选择 数据湖权限.
- 格兰特.
- 针对 Principals,选择 IAM用户和角色,然后选择用户
DataAnalyst
. - 针对 LF 标签或目录资源,选择 命名数据目录资源.
- 针对 数据库, 选择数据库
hudi_crawler_blog
. - 针对 桌子 – 可选, 选择表
sample_hudi_mor_table_ro
. - 针对 数据过滤器 – 可选, 选择
exclude_product_price
. - 针对 数据过滤权限, 选择 选择.
- 格兰特.
您授予了 Lake Formation 对数据库的权限 hudi_crawler_blog
和桌子 sample_hudi_mor_table_ro
,不包括列 price
给 DataAnalyst 用户。 现在让我们使用 Athena 验证用户对数据的访问。
- 以 DataAnalyst 用户身份登录 Athena 控制台。
- 在查询编辑器上,运行以下查询:
以下屏幕截图显示了我们的输出:
现在您验证了该列 price
未显示,但其他列 product_id
, product_name
, update_at
及 category
显示。
清理
为了避免您的 AWS 账户产生不必要的费用,请删除以下 AWS 资源:
- 删除 AWS Glue 数据库
hudi_crawler_blog
. - 删除 AWS Glue 爬网程序
hudi_cow_crawler
和hudi_mor_crawler
. - 删除下面的 Amazon S3 文件
s3://your_s3_bucket/data/sample_hudi_cow_table/
和s3://your_s3_bucket/data/sample_hudi_mor_table/
.
结论
本文演示了 AWS Glue 爬网程序如何处理 Hudi 表。 借助对 Hudi 爬网程序的支持,您可以快速转而使用 AWS Glue 数据目录作为主要 Hudi 表目录。 您可以开始使用 AWS 上的 Hudi 构建无服务器事务数据湖,使用 AWS Glue、AWS Glue 数据目录和 Lake Formation 对 AWS 分析引擎支持的表和格式进行细粒度访问控制。
关于作者
关山则隆 是 AWS Glue 团队的首席大数据架构师。 他在日本东京工作。 他负责构建软件工件以帮助客户。 在业余时间,他喜欢骑着他的公路自行车骑行。
凯尔阳 是 AWS Glue 和 Lake Formation 团队的软件开发工程师。 他热衷于构建大数据技术和分布式系统。
桑迪普·阿德万卡尔 是 AWS 的高级技术产品经理。 他在加利福尼亚湾区工作,与全球客户合作,将业务和技术要求转化为产品,使客户能够改进他们管理、保护和访问数据的方式。
- :具有
- :是
- :不是
- :在哪里
- $UP
- 10
- 100
- 11
- 13
- 17
- 67
- 7
- 8
- 9
- a
- Able
- 关于
- ACCESS
- 访问数据
- 访问
- 账号管理
- 操作
- 加
- 添加
- 增加
- 采用
- 采用
- 高级
- 后
- 所有类型
- 让
- 允许
- 允许
- 还
- Amazon
- 亚马逊雅典娜
- 亚马逊网络服务
- an
- 分析
- 分析
- 和
- 另一个
- 任何
- 阿帕奇
- Apache Spark
- API
- 出现
- 应用领域
- 应用程序开发
- 使用
- 保健
- 国家 / 地区
- 围绕
- AS
- At
- 自动
- 避免
- AWS
- AWS胶水
- AWS湖形成
- 基地
- 基于
- 海湾
- BE
- 因为
- 很
- 得益
- 更好
- 大
- 大数据运用
- 带来
- 建筑物
- 建
- 商业
- 但是
- by
- 加州
- 呼叫
- CAN
- 能力
- 能力
- 案件
- 检索目录
- 目录
- 类别
- 细胞
- 挑战
- 更改
- 变
- 更改
- 收费
- 柱
- 列
- 组合
- 承诺
- 提交
- 完成
- 复杂
- 元件
- 配置
- 安慰
- 包含
- 内容
- 一直
- 控制
- 控制
- 可以
- 履带
- 创建信息图
- 创建
- 创建
- 资历
- 合作伙伴
- data
- 数据集成
- 数据湖
- 数据仓库
- 数据库
- 数据库
- 数据集
- 定义
- 定义
- Delta
- 证明
- 演示
- 深度
- 研发支持
- 直接
- 通过各种方式找到
- 分布
- 分布式系统
- do
- 不
- ,我们将参加
- 每
- 更容易
- 容易
- 编辑
- 只
- 高效
- enable
- 启用
- 工程师
- 工程师
- 引擎
- 输入
- 醚(ETH)
- 演变
- 排除
- 提取
- 快
- 少
- 文件
- 档
- 过滤
- 过滤器
- 找到最适合您的地方
- 姓氏:
- 第一次
- 以下
- 针对
- 格式
- 训练
- 频繁
- 止
- 特定
- 地球
- Go
- 授予
- 授予
- 指南
- Hadoop的
- 有
- he
- 帮助
- 帮助
- 他的
- 蜂房
- 创新中心
- How To
- HTML
- HTTPS
- IAM
- if
- 启示
- 改善
- in
- 包含
- 增量
- 信息
- 代替
- 整合
- 积分
- 接口
- 成
- 介绍
- IT
- 日本
- JPG
- 保持
- 湖泊
- 湖泊
- 最新
- 发射
- 学习用品
- 学习
- 减
- 极限
- Line
- 清单
- 位于
- 圖書分館的位置
- 地点
- 记录
- 机
- 机器学习
- 维持
- 使
- 制作
- 管理
- 管理
- 经理
- 管理的
- 手册
- 最多
- 合并
- 元数据
- 迁移
- 移民
- ML
- 更多
- 最先进的
- 移动
- 多
- 姓名
- 本地人
- 需求
- 打印车票
- 全新
- 新
- 下页
- 现在
- of
- on
- 一
- 仅由
- 打开
- 开放源码
- 优化
- 附加选项
- or
- 其他名称
- 我们的
- 产量
- 部分
- 多情
- 径
- 路径
- 性能
- 允许
- 权限
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 热门
- 人口稠密
- 帖子
- Prepare
- 先决条件
- 以前
- 车资
- 小学
- 校长
- 处理
- 产品
- 产品经理
- 核心产品
- 提供
- 提供
- 提供
- 查询
- 很快
- 阅读
- 真实
- 实时的
- 即时的
- 最近
- 记录
- 寄存器
- 在相关机构注册的
- 更换
- 岗位要求
- 资源
- 提供品牌战略规划
- 限制
- 路
- 角色
- 行
- 运行
- 同
- 始你
- 预定
- SDK
- 部分
- 安全
- 看到
- 选择
- 前辈
- 无服务器
- 服务
- 特色服务
- 集
- 设置
- 如图
- 作品
- 简化
- 自
- 单
- 切片
- 快照
- So
- 软件
- 软件开发
- 来源
- 来源
- 火花
- 具体的
- 开始
- 州/领地
- 步
- 步骤
- 存储
- 流
- 流
- 工作室
- 顺利
- 这样
- SUPPORT
- 支持
- 同步。
- 产品
- 表
- 团队
- 文案
- 技术
- 这
- 其
- 然后
- 那里。
- 他们
- Free Introduction
- 三
- 通过
- 次
- 时
- 至
- 东京
- 最佳
- 交易
- 交易
- 翻译
- 横过
- 触发
- 引发
- 教程
- 二
- 类型
- 普遍
- 下
- 无用
- 更新
- 更新
- 最新动态
- 使用
- 用例
- 用过的
- 用户
- 用户
- 使用
- 运用
- 验证
- 验证
- 价值观
- 版本
- 视觉
- 仓库保管
- we
- 卷筒纸
- Web服务
- 井
- ,尤其是
- 这
- 而
- WHO
- 将
- 也完全不需要
- 工作
- 合作
- 写
- 书面
- 您
- 您一站式解决方案
- 你自己
- 和风网