Amoro(原名 Arctic)是一个基于开放数据湖格式构建的 Lakehouse 管理系统。 Amoro 与 Flink、Spark 和 Trino 等计算引擎合作,为 Lakehouse 带来可插拔和自我管理的功能,提供开箱即用的数据仓库体验,并帮助数据平台或产品轻松构建基础设施解耦、流式传输和-批量融合和湖泊原生架构。
Amoro的架构图如下:
- AMS:Amoro管理服务提供Lakehouse管理功能,如自优化、数据过期等。它还为所有计算引擎提供统一的目录服务,也可以与现有的元数据服务结合。
- 插件:Amoro 提供了多种外部插件可供选择,以满足不同的场景。
- 优化器:自优化执行引擎插件对所有类型表格式表异步执行合并、排序、去重、布局优化等操作。
- Terminal:SQL命令行工具,提供本地Spark、Kyuubi等多种实现。
- LogStore:基于Kafka、Pulsar等消息队列,提供毫秒级到秒级的SLA,用于实时数据处理。
Amoro可以管理不同表格式的表,类似于MySQL/ClickHouse可以选择不同的存储引擎。 Amoro通过使用不同的表格格式来满足不同的用户需求。目前,Amaro 支持四种表格格式:
- Iceberg格式:用户可以直接将自己的Iceberg表委托给Amoro进行维护,这样用户不仅可以使用Iceberg表的所有功能,还可以享受Amoro带来的性能和稳定性提升。
- 混合Iceberg格式:Amoro在Iceberg格式之上为流式更新场景提供了一组更优化的格式。如果用户对流式更新性能要求较高,或者对CDC增量数据读取功能有需求,可以选择使用Mixed-Iceberg格式。
- 混合Hive格式:很多用户在使用数据湖的同时,不希望影响原本建立在Hive上的业务。因此,Amoro提供了Mixed-Hive格式,只需通过元数据迁移即可将Hive表升级为Mixed-Hive格式,而原有的Hive表仍然可以正常使用。这样保证了业务的稳定性,并受益于数据湖计算的优势。
- Paimon 格式:Amoro 支持以 Paimon 格式显示元数据信息,包括 Schema、Options、Files、Snapshots、DDL 和 Compaction 信息。
Iceberg格式表使用Iceberg社区提供的引擎集成方法。详情请参考:Iceberg Docs。
Amoro 支持混合格式的多种处理引擎,如下所示:
| 处理引擎 | 版本 | 批量读取 | 批量写入 | 批量覆盖 | 流式阅读 | 流式写入 | 创建表 | 修改表 |
|---|---|---|---|---|---|---|---|---|
| 弗林克 | 1.15.x、1.16.x、1.17.x | ✔ | ✔ | ✖ | ✔ | ✔ | ✔ | ✖ |
| 火花 | 3.1、3.2、3.3 | ✔ | ✔ | ✔ | ✖ | ✖ | ✔ | ✔ |
| 蜂巢 | 2.x、3.x | ✔ | ✖ | ✔ | ✖ | ✖ | ✖ | ✔ |
| 特里诺 | 406 | ✔ | ✖ | ✔ | ✖ | ✖ | ✖ | ✔ |
- 自我优化——持续优化表,包括压缩小文件、更改文件、定期删除过期文件,以保持较高的查询性能并降低存储成本。
- 多种格式——支持Iceberg、Mixed-Iceberg、Mixed-Hive等不同表格式,满足不同场景需求,并提供统一管理能力。
- 目录服务 - 为所有计算引擎提供统一的目录服务,该服务也可以与现有的元数据存储服务(例如 Hive Metastore 和 AWS Glue)一起使用。
- 丰富的插件 - 提供各种插件与其他系统集成,例如使用 Flink 进行持续优化以及使用 Spark 和 Kyuubi 进行数据分析。
- 管理工具 - 提供多种管理工具,包括WEB UI和标准SQL命令行,帮助您更快上手并更轻松地与其他系统集成。
- 基础设施独立——可以在私有环境、云环境、混合云环境、多云环境中轻松部署和使用。
Amoro包含以下模块:
amoro-core包含其他模块的核心抽象和通用实现amoro-ams是amoro管理服务模块ams-api包含 ams thrift api 和常用接口ams-dashboard是 ams 的仪表板前端ams-server是ams的后端服务器ams-optimizer提供默认优化器实现
amoro-mixed-format提供混合格式实现amoro-hive与 Apache Hive 集成并实现混合 Hive 格式amoro-flink为混合格式表提供 Flink 连接器(使用 amoro-flink-runtime 作为阴影版本)amoro-spark为混合格式表提供 Spark 连接器(使用 amoro-spark-runtime 作为阴影版本)amoro-trino为混合格式表提供 Trino 连接器
Amoro 是使用 Maven 和 Java 1.8 和 Java 17(仅适用于mixed-format/trino模块)构建的。
- 构建 Trino 模块需要
toolchains.xml在${user.home}/.m2/目录中进行配置,内容为
<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>${YourJDK17Home}</jdkHome>
</configuration>
</toolchain>
</toolchains>
- 要调用构建并运行测试:
mvn package -P toolchain - 要跳过测试:
mvn -DskipTests package -P toolchain - 要在没有 trino 模块和 JAVA 17 依赖的情况下进行打包:
mvn clean package -DskipTests -pl '!mixed-format/trino' - 使用hadoop 2.x构建(默认为3.x)
mvn clean package -DskipTests -Dhadoop=v2 - 指示优化器的 Flink 版本(默认为 1.18.1):
mvn clean package -Dflink-optimizer.flink-version=1.15.4。如果Flink版本在1.15.0以下,还需要添加参数-Pflink-pre-1.15:mvn clean package -Pflink-pre-1.15 -Dflink-optimizer.flink-version=1.14.6。mvn clean package -Pflink-pre-1.15 -Dflink-optimizer.flink-version=1.14.6 -DskipTests
trino模块中默认跳过 Spotless 。所以如果你想在构建trino模块时执行checkstyle,你必须在Java 17环境中。
mixed-format/trino要在 Java 17 环境中调用构建包含模块:mvn clean package -DskipTests -P trino-spotless- 仅在 Java 17 环境中构建
mixed-format/trino及其依赖模块:mvn clean package -DskipTests -P trino-spotless -pl 'mixed-format/trino' -am
访问https://amoro.netease.com/quick-demo/快速探索 amoro 的功能。
如果您对Lakehouse、Data Lake Format感兴趣,欢迎加入我们的社区,我们欢迎任何组织、团队和个人共同成长,并真诚希望通过开源帮助用户更好地使用Data Lake Format。
加入阿莫罗微信群:添加“ kllnn999”为微信好友,并注明“阿莫罗爱人”。
这个项目的存在要感谢所有做出贡献的人。