Apache Atlas共享DataSet时多流程血缘意外关联的问题求助
你遇到的问题核心是Apache Atlas的实体全局唯一性机制:
你共享的datasystem_computer实体(qualifiedName为21781e1b-4b94-435b-be0a-141776267c4e@datasystem_computer)是全局唯一的,并非分属不同流程的独立节点。当你在第二个流程中把它作为dataEgressUseCase2的输出,又作为dataEgressUseCase2.5的输入时,Atlas会自动维护该实体的所有入站/出站关联关系,导致第一个流程的dataEgressUseCase1和第二个流程的dataEgressUseCase2.5通过这个共享实体被自动串联——这是Atlas默认的全局血缘维护逻辑,不是你的操作错误,而是对实体唯一性的理解偏差。
1. 为每个流程创建独立的实体实例(推荐方案)
即使对应同一台物理计算机,给每个流程对应的实体实例生成不同的qualifiedName,让它们成为Atlas中的独立实体,各自的血缘关系就不会互相干扰。
比如修改第一个流程的输出节点:
"outputs": [ { "uniqueAttributes":{"qualifiedName": "21781e1b-4b94-435b-be0a-141776267c4e-useCase1@datasystem_computer"}, "typeName": "datasystem_computer" } ]
第二个流程中涉及该计算机的节点也同步修改:
// dataEgressUseCase2的输出 "outputs": [ { "uniqueAttributes":{"qualifiedName": "21781e1b-4b94-435b-be0a-141776267c4e-useCase2@datasystem_computer"}, "typeName": "datasystem_computer" } ], // dataEgressUseCase2.5的输入 "inputs": [ { "uniqueAttributes":{"qualifiedName": "21781e1b-4b94-435b-be0a-141776267c4e-useCase2@datasystem_computer"}, "typeName": "datasystem_computer" } ]
2. 通过属性标记+查询过滤实现隔离
如果不想创建多个实体,可以修改datasystem_computer的类型定义,新增一个processContext属性(字符串类型),用于标记实体所属的流程(比如useCase1、useCase2)。后续查询血缘时,通过这个属性过滤,只展示同流程下的关联关系。
3. 用标签分组隔离流程
给每个流程的所有实体(包括数据传输任务、数据源、计算机)打上专属标签(比如useCase1、useCase2),在Atlas UI查看血缘时,利用标签筛选功能,只显示同一标签下的实体关联,实现流程间的血缘隔离。
内容的提问来源于stack exchange,提问作者jason

