Atlas数据血缘系统的实现原理
Apache Atlas如何实现数据血缘(Data Lineage)追踪?请解释Atlas的Type System、Hook机制(如Hive Hook/Spark Hook)、REST API调用方式、以及血缘关系图的存储和查询机制(Graph Database+Solr/Elasticsearch双索引架构)。
回答
古法程序员
Atlas血缘实现原理:
-
Type System(元数据模型):
- 定义Entity Type(表、列、过程等)
- 定义Relationship Type(Table→Column、Process→Input/Output)
- 预置Hive、Sqoop、Kafka等多种Type定义
-
Hook机制:
- Hive Hook:
- 在HiveQL执行时拦截
LineageInfo - 自动提取INSERT/CTAS/CREATE VIEW的输入输出关系
- 异步发送到Kafka → Atlas消费写入图数据库
- 在HiveQL执行时拦截
- Spark Hook:
- 通过SparkListener拦截SQL执行
- 解析QueryExecution提取血缘信息
- 支持自定义Hook(Python/Java SDK)
- Hive Hook:
-
双索引架构:
- JanusGraph(图数据库):存储实体和关系的图结构
- Solr/Elasticsearch:全文索引(快速搜索实体名称、Tags)
- 查询流程:搜索→Solr返回EntityID→JanusGraph查询完整血缘链路
-
血缘展示:
HiveTable_A (列col1,col2) ↓ (Process: ETL_Job) HiveTable_B (列col1,col2,col3) ↓ (Process: CTAS_create_view) View_V -
REST API:
GET /v2/lineage/{entityGuid}:查询全链路血缘GET /v2/search/dsl:DSL搜索血缘
-
集成产品:DataHub、Marquez等新型血缘系统提供更友好的UI。