第一章:Atlas 概述与核心概念
1.1 什么是 Atlas
| 概念名称 | 说明 | 注意事项 |
|---|
| Apache Atlas | 是一个开源的数据治理和元数据管理框架,用于对大数据平台中的数据资产进行分类、组织、治理和监控。 | Atlas 主要面向 Hadoop 生态系统,支持 Hive、HBase、Spark 等组件的元数据管理。 |
| 数据治理 | 指对数据的可用性、一致性、准确性、安全性等方面的管理活动。 | Atlas 提供了从元数据建模到血缘追踪的完整治理能力。 |
| 元数据管理 | 对数据的结构、来源、用途、关系等信息进行集中管理和可视化。 | Atlas 将元数据分为技术元数据、业务元数据和操作元数据。 |
1.2 Atlas 的主要应用场景
| 应用场景 | 说明 | 注意事项 |
|---|
| 数据目录(Data Catalog) | 构建企业级数据资产目录,便于用户搜索和理解数据。 | 可通过分类(Classification)为数据打标签,提升可发现性。 |
| 数据血缘分析(Data Lineage) | 追踪数据从源头到消费端的流转路径,用于影响分析和问题溯源。 | 血缘信息依赖 Hook 机制采集,需确保各组件正确集成。 |
| 合规性与安全治理 | 标记敏感数据(如 PII、GDPR),配合 Ranger 实现细粒度访问控制。 | 分类可设置自动传播策略,确保下游数据继承敏感标签。 |
| 影响分析 | 当某个数据表结构变更时,快速识别受影响的下游作业或报表。 | 依赖准确的血缘关系和实体依赖建模。 |
| 元数据审计与监控 | 记录元数据变更历史,支持版本追溯和审计需求。 | 所有变更操作均通过 REST API 记录,可集成日志系统。 |
1.3 Atlas 架构概览
| 组件名称 | 说明 | 注意事项 |
|---|
| Atlas Server | 核心服务进程,提供 REST API 和 UI,处理元数据的增删改查请求。 | 支持集群部署实现高可用,通常与 HBase 和 Solr 配套使用。 |
| HBase | 作为 Atlas 的持久化存储层,保存所有元数据对象(类型、实体、关系等)。 | HBase 需提前部署并配置与 Atlas 的连接参数。 |
| Solr | 提供全文检索和索引能力,加速元数据查询和搜索性能。 | SolrCloud 模式推荐用于生产环境以提升可用性和扩展性。 |
| Kafka | 用于异步事件通知,如元数据变更、血缘更新等消息广播。 | 所有变更事件通过 Kafka 发布,便于外部系统订阅和响应。 |
| Hook 机制 | 用于捕获外部系统(如 Hive、Spark)的元数据变更事件并上报 Atlas。 | 必须在对应组件中启用并配置 Hook 插件才能实现自动同步。 |
| REST API | 外部系统与 Atlas 交互的主要接口,支持类型、实体、分类等操作。 | 支持 JSON 格式请求/响应,可用于自动化脚本或集成开发。 |
| Web UI | 图形化界面,供用户浏览元数据、查看血缘、管理分类等操作。 | 基于 Atlas Server 提供的服务,需确保网络可达和认证通过。 |
1.4 元数据、实体、类型系统基本概念
| 概念名称 | 说明 | 注意事项 |
|---|
| 元数据(Metadata) | 描述数据的数据,如表名、字段、数据类型、所有者、创建时间等。 | Atlas 中元数据分为技术元数据(schema)、业务元数据(标签、术语)和操作元数据(访问日志)。 |
| 类型(Type) | 定义元数据结构的模板,如 Hive 表、Hive 列、StorageDesc 等。 | 所有实体必须基于某个类型创建,类型系统支持继承和多态。 |
| 实体(Entity) | 类型的具体实例,如某个具体的 Hive 表 sales_order。 | 每个实体有唯一 GUID,可通过属性(如 qualifiedName)定位。 |
| 分类(Classification) | 对实体打标签的方式,用于标记敏感性、生命周期、业务域等。 | 分类可动态添加/移除,支持自动传播到相关实体。 |
| 关系(Relationship) | 描述两个实体之间的关联,如”输入/输出”、“属于”、“引用”等。 | 血缘分析依赖关系链,关系类型由类型系统预定义。 |
| qualifiedName | 实体的全局唯一标识符,通常由命名空间规则生成,如 sales_order@hive。 | 建议统一命名规范,避免冲突,是查询和关联的关键字段。 |
| GUID(全局唯一标识) | Atlas 为每个实体分配的唯一 ID,用于内部引用和追踪。 | 即使实体被删除,GUID 仍保留用于审计和血缘回溯。 |
第二章:环境搭建与基础配置
2.1 Atlas 安装与部署方式
| 部署方式 | 说明 | 注意事项 |
|---|
| 源码编译安装 | 从 Apache 官网下载源码,使用 Maven 构建并生成安装包。 | 需要 JDK 8+、Maven 3.3+ 环境,构建过程耗时较长。 |
| 二进制包安装 | 使用官方发布的二进制压缩包(如 apache-atlas-*.tar.gz)直接解压部署。 | 推荐用于测试环境,确保依赖组件已独立部署。 |
| Ambari 集成安装 | 在 HDP(Hortonworks Data Platform)中通过 Ambari 图形化安装 Atlas。 | 自动处理依赖关系,适合企业级 Hadoop 集群部署。 |
| Docker 部署 | 使用社区提供的 Docker 镜像快速启动 Atlas 服务。 | 适用于开发和演示环境,不推荐用于生产。 |
| Kubernetes 部署 | 基于 Helm Chart 或 Operator 在 K8s 集群中部署 Atlas。 | 需要熟悉 K8s 编排,适合云原生架构场景。 |
2.2 依赖组件(HBase, Solr, Kafka)配置说明
| 组件 | 配置要点 | 注意事项 |
|---|
| HBase | 配置 atlas.graph.storage.hostname 指向 HBase 集群地址,确保 ZooKeeper 可访问。 | HBase 需开启 Thrift 或 REST 接口,建议使用独立集群避免资源争用。 |
| Solr | 配置 atlas.indexer.solr.zookeeper-url 指向 SolrCloud 的 ZooKeeper 地址。 | 建议使用 SolrCloud 模式,提前创建 Atlas 所需的 collection。 |
| Kafka | 配置 atlas.kafka.bootstrap.servers 指定 Kafka broker 地址列表。 | Kafka 需创建 ATLAS_ENTITIES 主题,用于元数据变更通知。 |
| ZooKeeper | Atlas 自身也使用 ZooKeeper 进行服务发现和协调(高可用模式下)。 | 若启用 HA,需配置多个 ZooKeeper 节点地址。 |
2.3 Atlas Server 启动与验证
| 操作步骤 | 说明 | 注意事项 |
|---|
| 配置文件检查 | 编辑 atlas-env.sh 和 atlas-application.properties,确认数据库、索引、Kafka 等配置正确。 | 特别注意 atlas.rest.address 和 atlas.server.bind.address 设置。 |
| 启动命令 | 执行 bin/atlas_start.py 脚本启动 Atlas Server。 | 首次启动会自动初始化 HBase 表结构和 Solr 索引。 |
| 日志查看 | 查看 logs/atlas.log 和 logs/atlas.out,确认无错误信息。 | 关注 HBase 连接失败、Solr 超时、Kafka 无法连接等常见问题。 |
| 服务验证 | 访问 http://:21000,登录默认用户 admin / admin。 | 若页面无法加载,检查防火墙、端口占用和依赖服务状态。 |
| REST API 测试 | 使用 curl -u admin:admin http://:21000/api/atlas/v2/types/typedefs 查询类型定义。 | 成功返回 JSON 数据表示服务正常。 |
2.4 Atlas Web UI 介绍与使用
| 功能模块 | 说明 | 注意事项 |
|---|
| Dashboard(仪表盘) | 显示元数据统计信息,如实体数量、类型分布、最近活动等。 | 用于快速了解元数据整体情况。 |
| Search(搜索) | 支持按名称、类型、分类等条件搜索元数据实体。 | 支持模糊搜索和高级筛选,依赖 Solr 索引。 |
| Types(类型管理) | 查看和管理所有类型定义(Class、Enum、Struct)。 | 可查看内置类型或自定义类型的属性和关系。 |
| Entities(实体管理) | 浏览具体实体详情,包括属性、分类、关系和血缘。 | 可手动添加/移除分类,查看实体变更历史。 |
| Lineage(血缘图) | 可视化展示某个实体的数据来源和去向。 | 支持前后向血缘查看,依赖 Hook 采集的数据。 |
| Tags(标签管理) | 管理所有分类(Classification),支持创建、编辑和删除。 | 删除分类前需确认无实体正在使用。 |
| Admin(管理) | 查看系统状态、配置信息、用户权限等。 | 生产环境建议限制管理员权限访问。 |
第三章:类型系统(Type System)
3.1 类型系统概述
| 概念名称 | 说明 | 注意事项 |
|---|
| 类型系统(Type System) | Atlas 的核心元数据建模机制,用于定义元数据对象的结构和关系。 | 所有元数据实体必须基于预定义的类型创建。 |
| 类型(Type) | 描述某一类元数据对象的模板,如 Hive 表、Hive 列等。 | 类型是静态的,定义了实体的属性、数据类型和约束。 |
| 类型层次 | 支持继承机制,子类型可继承父类型的属性并扩展新属性。 | 例如 DataSet 是 Asset 的子类型,HiveTable 是 DataSet 的子类型。 |
| 类型分类 | 主要分为 Class、Struct、Enum、Trait(Classification)、Association 等。 | Class 用于实体定义,Struct 用于复合属性,Enum 用于枚举值。 |
| typedef(类型定义) | 类型的完整定义结构,包含名称、属性、超类型、关系等信息。 | 通过 REST API 操作 typedef 实现类型管理。 |
3.2 内置类型与系统类型
| 类型名称 | 类型分类 | 说明 | 注意事项 |
|---|
| Asset | Class | 所有数据资产的基类,包含 common metadata(如名称、所有者)。 | 不可直接实例化,用于继承。 |
| DataSet | Class | 数据集的抽象类型,如表、文件等,继承自 Asset。 | 大多数数据实体(如 HiveTable)继承自此类型。 |
| Process | Class | 表示数据处理过程,如 ETL 作业、Spark 任务等。 | 用于构建血缘关系中的处理节点。 |
| HiveTable | Class | 表示 Hive 表的完整结构,包含列、分区、存储信息等。 | 由 Hive Hook 自动创建,也可手动定义。 |
| HiveColumn | Class | 表示 Hive 表中的列,包含数据类型、注释等。 | 与 HiveTable 通过 columns 关联。 |
| Classification | Class | 用于定义分类(标签)类型,如 PII、GDPR。 | 可附加到任何实体上。 |
| Enum | Type | 枚举类型,用于定义一组固定取值的字段。 | 如 DataTier 可定义为 dev, prod, staging。 |
| Struct | Type | 结构化类型,用于组合多个字段,作为 Class 的属性使用。 | 不可独立实例化,常用于扩展复杂属性。 |
| PolicyTag | Class | 与 Ranger 集成使用的策略标签类型。 | 用于安全策略的元数据绑定。 |
3.3 自定义类型定义(Class, Enum, Struct)
| 类型分类 | 说明 | 注意事项 |
|---|
| Class(类) | 用于定义可实例化的元数据实体类型,如自定义的 KafkaTopic。 | 必须指定 superTypes(如 DataSet),支持多继承。 |
| Enum(枚举) | 定义一组命名的常量值,用于字段约束。 | 需提供值列表和可选的描述,常用于状态字段。 |
| Struct(结构体) | 定义无独立 GUID 的复合数据结构,作为其他类型的属性嵌入。 | 不能被分类或拥有关系,仅用于数据组织。 |
| Trait(特质) | 特殊的 Class 类型,用于动态附加行为或标签到实体。 | 即 Classification 类型,可运行时添加/移除。 |
| Association | 定义两个类型之间的关系,如 HiveTable 与 HiveColumn 的一对多关系。 | 需指定关系名称、方向和基数。 |
3.4 类型的创建、查询与删除操作
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 创建类型(POST) | POST /api/atlas/v2/types/typedefs | 批量创建一个或多个类型定义。 | 见下方 JSON 示例 | 必须以 typedefs 格式提交,支持多类型批量创建。 |
| 查询所有类型 | GET /api/atlas/v2/types/typedefs | 获取系统中所有类型定义。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/typedefs | 响应数据量大,建议按需查询特定类型。 |
| 查询指定类型 | GET /api/atlas/v2/types/typedef/name/{name} | 获取某个具体类型的定义。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/typedef/name/HiveTable | 替换 {name} 为实际类型名。 |
| 删除类型 | DELETE /api/atlas/v2/types/typedef/name/{name} | 删除指定名称的类型定义。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/types/typedef/name/DataSensitivity | 仅能删除无实体引用的自定义类型,内置类型不可删除。 |
| 更新类型 | PUT /api/atlas/v2/types/typedefs | 更新现有类型定义(需完整结构)。 | 同创建类型,但使用 PUT 方法并包含现有类型定义。 | 类型更新受限,不支持删除已有属性,仅可新增。 |
创建类型请求示例
{
"classTypes": [],
"enumTypes": [
{
"name": "DataSensitivity",
"typeVersion": "1.0",
"values": [
{ "value": "Public", "description": "公开数据" },
{ "value": "Internal", "description": "内部数据" }
]
}
],
"structTypes": [],
"classificationTypes": [],
"entityTypes": []
}
第四章:实体管理(Entities)
4.1 实体(Entity)概念与结构
| 概念名称 | 说明 | 注意事项 |
|---|
| 实体(Entity) | 类型的具体实例,如一个名为 user_info 的 Hive 表。 | 每个实体对应一条业务数据对象。 |
| GUID | 全局唯一标识符,由 Atlas 自动生成,用于唯一标识实体。 | 即使实体删除,GUID 仍保留用于血缘追溯。 |
| qualifiedName | 用户定义的全局唯一名称,用于定位实体(如 user_info@dev)。 | 建议统一命名规范,是查询和关联的关键字段。 |
| 属性(Attributes) | 实体的字段,由其类型定义决定,如表名、列列表、所有者等。 | 支持基本类型和复杂类型(Struct、Array)。 |
| 分类(Classifications) | 附加在实体上的标签,用于标记敏感性、生命周期等。 | 可动态添加/移除,支持传播策略。 |
| 状态(Status) | 实体状态,如 ACTIVE、DELETED。 | 删除操作为软删除,状态变为 DELETED。 |
| 创建/更新时间 | 记录实体的创建和最后修改时间戳。 | 用于审计和变更追踪。 |
4.2 创建实体(REST API 与 UI)
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 创建实体(API) | POST /api/atlas/v2/entity | 创建一个或多个实体实例。 | 见下方 JSON 示例 | 必须指定 typeName 和 qualifiedName,属性需符合类型定义。 |
| 通过 UI 创建 | Web UI → Entities → Create Entity | 图形化创建实体(有限类型支持)。 | 无 | 仅适用于简单类型,复杂结构建议使用 API。 |
| 批量创建实体 | POST /api/atlas/v2/entity/bulk | 一次性创建多个同类型或不同类型实体。 | 见下方 JSON 示例 | 提升批量导入效率,减少网络开销。 |
创建实体请求示例
{
"entities": [
{
"typeName": "hive_table",
"attributes": {
"qualifiedName": "sales_2025@hive",
"name": "sales_2025",
"description": "2025年销售数据",
"owner": "data_team"
}
}
]
}
批量创建实体请求示例
{
"entities": [
{ "typeName": "hive_table", "attributes": { "qualifiedName": "t1@hive" } },
{ "typeName": "hive_table", "attributes": { "qualifiedName": "t2@hive" } }
]
}
4.3 查询与检索实体
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 按 GUID 查询 | GET /api/atlas/v2/entity/guid/{guid} | 根据 GUID 获取实体详情。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123 | 最精确的查询方式,返回完整实体信息。 |
| 按属性查询 | GET /api/atlas/v2/entity/bulk?attr_name={value} | 根据属性值批量查询实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/entity/bulk?attr:qualifiedName=sales_2025@hive" | 支持 attr: 前缀,仅支持索引字段。 |
| 按分类查询 | GET /api/atlas/v2/entity/bulk/classification/{classification} | 获取带有指定分类的所有实体。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/bulk/classification/PII | 用于合规性审计和敏感数据发现。 |
| DSL 查询 | POST /api/atlas/v2/search/dsl | 使用 DSL 语法执行复杂查询。 | 见下方 JSON 示例 | 支持条件、排序、分页,功能强大。 |
| 全文搜索 | GET /api/atlas/v2/search/basic?query={keyword} | 全文关键字搜索实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/search/basic?query=sales" | 依赖 Solr 全文索引,支持模糊匹配。 |
DSL 查询请求示例
{
"typeName": "hive_table",
"dsl": "hive_table where name='sales_2025'"
}
4.4 更新与删除实体
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 更新实体属性 | PUT /api/atlas/v2/entity/guid/{guid} | 修改实体的属性值。 | 见下方 JSON 示例 | 必须提供完整实体结构或使用 partialUpdate(部分更新)。 |
| 部分更新属性 | POST /api/atlas/v2/entity/partial | 仅更新指定属性,不覆盖整个实体。 | 见下方 JSON 示例 | 推荐用于小范围修改,避免误覆盖。 |
| 删除实体 | DELETE /api/atlas/v2/entity/guid/{guid} | 删除指定 GUID 的实体(软删除)。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123 | 实际为状态置为 DELETED,仍可通过历史接口查询。 |
| 批量删除实体 | DELETE /api/atlas/v2/entity/bulk?guid={g1}&guid={g2} | 一次性删除多个实体。 | curl -X DELETE -u admin:admin "http://atlas:21000/api/atlas/v2/entity/bulk?guid=abc123&guid=def456" | 每次最多删除 100 个实体,需提供 GUID 列表。 |
更新实体属性请求示例
{
"entity": {
"guid": "abc123",
"typeName": "hive_table",
"attributes": {
"description": "更新后的描述"
}
}
}
部分更新属性请求示例
{
"entity": {
"guid": "abc123",
"attributes": {
"owner": "new_owner"
}
}
}
4.5 实体分类(Classification)操作
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 添加分类 | POST /api/atlas/v2/entity/guid/{guid}/classifications | 为实体添加一个或多个分类。 | 见下方 JSON 示例 | 分类必须已存在,支持附加属性。 |
| 查询实体分类 | GET /api/atlas/v2/entity/guid/{guid}/classifications | 获取实体当前所有分类。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classifications | 返回分类名称、创建时间、属性等信息。 |
| 移除分类 | DELETE /api/atlas/v2/entity/guid/{guid}/classification/{classificationName} | 移除实体上的指定分类。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classification/PII | 仅移除该实体上的分类,不影响其他实体。 |
| 批量添加分类 | POST /api/atlas/v2/entity/bulk/classifications | 为多个实体批量添加同一分类。 | 见下方 JSON 示例 | 提升标签管理效率,适用于大规模打标。 |
| 分类传播 | 配置 classification 的 propagate 属性 | 控制分类是否自动传播到关联实体。 | 在定义 Classification 类型时设置 “propagate”: true | 例如 PII 标签可传播到下游表,需谨慎使用。 |
添加分类请求示例
{
"classifications": [
{
"typeName": "PII",
"attributes": {
"confidence": 95
}
}
]
}
批量添加分类请求示例
{
"classification": { "typeName": "GDPR" },
"entityGuids": ["abc123", "def456"]
}
第五章:分类与标签(Classifications)
5.1 分类(Classification)的作用与设计
| 概念名称 | 说明 | 注意事项 |
|---|
| 分类(Classification) | 又称标签(Tag),用于对元数据实体进行标记,表达其业务含义、安全等级、生命周期等属性。 | 是实现数据治理策略的关键机制。 |
| 动态绑定 | 分类可在实体创建后动态添加或移除,无需修改类型定义。 | 提供灵活的元数据管理能力。 |
| 多分类支持 | 一个实体可同时拥有多个分类,如 PII、GDPR、Finance。 | 支持多维度数据组织和策略应用。 |
| 与 Ranger 集成 | 分类可作为 Ranger 策略的匹配条件,实现基于标签的访问控制。 | 需启用 Atlas-Ranger 集成插件。 |
| 自动化打标 | 可通过规则引擎或机器学习模型自动为实体打上分类。 | 如基于字段名识别 PII 数据并自动标记。 |
| 传播机制(Propagation) | 分类可配置是否自动传播到相关实体(如下游表、列)。 | 用于确保敏感数据策略的延续性。 |
5.2 创建与管理分类
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 创建分类类型 | POST /api/atlas/v2/types/typedefs | 定义新的 Classification 类型。 | 见下方 JSON 示例 | 必须在 classificationTypes 数组中定义,可设置 options 和属性。 |
| 查询所有分类类型 | GET /api/atlas/v2/types/classificationdefs | 获取系统中所有已定义的分类类型。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/classificationdefs | 返回所有 Classification 的结构定义。 |
| 查询指定分类类型 | GET /api/atlas/v2/types/classificationdef/name/{name} | 获取某个分类类型的详细定义。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/classificationdef/name/Confidential | 替换 {name} 为实际分类名。 |
| 更新分类类型 | PUT /api/atlas/v2/types/classificationdef/name/{name} | 修改现有分类类型的定义。 | 同创建请求,使用 PUT 方法提交完整定义。 | 不支持删除已有属性,仅可新增属性。 |
| 删除分类类型 | DELETE /api/atlas/v2/types/classificationdef/name/{name} | 删除指定名称的分类类型。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/types/classificationdef/name/Confidential | 仅能删除无实体引用的自定义分类类型。 |
创建分类类型请求示例
{
"classificationTypes": [
{
"name": "Confidential",
"description": "机密数据",
"typeVersion": "1.0",
"options": {
"owner": "admin",
"propagate": "true"
},
"attributeDefs": [
{
"name": "reviewDate",
"typeName": "date",
"cardinality": "SINGLE"
}
]
}
]
}
5.3 为实体添加和移除分类
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 添加分类(单实体) | POST /api/atlas/v2/entity/guid/{guid}/classifications | 为指定 GUID 的实体添加一个或多个分类。 | 见下方 JSON 示例 | 支持附加属性(如置信度、来源),分类必须已存在。 |
| 批量添加分类 | POST /api/atlas/v2/entity/bulk/classifications | 为多个实体批量添加同一分类。 | 见下方 JSON 示例 | 提高大规模打标效率,减少 API 调用次数。 |
| 查询实体分类 | GET /api/atlas/v2/entity/guid/{guid}/classifications | 获取实体当前所有已应用的分类。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classifications | 返回分类名称、创建时间、附加属性等信息。 |
| 移除分类(单个) | DELETE /api/atlas/v2/entity/guid/{guid}/classification/{classificationName} | 移除实体上的指定分类。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classification/PII | 仅影响该实体,不影响其他实体上的相同分类。 |
| 批量移除分类 | 不支持直接批量移除 | 需循环调用单个移除接口。 | 脚本化处理多个 GUID 的移除请求。 | 注意控制并发和错误重试机制。 |
添加分类(单实体)请求示例
{
"classifications": [
{
"typeName": "PII",
"attributes": {
"source": "auto-detect"
}
}
]
}
批量添加分类请求示例
{
"classification": {
"typeName": "GDPR",
"attributes": { "expireAfter": "5y" }
},
"entityGuids": ["guid1", "guid2", "guid3"]
}
5.4 分类的继承与传播策略
| 策略名称 | 说明 | 注意事项 |
|---|
| propagate(传播) | 控制分类是否自动传播到通过关系连接的实体(如输入/输出)。 | 在分类定义的 options 中设置 “propagate”: “true”。 |
| 传播方向 | 可传播到下游(out)或上游(in),默认双向。 | 通过 propagateTo 和 removePropagationOnEntityDelete 配置。 |
| 关系类型限制 | 传播通常发生在 Process 类型的输入/输出关系中。 | 如 Hive 查询作业的输入表和输出表。 |
| 自动打标规则 | 可结合规则引擎,基于实体属性自动应用分类。 | 如字段名包含 “email” 则标记为 PII。 |
| 传播性能影响 | 大规模传播可能导致元数据更新延迟。 | 建议在测试环境验证传播逻辑。 |
| 手动覆盖 | 用户可手动移除传播后的分类,打破自动继承链。 | 适用于特殊业务场景的例外处理。 |
第六章:血缘与关系(Lineage and Relationships)
6.1 数据血缘(Lineage)基本概念
| 概念名称 | 说明 | 注意事项 |
|---|
| 数据血缘(Data Lineage) | 描述数据从源头到消费端的流转路径,包括转换过程和依赖关系。 | 是影响分析、问题溯源和合规审计的基础。 |
| 前向血缘(Forward Lineage) | 从某个源表出发,查看其数据流向了哪些下游表或作业。 | 用于影响分析,评估变更影响范围。 |
| 后向血缘(Backward Lineage) | 从某个目标表出发,查看其数据来自哪些上游表或作业。 | 用于问题溯源,查找数据错误来源。 |
| 血缘粒度 | 可以是表级、列级或混合粒度。 | 列级血缘更精确但采集成本更高。 |
| 血缘来源 | 主要通过 Hook 机制从 Hive、Spark 等组件采集执行计划生成。 | 依赖组件的 Hook 插件正确安装和配置。 |
| 实体关系(Relationship) | 血缘图的基础,表示两个实体之间的关联(如 inputTo、outputFrom)。 | 关系类型由类型系统定义。 |
6.2 查看实体的血缘图
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 获取后向血缘 | GET /api/atlas/v2/lineage/{guid}/backward | 获取指定实体的后向血缘图。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/lineage/abc123/backward | 返回上游依赖的实体和关系链。 |
| 获取前向血缘 | GET /api/atlas/v2/lineage/{guid}/forward | 获取指定实体的前向血缘图。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/lineage/abc123/forward | 返回下游消费的实体和关系链。 |
| 获取全路径血缘 | GET /api/atlas/v2/lineage/{guid} | 获取实体的完整血缘路径(前后向)。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/lineage/abc123 | 包含所有相关节点和连接。 |
| 血缘深度控制 | 添加 depth 参数限制血缘层级。 | /api/atlas/v2/lineage/abc123/forward?depth=2 | 避免返回过大图结构,影响性能。 | |
| Web UI 查看 | Atlas Web UI → Entity → Lineage Tab | 图形化展示血缘关系。 | 无 | 支持缩放、展开/折叠、节点详情查看。 |
6.3 血缘数据的生成机制(Hook 与集成)
| 组件 | Hook 机制说明 | 注意事项 |
|---|
| Hive Hook | 通过 Hive 的 atlas-hook-hive 插件,在查询执行前后捕获 SQL 解析树和执行计划。 | 需将 JAR 包放入 Hive auxlib 目录,并配置 hive-site.xml。 |
| Spark Hook | 通过 Spark Listener 机制监听 Spark 事件,捕获 DataFrame 转换和 SQL 执行信息。 | 需在 spark-defaults.conf 中启用 Atlas 插件。 |
| Kafka Hook | 监听 Kafka 主题的生产/消费行为,建立数据流血缘。 | 适用于流处理场景的数据追踪。 |
| 自定义 Hook | 开发者可实现 Hook 接口,上报自定义系统的元数据变更和血缘事件。 | 需通过 Kafka 发送 EntityMutationEvent 消息。 |
| Hook 事件流程 | 组件执行 → Hook 拦截 → 构造实体/关系 → 发送到 Kafka → Atlas Server 消费并持久化。 | 确保 Kafka 主题 ATLAS_ENTITIES 可写。 |
6.4 关系类型与关系查询
| 概念名称 | 说明 | 注意事项 |
|---|
| 内置关系类型 | 如 DataSet 与 Process 之间的 inputs/outputs,HiveTable 与 HiveColumn 的 columns。 | 由类型系统预定义,用于构建血缘和结构关系。 |
| 自定义关系 | 可通过类型系统定义新的 Association 类型,建立特定实体间的关联。 | 如 owns(属于)、references(引用)等。 |
| 查询实体关系 | GET /api/atlas/v2/relationship/guid/{guid} | 获取指定实体参与的所有关系。 |
| 关系方向 | 每个关系有明确的方向(如 inputTo 表示某表是某作业的输入)。 | 血缘分析依赖方向性判断数据流向。 |
| 关系属性 | 关系本身可包含属性,如映射规则、转换逻辑描述。 | 增强血缘信息的语义表达能力。 |
第七章:REST API 使用详解
7.1 Atlas REST API 概述
| 概念名称 | 说明 | 注意事项 |
|---|
| REST API 版本 | Atlas 主要使用 /api/atlas/v2/ 路径前缀。 | v1 已弃用,建议统一使用 v2。 |
| 请求格式 | 请求体通常为 JSON 格式,Content-Type: application/json。 | 所有 API 均通过 JSON 交互。 |
| 响应结构 | 成功响应返回 200 或 201,错误返回 4xx/5xx 及错误信息。 | 错误信息包含 errorCode、errorMessage。 |
| 主要资源路径 | /types(类型管理)、/entity(实体操作)、/search(搜索)、/lineage(血缘)等。 | 资源路径与功能模块一一对应。 |
| 分页支持 | 大多数查询接口支持 offset 和 limit 参数进行分页。 | 避免一次性返回过多数据导致性能问题。 |
| 异步操作 | 部分操作(如大规模导入)可能为异步执行,返回任务 ID。 | 需轮询状态接口获取结果。 |
7.2 认证与访问控制(Basic Auth, Kerberos)
| 认证方式 | 说明 | 注意事项 |
|---|
| Basic Auth | 使用用户名和密码进行基础认证,通过 HTTP Authorization 头传递。 | 测试环境常用,生产环境建议配合 HTTPS 使用。 |
| Kerberos | 企业级安全认证,使用 SPNEGO 协议实现单点登录。 | 需配置 JAAS、krb5.conf 和服务主体(principal)。 |
| LDAP 集成 | Atlas 可配置为使用外部 LDAP/AD 进行用户认证。 | 需在 atlas-application.properties 中设置 LDAP 参数。 |
| 访问控制 | 认证后,权限由 Ranger 或 Atlas 内置 ACL 控制。 | 不同用户对类型、实体的操作权限可精细化管理。 |
| API 调用示例(Basic) | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/typedefs | 最简单认证方式,适合脚本调用。 |
| API 调用示例(Kerberos) | curl --negotiate -u : http://atlas:21000/api/atlas/v2/types/typedefs | 需提前执行 kinit 获取 TGT。 |
7.3 类型管理相关 API
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 获取所有类型定义 | GET /api/atlas/v2/types/typedefs | 查询系统中所有类型(Class、Enum、Struct 等)。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/typedefs | 响应数据量大,建议按需使用。 |
| 获取指定类型定义 | GET /api/atlas/v2/types/typedef/name/{typeName} | 获取某个具体类型的完整定义。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/typedef/name/HiveTable | 替换 {typeName} 为实际名称。 |
| 创建/更新类型 | POST 或 PUT /api/atlas/v2/types/typedefs | 批量创建或更新类型定义。 | 见下方 JSON 示例 | POST 用于创建,PUT 用于更新,结构需完整。 |
| 删除类型 | DELETE /api/atlas/v2/types/typedef/name/{typeName} | 删除指定名称的自定义类型。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/types/typedef/name/CustomTable | 仅能删除无实体引用的类型,内置类型不可删。 |
| 查询分类类型 | GET /api/atlas/v2/types/classificationdefs | 获取所有已定义的 Classification 类型。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/types/classificationdefs | 用于标签管理场景。 |
创建/更新类型请求示例
{
"entityTypes": [
{
"name": "CustomTable",
"superTypes": ["DataSet"],
"attributeDefs": [
{ "name": "env", "typeName": "string" }
]
}
]
}
7.4 实体操作相关 API
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 创建实体 | POST /api/atlas/v2/entity | 创建一个或多个实体实例。 | 见下方 JSON 示例 | 必须指定 typeName 和 qualifiedName。 |
| 按 GUID 查询实体 | GET /api/atlas/v2/entity/guid/{guid} | 根据 GUID 获取实体详情。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123 | 最精确的查询方式。 |
| 批量按属性查询 | GET /api/atlas/v2/entity/bulk | 根据属性值批量查询实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/entity/bulk?attr:qualifiedName=sales_jan@cl1" | 支持 attr: 前缀,仅限索引字段。 |
| 更新实体(全量) | PUT /api/atlas/v2/entity/guid/{guid} | 全量更新指定 GUID 的实体。 | 见下方 JSON 示例 | 需提供完整实体结构,避免遗漏属性。 |
| 部分更新实体 | POST /api/atlas/v2/entity/partial | 仅更新指定属性,不覆盖其他字段。 | 见下方 JSON 示例 | 推荐用于小范围修改。 |
| 删除实体 | DELETE /api/atlas/v2/entity/guid/{guid} | 软删除指定实体(状态置为 DELETED)。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123 | 实体仍可通过历史接口访问。 |
创建实体请求示例
{
"entities": [
{
"typeName": "hive_table",
"attributes": {
"qualifiedName": "sales_jan@cl1",
"name": "sales_jan"
}
}
]
}
更新实体(全量)请求示例
{
"entity": {
"guid": "abc123",
"typeName": "hive_table",
"attributes": {
"description": "2025年1月销售数据"
}
}
}
部分更新实体请求示例
{
"entity": {
"guid": "abc123",
"attributes": {
"owner": "analyst_team"
}
}
}
7.5 分类与标签操作 API
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 为实体添加分类 | POST /api/atlas/v2/entity/guid/{guid}/classifications | 为指定实体添加一个或多个分类。 | 见下方 JSON 示例 | 分类必须已存在,支持附加属性。 |
| 查询实体分类 | GET /api/atlas/v2/entity/guid/{guid}/classifications | 获取实体当前所有分类。 | curl -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classifications | 返回分类列表及元数据。 |
| 移除实体分类 | DELETE /api/atlas/v2/entity/guid/{guid}/classification/{classificationName} | 移除实体上的指定分类。 | curl -X DELETE -u admin:admin http://atlas:21000/api/atlas/v2/entity/guid/abc123/classification/PII | 仅影响该实体。 |
| 批量添加分类 | POST /api/atlas/v2/entity/bulk/classifications | 为多个实体批量添加同一分类。 | 见下方 JSON 示例 | 提高大规模打标效率。 |
| 创建分类类型 | POST /api/atlas/v2/types/typedefs | 在 classificationTypes 数组中定义新分类。 | 参见 5.2 节示例 | 需完整 typedef 结构。 |
为实体添加分类请求示例
{
"classifications": [
{
"typeName": "PII",
"attributes": {
"confidence": 85
}
}
]
}
批量添加分类请求示例
{
"classification": {
"typeName": "Archived"
},
"entityGuids": ["guid1", "guid2"]
}
7.6 搜索与查询 API(DSL 与 Full-Text)
| 方法名称 | 语法 | 用途 | 代码示例 | 注意事项 |
|---|
| 基本搜索(关键词) | GET /api/atlas/v2/search/basic?query={keyword} | 全文关键字搜索实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/search/basic?query=sales" | 依赖 Solr 全文索引,支持模糊匹配。 |
| 按分类搜索 | GET /api/atlas/v2/search/basic?classification={tagName} | 搜索带有指定分类的所有实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/search/basic?classification=PII" | 用于合规性审计。 |
| 按类型搜索 | GET /api/atlas/v2/search/basic?typeName={typeName} | 搜索指定类型的所有实体。 | curl -u admin:admin "http://atlas:21000/api/atlas/v2/search/basic?typeName=hive_table" | 支持分页和排序。 |
| DSL 查询 | POST /api/atlas/v2/search/dsl | 使用 DSL 语法执行结构化查询。 | 见下方 JSON 示例 | 功能强大,支持复杂条件和投影。 |
| Gremlin 查询 | POST /api/atlas/v2/search/gremlin | 使用 Gremlin 图查询语言(高级功能)。 | { "query": "g.V().has('typeName', 'hive_table')" } | 需熟悉图数据库查询语法。 |
| 高级搜索 | POST /api/atlas/v2/search/advanced | 支持组合条件、排序、分页的复杂搜索。 | 见下方 JSON 示例 | 适合构建数据目录前端。 |
DSL 查询请求示例
{
"dsl": "from hive_table select name, owner where name='sales_2025'"
}
高级搜索请求示例
{
"typeName": "hive_table",
"attributes": ["name", "owner"],
"sortBy": "name",
"sortOrder": "ASCENDING"
}
第八章:搜索与查询语言
8.1 基本搜索机制(关键词、分类、类型)
| 搜索方式 | 说明 | 注意事项 |
|---|
| 关键词搜索 | 输入任意关键字,匹配实体名称、描述、属性等字段。 | 通过 Web UI 搜索框或 basic API 实现。 |
| 按分类搜索 | 筛选带有特定标签(如 PII、GDPR)的实体。 | 用于快速发现敏感数据或特定业务域数据。 |
| 按类型搜索 | 查找特定类型的所有实例,如所有 Hive 表或 Kafka 主题。 | 是组织和浏览元数据的基础方式。 |
| 组合筛选 | 在搜索结果页面使用多条件筛选(如类型 + 分类 + 所有者)。 | 提升搜索精确度,减少结果集噪声。 |
| 模糊匹配 | 支持通配符(*)和部分匹配,提高容错性。 | 如搜索 user* 可匹配 user_info、user_log。 |
8.2 Atlas DSL(Domain Specific Language)语法
| 语法结构 | 说明 | 示例 | 注意事项 |
|---|
| 基本查询 | from {type} select {attributes} | from hive_table select name, owner | 类似 SQL,但仅支持查询,不支持 JOIN。 |
| 条件过滤 | where {condition} | where owner = ‘admin’ | 支持 =, !=, <, >, <=, >=, in, like。 |
| 属性投影 | select {attr1}, {attr2} | select name, qualifiedName, createTime | 可指定返回的属性列表,减少数据传输。 |
| 限制结果数 | limit {n} | limit 100 | 防止返回过多数据,建议始终使用。 |
| 排序 | order by {attr} [asc|desc] | order by createTime desc | 支持按指定属性升序或降序。 |
| 嵌套属性访问 | 使用点号访问嵌套结构 | select columns.name from hive_table | 适用于 Struct 类型属性。 |
| 多条件组合 | 使用 and / or 连接 | where type = ‘fact’ and env = ‘prod’ | 注意逻辑优先级,建议使用括号。 |
8.3 全文检索与属性过滤
| 功能 | 说明 | 注意事项 |
|---|
| 全文检索 | 基于 Solr 实现,对实体所有文本字段建立倒排索引。 | 搜索性能快,适合探索式查询。 |
| 属性过滤 | 在基本搜索中通过 attr_{name}:{value} 语法过滤。 | 如 attr_name:sales* 匹配名称前缀为 sales 的实体。 |
| 分类过滤 | 使用 tag:{tagName} 语法。 | tag:PII 查找所有标记为 PII 的实体。 |
| 类型过滤 | 使用 type:{typeName} 语法。 | type:hive_table 限定搜索范围。 |
| 高亮显示 | 搜索结果中匹配关键词的部分可高亮显示。 | 提升用户体验,快速定位匹配内容。 |
| 拼写纠错 | Solr 支持自动拼写建议和纠错。 | 降低用户输入错误的影响。 |
8.4 高级查询示例与优化建议
| 场景 | 查询示例 | 优化建议 |
|---|
| 查找所有生产环境的 Hive 表 | from hive_table where qualifiedName like ’*@prod’ | 使用索引字段(如 qualifiedName)进行过滤,避免全表扫描。 |
| 查找某用户拥有的敏感数据表 | from hive_table where owner = ‘alice’ and tag:PII | 组合分类和属性条件,利用索引加速。 |
| 查找最近 7 天创建的表 | from hive_table where createTime >= ‘2025-09-25T00:00:00Z’ | 时间范围查询需确保 createTime 已索引。 |
| 查找包含 email 字段的表 | from hive_table where columns.name like ‘%email%‘ | 嵌套属性查询可能较慢,避免在大模型上频繁使用。 |
| 分页查询大批量数据 | from hive_table select name limit 100 offset 0 | 使用 limit 和 offset 分批获取,避免超时。 |
| 仅获取关键属性 | from hive_table select name, owner, qualifiedName | 减少返回字段,降低网络开销和解析时间。 |
第九章:集成与 Hook 机制
9.1 Hook 机制原理
| 概念名称 | 说明 | 注意事项 |
|---|
| Hook(钩子) | 一种事件监听机制,用于捕获外部系统(如 Hive、Spark)的元数据变更和执行操作。 | 是 Atlas 实现自动化元数据采集的核心。 |
| 事件驱动架构 | 当目标系统执行 DDL 或 DML 操作时,Hook 拦截事件并生成元数据变更消息。 | 确保元数据与实际环境同步。 |
| 消息传输 | Hook 将构造好的 EntityMutationEvent 消息发送到 Kafka。 | Kafka 作为异步解耦的中间件,提升系统稳定性。 |
| Atlas Server 消费 | Atlas Server 订阅 Kafka 主题(默认 ATLAS_ENTITIES),消费并处理事件。 | 消费后持久化到 HBase 并更新 Solr 索引。 |
| 血缘生成 | 根据 SQL 执行计划或 DAG 信息,解析出输入/输出关系,构建血缘图。 | 依赖组件自身的解析能力(如 Hive 的 QueryPlan)。 |
| 插件化设计 | 每个集成组件(Hive、Spark)都有独立的 Hook 实现模块。 | 可扩展性强,支持自定义 Hook 开发。 |
9.2 Hive Hook 配置与使用
| 配置步骤 | 说明 | 注意事项 |
|---|
| 复制 JAR 包 | 将 atlas-hook-hive-*.jar 及其依赖复制到 Hive 的 auxlib 目录。 | 确保所有 Hive Server 节点都部署。 |
| 配置 hive-site.xml | 添加 Atlas 相关属性,启用 Hook。 | 见下方 XML 配置示例 |
| 配置 atlas-application.properties | 设置 Kafka 地址、Atlas Server 地址等。 | atlas.kafka.bootstrap.servers=kafka:9092 atlas.rest.address=http://atlas:21000 |
| 启动 Hive 服务 | 重启 Hive Server 使配置生效。 | 检查日志确认 Hook 初始化成功。 |
| 验证血缘采集 | 执行 Hive SQL(如 INSERT INTO t2 SELECT * FROM t1)。 | 在 Atlas UI 中查看 t1 和 t2 的血缘关系是否生成。 |
| 常见问题 | Kafka 连接失败、权限不足、JAR 包冲突。 | 检查日志 hive-execution.log 和 atlas-hook.log。 |
hive-site.xml Hook 配置
<property>
<name>hive.exec.post.hooks</name>
<value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
<property>
<name>atlas.hook.hive.synchronous</name>
<value>false</value>
</property>
9.3 Spark Hook 集成方法
| 集成方式 | 说明 | 注意事项 |
|---|
| Spark Listener | Atlas 提供 AtlasSparkListener,通过 Spark 的监听器机制捕获事件。 | 支持 Spark SQL 和 DataFrame 操作。 |
| 配置 spark-defaults.conf | 启用 Listener 并设置 Atlas 参数。 | spark.sql.queryExecutionListeners org.apache.atlas.spark.AtlasSparkListener
spark.atlas.rest.address http://atlas:21000
spark.atlas.kafka.bootstrap.servers kafka:9092 |
| 提交作业时添加 JAR | 使用 —jars 参数指定 Atlas Hook JAR 包。 | spark-submit --jars atlas-spark-hook-*.jar ... |
| Spark Thrift Server 集成 | 为 Spark Thrift Server 配置 Listener,支持 JDBC/ODBC 客户端的血缘采集。 | 配置方式与 spark-defaults.conf 相同。 |
| 血缘粒度 | 支持表级和列级血缘,依赖 Spark 的逻辑执行计划。 | 复杂转换可能影响血缘准确性。 |
| 验证方法 | 执行 Spark SQL 查询,检查 Atlas 中是否生成 Process 实体和血缘关系。 | 注意查看 SparkProcess 类型的实体。 |
9.4 Kafka 消息监听与处理流程
| 流程步骤 | 说明 | 注意事项 |
|---|
| 消息生产 | Hive/Spark Hook 构造 EntityMutationEvent 并发送到 Kafka ATLAS_ENTITIES 主题。 | 消息包含操作类型(CREATE/UPDATE/DELETE)、实体列表。 |
| 消息结构 | JSON 格式,包含 operation, typeName, entities, user 等字段。 | 示例:{“operation”:“CREATE”,“typeName”:“hive_table”,…} |
| Atlas Server 消费 | Atlas Server 启动 Kafka Consumer,订阅 ATLAS_ENTITIES 主题。 | 消费组名为 atlas,支持多实例负载均衡。 |
| 事件处理 | Server 解析消息,调用元数据管理 API 执行增删改操作。 | 包括创建实体、更新关系、触发血缘分析。 |
| 错误处理 | 若处理失败(如网络异常),消息保留在 Kafka 中可重试。 | 确保 Kafka 保留策略足够长(如 7 天)。 |
| 监控与告警 | 监控 Kafka 消费延迟(Lag)、消息积压情况。 | 使用 Kafka Manager 或 Prometheus + Grafana。 |
| 自定义消息源 | 可开发外部程序生成 EntityMutationEvent 发送到 Kafka,实现非标准系统集成。 | 用于同步自定义应用的元数据。 |
第十章:安全与权限控制
10.1 Atlas 安全模型概述
| 安全层面 | 说明 | 注意事项 |
|---|
| 认证(Authentication) | 验证用户身份,支持 Basic Auth、Kerberos、LDAP。 | 生产环境推荐 Kerberos 或 LDAP。 |
| 授权(Authorization) | 控制用户对资源(类型、实体)的操作权限(读、写、管理)。 | 基于角色的访问控制(RBAC)。 |
| 数据安全 | 通过分类(Classification)标记敏感数据,配合 Ranger 实现动态脱敏。 | 如 PII、PCI 数据的访问策略。 |
| 传输安全 | 支持 HTTPS 加密通信,防止数据窃听。 | 需配置 SSL 证书。 |
| 审计日志 | 记录所有用户操作(登录、元数据变更),用于合规审计。 | 日志存储于文件或集成外部系统。 |
| 多租户支持 | 可为不同业务部门或项目设置独立的元数据视图和权限。 | 通过命名空间(qualifiedName)和标签实现隔离。 |
10.2 基于 Ranger 的访问控制集成
| 集成机制 | 说明 | 注意事项 |
|---|
| Ranger Plugin | Atlas 作为 Ranger 的一个服务类型(Service Type)进行管理。 | 在 Ranger Admin 中添加 Atlas 服务。 |
| 策略定义 | 在 Ranger UI 中创建访问策略,基于用户、组、分类、属性等条件。 | 如”允许 analyst 组读取非 PII 的 hive_table”。 |
| 动态策略 | 策略可基于 Atlas 分类动态生效,实现细粒度控制。 | 分类变更后策略自动更新。 |
| 数据脱敏 | Ranger 可配置脱敏策略(如掩码、哈希),对敏感字段返回脱敏数据。 | 与 Atlas 的 PII 标签联动。 |
| 行过滤 | 支持行级过滤策略,仅返回满足条件的数据行。 | 如仅允许查看本部门数据。 |
| 策略同步 | Ranger 周期性从 Atlas 拉取元数据和分类信息,更新策略评估上下文。 | 确保网络连通性和认证配置正确。 |
10.3 用户、角色与权限管理
| 管理方式 | 说明 | 注意事项 |
|---|
| 内置用户管理 | Atlas 支持本地用户和角色(在 users-credentials.properties 中配置)。 | 适用于小规模部署。 |
| LDAP/AD 集成 | 配置 Atlas 连接外部目录服务,使用企业统一账号。 | 需设置 atlas.authentication.method=ldap。 |
| 角色(Role) | 定义权限集合,如 admin、data_steward、analyst。 | 通过 Ranger 或 Atlas 插件管理角色。 |
| 权限分配 | 将角色分配给用户或用户组,实现权限继承。 | 遵循最小权限原则。 |
| 权限粒度 | 可控制到类型级别(如能否创建 HiveTable)或实体级别(如能否编辑某表)。 | Ranger 提供更细粒度的控制。 |
| API 权限 | REST API 调用受相同权限控制,未授权请求返回 403。 | 服务账号需分配适当角色。 |
10.4 数据脱敏与审计日志
| 功能 | 说明 | 注意事项 |
|---|
| 数据脱敏(Masking) | 对敏感数据(如身份证、手机号)进行掩码处理(如显示为 ***)。 | 由 Ranger 策略触发,Atlas 提供分类依据。 |
| 脱敏方式 | 支持 nulling(置空)、hash(哈希)、mask(掩码)、encrypt(加密)等。 | 根据合规要求选择合适方式。 |
| 动态脱敏 | 查询时实时脱敏,原始数据仍安全存储。 | 透明于用户,无需修改应用。 |
| 审计日志内容 | 包括操作时间、用户、IP、操作类型(CREATE/UPDATE/DELETE)、目标实体、结果。 | 用于安全事件调查和合规证明。 |
| 日志存储位置 | 默认写入 logs/atlas-audit.log 文件。 | 建议集成到集中式日志系统(如 ELK、Splunk)。 |
| 日志保留策略 | 配置日志滚动和保留周期(如 90 天)。 | 满足 GDPR、HIPAA 等法规要求。 |
| 审计查询 | 可通过 Ranger 或外部工具查询审计日志。 | 支持按用户、时间、操作类型过滤。 |
第十一章:高可用与性能调优
11.1 Atlas 高可用部署架构
| 架构组件 | 说明 | 注意事项 |
|---|
| Atlas Server 集群 | 部署多个 Atlas Server 实例,前端通过负载均衡器(如 Nginx、HAProxy)分发请求。 | 确保所有实例配置一致,指向相同的后端存储。 |
| 共享存储层 | HBase 和 Solr 必须为集群模式,作为 Atlas Server 的共享状态存储。 | HBase 用于持久化元数据实体和关系,Solr 用于索引和搜索。 |
| Kafka 高可用 | Kafka 集群需多副本、多分区,确保消息不丢失,支持故障转移。 | ATLAS_ENTITIES 主题建议至少 3 副本,防止 Hook 消息丢失。 |
| ZooKeeper 集群 | HBase、Solr、Kafka 均依赖 ZooKeeper 进行协调服务,必须部署为奇数节点集群(如 3/5/7)。 | 保障分布式系统的一致性。 |
| 负载均衡策略 | 使用轮询或最少连接等策略分发 API 请求,避免单点过载。 | 启用健康检查,自动剔除故障节点。 |
| 数据一致性 | 所有写操作最终通过 HBase 保证强一致性,读操作可能短暂延迟。 | 无单点故障,任一 Atlas Server 故障不影响整体服务。 |
11.2 HBase 与 Solr 性能优化建议
| 组件 | 优化项 | 说明 | 注意事项 |
|---|
| HBase | Region 设计 | 合理预分区,避免热点问题。 | 根据 typeName 或 qualifiedName 前缀进行分区。 |
| 写入缓冲 | 调整 hbase.hregion.memstore.flush.size 和 blockCache 大小。 | 增大内存缓冲提升写入吞吐量。 |
| 压缩算法 | 启用 Snappy 或 GZ 压缩减少存储空间和 I/O。 | 权衡 CPU 开销与存储节省。 |
| Compaction 策略 | 选择合适的 Major/Minor Compaction 策略。 | 减少读取延迟,避免 I/O 突刺。 |
| 客户端配置 | 调整 hbase.client.scanner.caching 和重试次数。 | 提升批量读取效率。 |
| Solr | 分片与副本 | 对 large collections(如 vertex_index)进行分片,并设置多副本。 | 提升查询并发能力和容错性。 |
| 查询缓存 | 启用 filterCache、queryResultCache 等。 | 加速重复查询,特别是分类和类型过滤。 |
| 索引优化 | 合理设计 schema,对常用查询字段建立索引。 | 如 qualifiedName, typeName, classification。 |
| 删除策略 | 配置 TtlDeleteCommitter 自动清理过期文档。 | 防止索引无限增长。 |
| JVM 调优 | 为 Solr 分配足够堆内存,避免频繁 GC。 | 建议 8GB+,根据数据量调整。 |
11.3 Atlas Server 参数调优
| 参数类别 | 参数名称 | 推荐值/说明 | 注意事项 |
|---|
| JVM | -Xms / -Xmx | 4g ~ 8g(根据元数据规模) | 避免内存不足导致 OOM。 |
| -XX:MetaspaceSize | 512m ~ 1g | 防止 Metaspace 耗尽。 |
| GC 策略 | -XX:+UseG1GC | G1 GC 适合大堆内存,降低停顿时间。 |
| Kafka Consumer | atlas.consumer.numThreads | 2 ~ 4 | 提升消息消费并行度。 |
| atlas.kafka.hook.group.id | 自定义 group id | 避免与其他环境冲突。 |
| Server 线程池 | atlas.server.threadpool.size | 20 ~ 50 | 根据并发请求数调整。 |
| 缓存 | atlas.cache.entity.ttl | 300s (5分钟) | 减少重复查询 HBase 的开销。 |
| atlas.cache.guice.typecache.ttl | 600s | 缓存类型定义,提升 API 响应速度。 |
| 血缘分析 | atlas.lineage.batch.size | 100 ~ 500 | 控制血缘图构建的批处理大小,平衡性能与内存。 |
11.4 大规模元数据管理实践
| 实践场景 | 优化策略 | 说明 |
|---|
| 海量实体导入 | 分批提交 + 异步处理 | 使用 /entity/bulk 接口,每批 100~500 实体,避免超时。 |
| 高频变更场景 | 优化 Hook 发送频率 | 避免在循环中频繁触发 Hook,可合并或异步上报。 |
| 复杂血缘图 | 限制血缘深度 | 查询时使用 depth=3 参数,避免返回过大图结构。 |
| 索引性能瓶颈 | 按业务域拆分 Solr Collection | 如 finance_vertex_index, marketing_vertex_index。 |
| 备份与恢复 | 定期备份 HBase 表 | 使用 HBase snapshot 功能备份 ATLAS_ENTITY_AUDIT_EVENTS 和主数据表。 |
| 监控告警 | 集成 Prometheus + Grafana | 监控 JVM、Kafka Lag、HBase RT、API Latency 等关键指标。 |
| 元数据生命周期 | 定义冷热数据策略 | 对历史或已删除实体归档,减少活跃索引大小。 |
第十二章:实战案例与最佳实践
12.1 企业级数据目录构建
| 实施步骤 | 关键动作 | 最佳实践 |
|---|
| 统一命名规范 | 定义 qualifiedName 标准格式,如 {dataset}@{env}。 | 强制所有系统遵循,确保全局唯一性和可解析性。 |
| 自动化采集 | 部署 Hive/Spark/Kafka Hook,实现元数据自动同步。 | 减少人工录入错误,保证实时性。 |
| 分类体系设计 | 建立标准化标签体系(如业务域、数据等级、项目归属)。 | 与数据治理委员会协同制定,确保一致性。 |
| 丰富元数据 | 通过 UI 或 API 补充描述、负责人、数据字典等业务元数据。 | 鼓励数据使用者参与协作。 |
| 搜索体验优化 | 配置 Solr 同义词、拼写纠错,提升搜索准确率。 | 定期收集用户反馈优化搜索逻辑。 |
| 集成数据质量 | 在目录中展示数据质量评分和关键指标。 | 让用户一眼识别可信数据集。 |
12.2 敏感数据识别与合规管理
| 场景 | 解决方案 | 效果 |
|---|
| 自动识别 PII | 开发规则引擎或 ML 模型,扫描列名/样本数据,自动打 PII 标签。 | 大幅提升识别覆盖率和效率。 |
| GDPR/CCPA 合规 | 基于 DataSubject 分类,追踪个人数据流向,生成影响报告。 | 满足数据主体权利请求(如被遗忘权)。 |
| 访问控制联动 | 将 PII、PCI 等标签同步至 Ranger,实施动态脱敏和行过滤。 | 实现”敏感数据,严格管控”。 |
| 审计追踪 | 记录所有对敏感数据的访问和变更操作。 | 满足合规审计要求。 |
| 分类传播 | 配置 PII 标签沿血缘自动传播到下游表。 | 防止敏感数据泄露到非受控区域。 |
12.3 血缘分析在数据治理中的应用
| 应用场景 | 实施方法 | 价值 |
|---|
| 影响分析 | 变更某源表前,查看其前向血缘,评估对下游报表的影响。 | 降低变更风险,避免业务中断。 |
| 问题溯源 | 报表数据异常时,通过后向血缘快速定位源头错误。 | 缩短排错时间,提升运维效率。 |
| 数据可信度评估 | 分析实体的血缘路径长度、转换次数,评估其可信度。 | 为数据估值提供依据。 |
| ETL 作业优化 | 分析血缘图,发现冗余计算或无效链路。 | 优化数据管道,降低成本。 |
| 合规证明 | 生成特定数据集的完整血缘报告,用于外部审计。 | 证明数据处理过程的透明性和合规性。 |
12.4 Atlas 与数据质量、数据生命周期集成
| 集成方向 | 集成方式 | 最佳实践 |
|---|
| 数据质量(DQ) | 将 Great Expectations、Deequ 等工具的校验结果作为属性写入 Atlas 实体。 | 在数据目录中直观展示 DQ Score 和失败规则。 |
| 创建 DataQuality 分类,标记高/低质量数据集。 | 与 Ranger 联动,限制低质量数据的生产使用。 |
| 数据生命周期管理 | 在实体上添加 Lifecycle 分类(如 active, archived, deleted)。 | 定义自动流转规则,如 3 年未访问则归档。 |
| 与工作流引擎(Airflow)集成,执行归档/删除任务。 | 实现生命周期策略的自动化执行。 |
| 在血缘分析中排除已归档实体,简化视图。 | 保持血缘图的清晰和相关性。 |
| 统一治理平台 | 构建以 Atlas 为核心的治理门户,集成 DQ、安全、生命周期模块。 | 提供一站式数据治理体验,提升用户采纳率。 |