水务局的档案室里,每一根供水管都有一张登记卡:管径是多少,材质是铸铁还是 PE,哪一年铺设,接到哪个阀门后面。档案室不负责拧阀门,也不管跑冒滴漏,可一旦水质出问题,所有人翻出图纸就能定位污染源头。在数据世界里,Apache Atlas 就是这样一间档案室——它不搬运数据、不计算报表,却把每一张表的出生证明、加工过程、敏感等级和访问门禁记得清清楚楚。这篇内容会带你看懂:Atlas 如何建立元数据登记册、如何画出数据血缘水网图、如何给数据贴敏感标签,以及它怎样和 Hadoop 生态配合,撑起企业级数据治理平台。

岗位关联

对 AI 从业者而言,掌握 Atlas 等于拥有数据世界的“地图 + 户籍簿”。无论是排查数据质量、满足监管审计,还是构建 AI 特征治理体系,你都能快速回溯数据源头、判断敏感等级,成为团队里不可或缺的治理型工程师。

目录
  1. 可视化演示
  2. 元数据模型:给每一根数据管道建档
  3. 血缘追踪:从水龙头一路追到水厂
  4. 分类标签:给不同水质贴标牌
  5. 安全集成:给闸门装上门禁
  6. 生态集成:接上千家万户的水管
  7. 治理平台:调度中心与仪表盘
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示Apache Atlas的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Apache Atlas:Apac Apache Atlas的定位 Atlas元数据模型与Type 核心机制可视化 Apache Atlas整体架构与关键组件

元数据模型:给每一根数据管道建档

水务局的档案室里,每一根供水管都有一张登记卡:管径是多少,材质是铸铁还是 PE,哪一年铺设,接到哪个阀门后面。档案室不负责拧阀门,也不管跑冒滴漏,但一旦水质出现异常,所有人翻开图纸就能定位问题。Apache Atlas 就是数据世界的这间档案室,它用一套结构化的方式给数据资产建档案。

这套档案在技术上的名字叫元数据模型。元数据就是“描述数据的数据”:表的名称、字段名称、字段类型、负责人、创建时间。没有元数据,数仓里几千张表就是一堆没有标签的箱子,谁也不知道里面装了什么。

在 Atlas 中,元数据模型可以归纳为三个基本要素:实体、属性、关系。实体是被管理的对象,比如一张数据表、一个字段;属性描述实体的细节,比如字段名、类型、注释;关系把实体串起来,比如“表属于库”“列属于表”。Atlas 的类型系统则规定了不同种类的实体拥有哪些属性与关系,就像档案分类法规定每类卷宗该填哪些栏目。

有了这三样东西,档案室的目录就建立起来了。后面讲的血缘、标签,都是在这套档案上继续添加批注。没有元数据模型,数据治理就像没有目录的档案馆,找什么都得翻箱倒柜。

M=(E,A,R)M = (E, A, R)
这个公式把元数据模型概括为:实体集合 E、属性集合 A、关系集合 R 三元组。简单说,先登记“有哪些东西”,再补充“每个东西的细节”,最后连起来“谁和谁有关”。
  1. 实体集合 EE 代表所有数据资产的登记对象,一张表、一个字段就是一个实体,相当于档案室里的每一份卷宗。
    E={e1,e2,…,en}E = \{e_1, e_2, \dots, e_n\}
  2. 属性集合 AA 表示实体自身携带的描述信息,例如表名、字段名、数据类型,相当于卷宗封面上的标题、编号和日期。
    A(e)={a1,a2,…,am}A(e) = \{a_1, a_2, \dots, a_m\}
  3. 关系集合 RR 是实体之间的连接,例如“订单表属于数仓层”“phone 字段属于用户表”,相当于卷宗之间互相引用的签条。
    R={(ei,ej,r)∣ei,ej∈E}R = \{(e_i, e_j, r) \mid e_i, e_j \in E\}

血缘追踪:从水龙头一路追到水厂

家里的水有点浑浊,维修师傅不会只盯着水龙头,而是沿着管道逐段排查:先看入户支管,再看楼下的总阀,最后追到水厂的沉淀池。这条“排查路径”就是数据血缘的雏形:数据不会凭空产生,每一份数据都有它的上游来源和下游去向。

数据血缘记录的就是这种来龙去脉。在 Atlas 里,血缘以图的形式存在:节点是数据实体,边是“由谁产生 / 流向谁”。比如一张日活报表,它的上游可能是用户表、登录日志表,再往上游追,可能还涉及埋点事件表;下游则可能是周报、月度经营分析看板。

Atlas 通过钩子自动采集血缘,例如 Hive 执行 INSERT OVERWRITE 时,钩子会记录源表与目标表的关系。血缘有一个重要特征是传递性:如果 A 流向 B,B 流向 C,那么 C 的血缘不仅要记 B,还要记 A。Atlas 会把整条链路展开,形成一张完整的血缘 DAG(有向无环图)。

回到水管的比喻:有了这张完整的管网图,数据出现异常时,工程师可以从报表节点点击“向上追溯”,像维修师傅一样顺着图纸一级一级排查,几分钟内定位到污染源,而不是在几千张表里大海捞针。

lineage(v)=input(v)∪⋃u∈input(v)lineage(u)\text{lineage}(v) = \text{input}(v) \cup \bigcup_{u \in \text{input}(v)} \text{lineage}(u)
这个公式表示:目标数据集 v 的完整血缘,等于它的直接上游 all input(v),再并上每个直接上游自己的完整血缘。一层层递归,最后追到最底层的源表。
  1. 直接输入集 input(v)先找出所有直接流向 v 的上游数据集,也就是血缘图中的“上一层水管”。
    input(v)={u∣u→v}\text{input}(v) = \{ u \mid u \to v \}
  2. 递归祖先血缘对每个直接上游 u,继续求它的血缘,直到到达没有上游的源表。
    ⋃u∈input(v)lineage(u)\bigcup_{u \in \text{input}(v)} \text{lineage}(u)
  3. 并集合成完整血缘把直接上游和所有递归祖先合并起来,得到 v 的完整血缘链。
    lineage(v)=input(v)∪⋃u∈input(v)lineage(u)\text{lineage}(v) = \text{input}(v) \cup \bigcup_{u \in \text{input}(v)} \text{lineage}(u)

分类标签:给不同水质贴标牌

水务局会把水源分成饮用级、工业级、灌溉级,不同等级的水走不同的管道,绝不允许串管。数据世界里也一样,手机号、身份证号、家庭住址属于敏感数据,需要特殊管控。Atlas 的分类标签就是这种“水质标牌”。

Atlas 允许你自定义一套分类体系,比如按敏感等级分为 PII、财务、公开,按数据域分为用户域、交易域、商品域。你可以给一张表打上“用户域”标签,也可以给一个字段打上“PII”标签。标签一旦打上,就能跟着血缘往下传:用户表被打上 PII,那么从它加工出来的订单表、报表也会自动继承这个标签。

标签传播的规则可以概括为一个简单的合并公式:下游数据的标签 = 上游标签 ∪ 自身标签。同时,标签还能驱动脱敏:Atlas 本身不执行脱敏,但下游引擎看到“PII”标签后,就会对对应字段做掩码处理。

当标签落到字段级别时,脱敏策略也就可以随之定义:如果一个字段被标记为敏感字段,查询引擎把它显示成掩码字符,而不是真实值。

tags(d)=tags(p)∪own_tag(d),p∈parent(d)\text{tags}(d) = \text{tags}(p) \cup \text{own\_tag}(d), \quad p \in \text{parent}(d)
这条公式描述了脱敏的决策逻辑:字段 f 如果带了敏感标签,就输出 *;否则原样输出。Atlas 负责“打标”,Ranger 等引擎负责“执行”。
  1. 父实体标签 tags(p)先取出血缘上游实体 p 已有的标签,相当于看这根管道接的上游水源是什么等级。
    tags(p)\text{tags}(p)
  2. 自身标签 own\_tag(d)再补充数据集 d 自己主动附加的标签,比如某张报表被人工标记为“财务敏感”。
    own_tag(d)\text{own\_tag}(d)
  3. 合并成完整标签两者取并集,最终得到数据集 d 的完整标签集合。
    mask(f)={’*’if f∈sensitive tagsfotherwise\text{mask}(f) = \begin{cases} \text{'*'} & \text{if } f \in \text{sensitive tags} \\ f & \text{otherwise} \end{cases}

安全集成:给闸门装上门禁

标牌只能让人看见水质等级,真正阻止错用水源的是门禁。水务局会给饮用级管道加装锁具,只有持证人员才能开闸。在 Hadoop 生态里,这个门禁系统就是 Apache Ranger。

Atlas 本身不是安全执行引擎,它更像一个“标签提供方”。Atlas 把分类标签同步给 Ranger,Ranger 在用户发起访问请求时做拦截判断。举个例子:数据分析师查询用户表时,Ranger 发现 phone 字段带有 PII 标签,且策略要求“非授权用户只能看到脱敏值”,于是查询引擎自动把手机号替换成 1381234。

这种设计的好处是,安全策略不再绑定具体表名,而是绑定标签。新增一百张表,只要都打了 PII 标签,安全策略自动生效,不需要一张张配置白名单。同时,每一次被拦截的访问都会生成审计日志,解答“谁在什么时间碰过什么数据”的问题。

门禁系统让“知道有这管水”和“能喝这管水”彻底分开。Atlas 负责告诉系统哪根管子是饮用水,Ranger 负责拦住没有证件的人,两者配合,数据安全才算真正闭环。

allow(u,r)=RangerPolicy(u,r)∧¬blocked(u,r)\text{allow}(u, r) = \text{RangerPolicy}(u, r) \wedge \neg \text{blocked}(u, r)
这个公式表示:用户 u 访问资源 r 是否被允许,取决于 Ranger 是否有允许策略,同时不能命中任何禁止规则。两个条件必须同时满足。
  1. RangerPolicy(u, r)判断是否存在允许用户 u 访问资源 r 的授权策略,相当于检查这个人有没有门禁卡。
    RangerPolicy(u,r)\text{RangerPolicy}(u, r)
  2. blocked(u, r)判断是否命中禁止规则,例如标签黑名单、临时封禁等。
    ¬blocked(u,r)\neg \text{blocked}(u, r)
  3. 合取结果允许策略为真,并且禁止规则不为真,闸门才打开。
    allow(u,r)=RangerPolicy(u,r)∧¬blocked(u,r)\text{allow}(u, r) = \text{RangerPolicy}(u, r) \wedge \neg \text{blocked}(u, r)

生态集成:接上千家万户的水管

档案室要绘制全市水网,不能靠人工挨家挨户敲门登记,必须和各小区、各水厂的信息系统自动对接。Atlas 要和 Hadoop 生态连接,靠的也是自动化的“数据采集器”,官方称之为Hook(钩子)。

Atlas 提供了多种钩子:Hive Hook、Spark Hook、HBase Bridge、Kafka Hook 等。当用户在 Hive 里执行建表、插入、更新操作时,Hive Hook 会把操作事件发送出去;当 Spark 任务读取源表、写出结果表时,Spark 监听器也会上报血缘信息。这些事件统一汇聚到 Kafka 总线上,Atlas 后台消费事件,把元数据变更写入自己的存储。

一条元数据事件可以抽象成三个要素:事件类型、涉及实体、发生时间。正因为有这套自动采集机制,数据平台上每天新增的表、每一条新加工链路,都能在秒级延迟内出现在 Atlas 的档案柜里,完全不需要人工维护。

有了这些自动上报的“施工记录”,档案室就永远是最新的。无论是数仓新增分层、还是报表调整口径,Atlas 都能在几分钟内反映出来,让治理工作从“事后补文档”变成“实时生成文档”。

event=(type,entity,timestamp)\text{event} = (\text{type}, \text{entity}, \text{timestamp})
这个公式表示 Atlas 从生态接收的最小元数据事件消息:发生了什么类型的事,发生在哪个实体上,什么时间发生。
  1. type(事件类型)描述元数据变化的动作类型,例如实体创建、属性更新、关系新增。
    type∈{ENTITY_CREATE,ENTITY_UPDATE,RELATIONSHIP_ADD}\text{type} \in \{\text{ENTITY\_CREATE}, \text{ENTITY\_UPDATE}, \text{RELATIONSHIP\_ADD}\}
  2. entity(涉及实体)被变更的数据对象,可能是新建的表、新增的字段或一条新的血缘关系。
    entity\text{entity}
  3. timestamp(时间戳)记录事件发生时刻,用于顺序重建和审计追溯。
    timestamp\text{timestamp}

治理平台:调度中心与仪表盘

有了档案、血缘、标牌和门禁,水务局还缺一块调度中心大屏:管理层能一眼看到全市供水覆盖率、各片区管道健康度。Atlas 的 Web UI 和 REST API 就是治理平台的“大屏中枢”。

在企业级应用中,Atlas 通常承担三个平台角色。第一是血缘图谱:点击任意一张表,即可看到它的完整上游和下游,支持按层级展开、按类型过滤;第二是覆盖评估:统计有多少实体打了标签、有多少表接了血缘,用覆盖率指标量化治理进度;第三是合规审计:把血缘关系和访问日志导出成报告,用来回应监管部门的“数据从哪来、到哪去、谁碰过”三连问。

治理覆盖率是一个常用指标,计算方式很直观:已经打过标签的实体数量除以全部实体数量。

当管理员看到覆盖率从 30% 提升到 90%,就像调度中心大屏上显示“全市管网登记率 90%”。这样的平台,既让高层对数据家底心中有数,也让一线工程师在排查问题时有所依靠。

coverage=∣{e∈E∣tag(e)≠∅}∣∣E∣\text{coverage} = \frac{|\{e \in E \mid \text{tag}(e) \ne \emptyset\}|}{|E|}
覆盖率衡量数据治理的广度:分子是“有标签的实体数”,分母是“全部实体数”。覆盖率越高,说明绝大部分数据资产都处于可视、可控、可审计的状态。
  1. 分子已打标签的实体数量:统计所有具备非空标签的实体个数,表示档案室里已经贴了标牌的文件数量。
    ∣{e∈E∣tag(e)≠∅}∣|\{e \in E \mid \text{tag}(e) \ne \emptyset\}|
  2. 分母全部实体数量:统计全体元数据实体的个数,表示档案室里所有文件的总量。
    ∣E∣|E|
  3. 比例解释两者相除得到 0 到 1 之间的覆盖率,越接近 1 说明治理越完善。
    coverage=tagged_counttotal_count\text{coverage} = \frac{\text{tagged\_count}}{\text{total\_count}}

AI 应用场景

场景一:BI 报表数据异常的血缘排查

阶段:数据质量诊断与追溯

解决的问题:传统方式只能人工翻 SQL、找任务依赖,排查一次数据异常可能要花半天。AI 数据平台接入 Atlas 血缘后,点开异常报表就能看到完整上游链路。

具体案例:某电商公司月度 GMV 报表突然翻倍,数据工程师在 Atlas 血缘图里点开报表节点,发现上游有多条链路,其中一条来自大促“订单快照表”。点击追溯后定位到该表的清洗任务被重复执行,导致订单被重复统计,修复后报表恢复正常。

场景二:标签驱动的自动脱敏与隐私保护

阶段:数据合规与访问控制

解决的问题:大量用户特征表被训练团队和分析团队共用,人工脱敏容易漏字段。Atlas 统一定义敏感标签,Ranger 根据标签自动拦截和掩码。

具体案例:某银行数据团队在 Atlas 中给 user_profile.phone、id_card 打上“PII”标签。标签沿血缘传播到衍生特征表,Ranger 对非授权角色返回脱敏值,对风控模型团队返回完整值。新增特征表时,只要字段命名中包含敏感语义并接入血缘,脱敏规则自动生效。

场景三:监管审计报告的数据血缘导出

阶段:合规审计与监管报送

解决的问题:金融机构面对监管要求,需要证明“数据从业务系统到数仓到报表的每一步都合规”。Atlas 可导出血缘报告和审计日志。

具体案例:某证券公司在年度合规检查前,通过 Atlas 导出核心交易数据的血缘链路图,展示数据从柜台系统进入 Kafka,经过 Flink 清洗进入 Hive,再汇聚到客户资产报表的完整路径,同时附上 Ranger 的访问审计记录,顺利通过检查。

Python 演示

python57 行
class MiniAtlas:    def __init__(self):        self.entities = {}        self.lineage_map = {}        self.tags_map = {}     def register(self, name, fields, tags=None):        """注册一个数据表实体及其字段。"""        self.entities[name] = fields        self.tags_map[name] = set(tags or [])     def add_lineage(self, src, dst):        """记录一条血缘边: src 表流向 dst 表。"""        self.lineage_map.setdefault(dst, []).append(src)     def upstream(self, name, seen=None):        """递归获取某个表的完整血缘祖先集合。"""        if seen is None:            seen = set()        seen.add(name)        ancestors = []        for src in self.lineage_map.get(name, []):            if src not in seen:                ancestors.append(src)                ancestors.extend(self.upstream(src, seen))        return ancestors     def propagate_tags(self):        """让敏感标签沿着血缘链路传播到所有下游表。"""        for name in self.entities:            inherited = set()            for src in self.upstream(name):                inherited |= self.tags_map.get(src, set())            self.tags_map[name] |= inherited     def get_info(self, name):        """返回某张表的血缘祖先和标签。"""        return {            "upstream": self.upstream(name),            "tags": sorted(self.tags_map.get(name, set())),        }  if __name__ == "__main__":    atlas = MiniAtlas()    atlas.register("user_info", ["uid", "phone", "age"], tags=["PII"])    atlas.register("order", ["order_id", "uid", "amount"])    atlas.register("finance_report", ["month", "total_amount"])     atlas.add_lineage("user_info", "order")    atlas.add_lineage("order", "finance_report")     atlas.propagate_tags()     info = atlas.get_info("finance_report")    print("upstream tables:", info["upstream"])    print("inherited tags:", info["tags"])
目的:用不到 60 行模拟 Apache Atlas 的两大核心能力——血缘追踪和标签传播。financereport 虽然没直接打标,但通过血缘继承了 user_info 的 PII 标签。
  1. self.lineage_map.setdefault(dst, []).append(src)记录“目标表 -> 源表”的血缘边,这是 Atlas 血缘图的最小存储单元。
  2. def upstream(self, name, seen=None)递归向上回溯,seen 集合防止环状血缘造成死循环。
  3. inherited |= self.tags_map.get(src, set())把每个祖先表的标签合并起来,这是标签传播的核心操作。
  4. atlas.add_lineage("user_info", "order")模仿 Hive Hook 上报的“订单表读取用户表”事件。
  5. atlas.propagate_tags()一键触发全图标签传播,让 PII 标记从 user_info 流到 finance_report。

常见误区

误区我搭了 Atlas,是不是以后数据抽取、清洗、去重都能自动完成?感觉它像是一个 ETL 工具。

正解Atlas 是档案室,不是施工队。它只记录元数据和血缘关系,从不执行数据搬运或清洗。ETL 工具负责把水从 A 管道引到 B 管道,Atlas 只负责在图纸上画一条新的连接线。

为何常见:因为 Atlas 常和 Hive、Spark 一起出现,容易让人误以为它参与了计算过程。实际上它只是“旁观者”,通过 Hook 观察并记录。

误区Atlas 里有分类标签,那它是不是可以直接拦截用户访问?毕竟标签都挺敏感了。

正解Atlas 只负责标注“这管水是饮用水”,不负责装锁。真正的访问拦截由 Apache Ranger 执行。Atlas 把标签同步给 Ranger,Ranger 在用户查询时做出允许或拒绝的决策。两者是“贴标签的”和“看门的”关系。

为何常见:Atlas 的标签具有“安全属性”,UI 上又展示审计信息,容易让人误以为它自带安全策略执行器。

误区报表 A 由表 B 加工而来,那血缘关系里存一条 A→B 就够了,不用再往上看。

正解血缘具有传递性。A 的上游是 B,B 的上游是 C,那么 A 的完整血缘必须包含 B 和 C。Atlas 会递归展开整个 DAG,否则排查问题时只能看到一层,无法追到最底层的源表。

为何常见:日常排查问题时,我们通常只关心最近的一层依赖,忽略了血缘本身是一个可递归追溯的结构。

误区我在 Atlas 里给手机号字段打了 PII 标签,它就自动变成 1381234 了。

正解打标签只是第一步。Atlas 本身不会改数据,脱敏要由下游执行引擎完成。通常流程是:Atlas 打标签 → Ranger 读取标签策略 → Hive/Spark 在返回结果时做掩码。标签是“指令”,不是“执行者”。

为何常见:标签和脱敏在业务讨论中经常被一起提出,导致初学者把两者绑定为一个动作。

误区Atlas 的元数据就放在一个关系型数据库表里,数据量不会太大。

正解Atlas 是分布式架构:实体数据存在 HBase,索引和检索依赖 Solr,事件传输用 Kafka,后台处理用多种服务。它面对的实体数量可能达到千万级,血缘图查询也需要水平扩展能力。

为何常见:从 Web UI 上看 Atlas 只是一个界面,看不出背后的分布式存储。小数据量验证时性能差异不明显,容易产生“它就是个单机应用”的错觉。

面试题

Q1. Apache Atlas 的两大核心能力是什么?

单选题 · easy

  • A.元数据管理与血缘追踪← 正确答案
  • B.数据存储与并行计算
  • C.数据采集与实时清洗
  • D.可视化报表与数据挖掘

答案:A。Atlas 的核心是元数据管理和数据血缘追踪。它不负责数据存储、计算或清洗,而是记录数据资产的结构与流转关系。就像档案室登记管道信息,而不是修管道。

Q2. 数据血缘中的“祖先”指的是什么?

单选题 · easy

  • A.当前表的所有上游表集合← 正确答案
  • B.当前表的创建时间序列
  • C.当前表的所有下游报表
  • D.当前表的物理存储路径

答案:A。血缘具有传递性,祖先指当前表全部上游来源,包括直接上游和更早的源表。下游报表是“子孙”而非祖先,创建时间和存储路径与血缘无关。

Q3. 在 Atlas 中给字段打上“敏感”标签后,谁来完成脱敏?

单选题 · mid

  • A.依赖标签的访问执行引擎← 正确答案
  • B.存储实体元数据的 HBase
  • C.绘制血缘图谱的展示层
  • D.数据建模工具的建表代码

答案:A。Atlas 只负责标注,脱敏要由 Ranger、Hive 或 Spark 等访问执行引擎根据标签策略完成。HBase 是元数据存储,UI 只负责展示,建表代码与脱敏无关。

Q4. Atlas 与 Ranger 的协作关系是什么?

单选题 · mid

  • A.Atlas 提供分类标签供 Ranger 做访问控制← 正确答案
  • B.Ranger 生成血缘关系供 Atlas 展示
  • C.两者完全独立,不做任何数据交互
  • D.Ranger 是 Atlas 的底层存储引擎

答案:A。Atlas 负责打标签和管元数据,Ranger 负责访问控制。Atlas 把分类标签同步给 Ranger,Ranger 依据标签执行权限拦截,形成“标牌 + 门禁”的分工。

Q5. Atlas 的典型内部存储与通信组件包含哪些?

多选题 · mid

  • A.HBase 实体存储← 正确答案
  • B.Solr 索引检索← 正确答案
  • C.Kafka 事件总线← 正确答案
  • D.Redis 缓存存储

答案:ABC。Atlas 使用 HBase 存储实体数据,Solr 提供全文检索,Kafka 作为元数据事件总线,三者是核心组件。Redis 不是 Atlas 的标准依赖。

Q6. 血缘传递性说明:若 A→B 且 B→C,则 C 的血缘包含什么?

单选题 · mid

  • A.直接上游 B 及递归祖先 A← 正确答案
  • B.只包含直接上游的表 B
  • C.只包含最终报表的字段
  • D.包含所有下游表和对应的库

答案:A。如果 B 的上游是 A,那么 C 的血缘会递归展开为 B 和 A。这就是血缘传递性,相当于排查水质问题时不仅看水龙头,还要一路追到水厂。

Q7. 添加一条“订单表 → 月度报表”血缘后,报表的标签能否延伸?

单选题 · hard

  • A.能,若订单表带 PII 标签则标签会传播← 正确答案
  • B.不能,标签始终停留在原表
  • C.能,但需要手动修改元数据库
  • D.不能,血缘与标签完全无关

答案:A。Atlas 的标签会沿血缘链路传播。订单表若带有 PII 标签,月度报表作为下游会自动继承。前提是血缘关系已正确采集,不需要人工改元数据库。

Q8. 数据治理覆盖率是怎么计算的?

单选题 · easy

  • A.已打标签实体数与全部实体数的比值← 正确答案
  • B.数据仓库中已存储数据的总大小
  • C.每天新增表的数量增长率
  • D.数据任务执行的成功率占比

答案:A。覆盖率 = 已打标签实体数 ÷ 全部实体数,反映治理的广度。数据大小、新增表数量、任务成功率都不是 Atlas 覆盖率的定义。

Q9. Atlas 采集 Hadoop 生态元数据时,通常依赖哪些机制?

多选题 · hard

  • A.Hive Hook 发送表操作事件← 正确答案
  • B.Spark 监听器上报血缘信息← 正确答案
  • C.人工维护 Excel 导入全部元数据
  • D.Kafka 总线转发元数据消息← 正确答案

答案:ABD。Hive Hook 和 Spark 监听器是自动采集源,Kafka 负责事件转发。人工 Excel 导入不是 Hadoop 生态的自动采集机制,只能算补充手段。

Q10. 遇到“报表数据翻倍”问题时,Atlas 血缘图的作用是什么?

单选题 · easy

  • A.回溯上游表定位异常来源← 正确答案
  • B.自动修改报表的 SQL 语句
  • C.删除所有重复的数据记录
  • D.直接把报表数据压缩一半

答案:A。血缘图帮助工程师沿链路向上排查,找出哪个上游任务被重复执行或哪个源表出错。Atlas 不修改 SQL、不删数据、不压缩数据,它只是提供线索的“管网图”。