需求说明:公司进行血缘分析,但是没有好用的血缘分析工具,从开源的社区找到了atlas,感觉很智能,可以自动分析sql语句,做到字段级别的拆分,回溯血缘很好用,下面就是atlas的代码讲解

sql分析器:Antlr (ANother Tool for Language Recognition) 是一个强大的跨语言语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架。Antlr可以从语法上来生成一个可以构建和遍历解析树的解析器。可以参考:https://www.cnblogs.com/clonen/p/9083359.html

Apache Atlas版本号:2.0.0

从官方网站下载Apache Atlas2.0.0版本源代码,用开发工具(如IntelliJ IDEA)打开。

根目录结构

开源血缘分析工具atlas源码讲解-风君雪科技博客

一、3party-licenses

        第三方组件许可,可以看出Atlas主要用到的第三方技术组件,绝大部分是前端技术组件,janusgraph和titan是图数据库组件,JanusGraph是Titan的继承者,老版本用的是Titan,新版本是用的JanusGraph

二、addons

       安装扩展组件源代码,主要是Atlas接入各种Hadoop元数据数据源的桥接代码,对应Atlas架构图中的部分:

开源血缘分析工具atlas源码讲解-风君雪科技博客

1、falcon-bridge

falcon桥接扩展模块,Apache Falcon是一个开源的hadoop数据生命周期管理框架, 它提供了数据源 (Feed) 的管理服务,如生命周期管理,备份,存档到云等,通过Web UI可以很容易地配置这些预定义的策略, 能够大大简化hadoop集群的数据流管理。falcon-bridge主要负责将Apache Falcon元数据接入Atlas元数据管理系统。
    bridge.FalconBridge类,提供了一系列注册Falcon元数据实体到Atlas系统的桥接工具API方法
    hook.FalconHook类,Falcon元数据通知事件钩子处理类

    这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/,或者本地文档:docs/src/site/twiki/Hook-Falcon.twiki

2、falcon-bridge-shim

        falcon桥接扩展垫片,即atlas的falcon桥接插件

3、hbase-bridge

Hbase桥接扩展模块,通过bin目录下的import-hbase.sh脚本导入Hbase元数据到Atlas系统,脚本调用了桥接代码类HBaseBridge,main方法入口。这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/,或本地文档:docs/src/site/twiki/Hook-HBase.twiki

4、hive-bridge

        hive桥接扩展模块,通过bin目录下的import-hive.sh脚本导入hive元数据到Atlas系统,脚本调用了桥接代码类HiveMetaStoreBridge,main方法入口。

        这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/,或本地文档:docs/src/site/twiki/Hook-Hive.twiki

5、kafka-bridge

Kafka桥接扩展模块,通过bin目录下的import-kafka.sh脚本导入hive元数据到Atlas系统,脚本调用了桥接代码类KafkaBridge,main方法入口。这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/HookKafka

6、models

        提供Atlas各种元数据模型类型定义json文件

7、sqoop-bridge

Sqoop桥接扩展模块,主要提供一个SqoopHook类用于在sqoop将其他数据源数据同步到hive仓库后自动发送hive导入操作相关的元数据到Atlas系统。这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/

8、storm-bridge

Storm桥接扩展模块,提供StormAtlasHook类用于将storm拓扑元数据信息通过Kafka Broker发送给Atlas系统进行持久化管理。这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/

三、authorization

          Atlas鉴权模块,支持Simple鉴权和Ranger鉴权两种方式,这个模块的详细介绍说明和使用说明见官方文档:http://atlas.apache.org/

四、build-tools

      构建工具,主要配置Checkstyle进行代码静态检查

五、client

客户端API代码

client-v1包:V1版本客户端API代码

client-v2包:V2版本客户端API代码,客户端调用Atlas API接口时可以直接调用这里封装的API接口方法,减轻代码开发工作量

六、Common

公共模块,主要提供启动和停止所有服务的功能、公共配置和高可用配置管理、公共注解接口、Groovy表达式定义

七、dashboardv2

Atlas管理台UI前端应用,对应架构图中的Admin UI

界面展示html模板代码在dashboardv2/public/js/templates目录下
界面功能业务Js代码在dashboardv2/public/js/views目录下
从package.json中的依赖项可以看出该前端项目主要采用的jquery+requireJS+backbone架构,主要依赖项:
backbone.js:前端框架,backbone.js是一个轻量级的MVC JavaScript库, Backbone 框架中的主要组件包括模型model、视图view、集合collection和路由器router。
backgrid.js :基于backbone.js 用于构建语义和容易样式化的 HTML 表格组件
jQuery:一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。
RequireJS:一个JavaScript文件和模块加载器,可视为模块管理工具,可以提高前端代码的加载速度和质量。项目开发构建依赖grunt-基于 Node.js 的前端项目自动构建工具

八、dev-support

        开发支持,主要提供Docker部署配置,各种API操作的客户端shell执行脚本,样例数据json文件

九、distro

atlas分布式部署相关的一些开发配置文件
pom.xml中提供了一些图数据库存储Hbase和图数据库索引检索组件solr的默认配置
zk目录下提供了zookeeper安装压缩包zookeeper-3.4.6.tgz
bin目录下提供atlas基本安装部署的Python脚本文件,比如启动、停止atlas服务等
conf下提供Atlas配置文件
hbase下是hbase的配置文件
solr下是solr相关的配置文件
zookeeper下是zookeeper的配置文件
另外主要有:Atlas应用配置文件atlas-application.properties、Atlas环境变量配置文件atlas-env.sh、日志配置文件atlas-log4j.xml,鉴权策略配置文件atlas-simple-authz-policy.json、用户认证配置文件users-credentials.properties
main/assemblies目录下是打包相关的描述符配置文件

十、docs

Atlas官方文档,跟官方网站上的在线文档一致,官方文档地址:http://atlas.apache.org/

十一、graphdb

图数据库模块,大致对应架构图中的如下部分:

开源血缘分析工具atlas源码讲解-风君雪科技博客

api:图数据库API,主要提供Atlas从图数据库操作元数据的API接口
common:图数据库公共代码,主要是Tinkerpop图数据库和图计算框架,主要提供了图数据库查询表达式和查询接口
graphdb-implsAtlas图数据库实现依赖,无源代码
janus:JanusGraph图数据库实现模块
graphson:主要提供GraphSON格式数据操作实用工具方法,主要工具方法和业务代码在AtlasGraphSONUtility类中,提供唯一的公共静态API方法:jsonFromElement,用于将图元素对象转化成json格式的GraphSON对象
migration包:数据迁移相关的代码包,主类是GraphDBGraphSONMigrator,用于导入旧数据,入口方法:importData
query包:查询相关的代码包,主要提供图计算查询构造器AtlasJanusGraphQuery
serializer包:序列化相关的的代码包,提供几种数据类型的序列化实现
另外是一些图数据库操作相关的类janus-hbase2:JanusGraph图数据库HBase存储管理模块

十二、intg

Atlas集成模块,对应架构图中的:

开源血缘分析工具atlas源码讲解-风君雪科技博客

entitytransform包:实体转化处理相关的代码,主要关注几个hive和hdfs实体处理的Handler类
listener包:提供2个监听器接口定义,Atlas元数据实体变更通知监听接口和类型变更监听接口
model包:提供各种模型定义
pc包:提供WorkItem作业条目管理
security包:提供安全相关的配置管理
store:提供Atlas类型定义持久化存储接口
type包:提供各种Atlas类型定义以及类型操作的实用工具静态API方法
utils包:提供Atlas实体处理的实用工具静态API方法、Kerberos认证的实用工具静态API方法
v1:提供V1版本的模型定义和类型操作API方法
ApplicationProperties和AtlasConfiguration提供Atlas属性参数管理

十三、notification

        提供基于kafka的消息通知处理,包括一些钩子消息的处理,对应架构图中的Messaging<kafka>,参考官方文档:http://atlas.apache.org/Notifications

十四、plugin-classloader

Atlas插件类加载器,用于加载Atlas插件类

十五、repository

        Atlas元数据仓库管理模块,大致对应架构图中的如下部分:

开源血缘分析工具atlas源码讲解-风君雪科技博客

discovery:提供元数据搜索、检索相关的服务
glossary:提供元数据术语相关的操作服务
query:提供基于Gremlin图遍历语言和DSL(Domain Specific Search)语言的元数据查询服务
repository: Atlas元数据仓库核心服务
audit :提供元数据仓库操作日志审计功能
converters:Atlas各种数据类型格式转换处理
graph:提供图数据库服务
impexp:元数据导入导出处理
migration:数据迁移服务
ogm:各种数据传输对象DTO定义
patches:补丁管理服务
store:Atlas元数据存储访问服务层
userprofile:用户Profile服务services:提供统计度量服务
util:提供实用工具API

GraphTransactionAdvisor图事务切面,GraphTransactionInterceptor图事务拦截器

十六、server-api

Atlas服务器相关API,给其他模块引用

十七、test-tools

测试工具模块,提供本地solr运行器,用于solr服务测试

十八:tools

工具模块,提供Atlas索引修复工具、HDP-2.6.x版本元数据导出Python脚本、classification

分类修改处理代码和shell脚本

十九、webapp

Atlas Web应用模块,对应架构图中的API<HTTP/REST>

web应用需要登录,登录页面为login.jsp
跟管理台UI前端模块结合使用,登录js在前端模块,登录成功后进入前端模块功能界面,前端调用webapp提供的API接口
examples包:提供快速测试样例,用来测试web API接口
notification包:通知消息处理,Atlas实体变更通知处理、kafka通道钩子消息监听处理
util包提供唯一类CredentialProviderUtility,用于安全认证处理
web包:主要提供Rest API接口
dao.UserDao用户登录处理数据访问层实现
errors:异常错误处理
filters:过滤器,主要是登录认证的过滤器,提供SSO登录、CSRF攻防、访问审计日志等功能
listeners.LoginProcessor:用户登录处理,包括简单登录处理和kerberos认证登录处理
model.User用户属性定义
params:参数类型定义
resources.AdminResource:管理API资源服务,提供获取系统线程Dump、版本信息、服务状态、会话信息、性能度量信息、元数据导入导出、集群服务器信息等API接口
rest包:提供Rest API接口
DiscoveryREST:提供元数据搜索相关的REST API接口,支持DSL查询或全文检索查询
EntityREST:提供Atlas元数据实体增删改查操作相关的REST API接口
GlossaryREST:提供Atlas术语增删改查操作相关的REST API接口
LineageREST:提供获取Atlas元数据实体的血统图REST API接口
RelationshipREST:提供Atlas元数据关联关系增删改查操作相关的REST API接口
TypesREST:提供Atlas元数据类型增删改查操作相关的REST API接口security包:提供安全相关的处理服务
service包:基础服务包
setup包:web容器启动初始化自动装配服务,提供KerberosAwareListener监听类用于自动装配Kerberos登录服务
util包:实用工具包Atlas类:Atlas单机部署启动服务驱动类,通过distro模块Python脚本atlas_start.py调用,通过内嵌的jetty服务器独立运行Atlas元数据服务系统