Apache Atlas 通过 Hive Hook 实现了对 Hive 元数据的采集和管理,
其执行流程可以从源码角度进行详细说明,主要包括以下几个模块:
-
Hive Hook 的事件监听器:Hive Hook 实现了 org.apache.atlas.hive.hook.HiveHook,
作为 Hive 的事件监听器,用于监听 Hive 执行过程中的事件,如创建表、修改表、删除表等。
HiveHook 实现了多个对应的事件处理方法,如 onTableCreate、onTableAlter、onTableDrop 等,
用于将事件信息转换成 Atlas 实体对象并发送到 Atlas 服务。 -
Hive Hook 的实体管理模块:Hive Hook 实现了多个实体管理器,用于管理不同类型的实体对象,
如 Table、Column、Partition 等。每个实体管理器实现了对应的实体创建方法,用于将事件信息转
换成对应的 Atlas 实体对象。例如,Table 实体管理器为 org.apache.atlas.hive.hook.HiveMetaStoreBridge,
实现了 getTable、getTableType、createOrUpdateTable 等方法,用于将表创建、修改、删除事件信息转换成
Atlas 中的 Table 实体对象,并将其发送到 Atlas 服务。 -
Atlas Hook 的实体发送模块:Atlas Hook 实现了实体发送器,用于将生成的 Atlas 实体对象发送到 Atlas 服务。
实体发送器实现了对应的发送方法,用于将实体对象转换成 JSON 格式,并通过 HTTP POST 请求发送到 Atlas 服务。
例如,实体发送器为 org.apache.atlas.hook.AtlasHook,实现了 sendEntity 方法,用于将实体对象转换成 JSON 格式,
并通过 HTTP POST 请求发送到 Atlas 服务。 -
Atlas 服务的实体存储和管理模块:Atlas 服务实现了实体存储和管理模块,用于将接收到的实体对象存储到
Atlas 数据库中,并进行元数据管理。Atlas 服务实现了实体存储和管理类,如 AtlasEntityStore、
AtlasClassificationStore、AtlasTypeDefStore 等,用于将实体对象转换成 Atlas 数据库中的实体、
分类、类型等对象,并进行存储和管理。 -
Atlas Hook 的外部系统集成模块:Atlas Hook 实现了多个外部系统集成器,用于将生成的 Atlas 实体对象
发送到其他外部系统,如 Ranger、Kafka 等。每个外部系统集成器实现了对应的发送方法,用于将实体对象转换
成对应的格式,并通过对应的协议发送到外部系统。例如,Ranger 集成器为 org.apache.atlas.hook.AtlasRangerPlugin,
实现了 onEntitiesAdded、onEntitiesUpdated、onEntitiesDeleted 等方法,用于将实体对象转换成 Ranger 中的策略和
权限对象,并将其发送到 Ranger 服务。
总体来说,Atlas Hive Hook 的执行流程包括监听 Hive 事件、将事件信息转换成 Atlas 实体对象、将实体对象发送到 Atlas 服务等多个模块,通过这些模块的协同工作,实现了对 Hive 元数据的采集和管理。