需求說明:公司進行血緣分析,但是沒有好用的血緣分析工具,從開源的社區找到了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)打開。
根目錄結構
一、3party-licenses
第三方組件許可,可以看出Atlas主要用到的第三方技術組件,絕大部分是前端技術組件,janusgraph和titan是圖數據庫組件,JanusGraph是Titan的繼承者,老版本用的是Titan,新版本是用的JanusGraph
二、addons
安裝擴展組件源代碼,主要是Atlas接入各種Hadoop元數據數據源的橋接代碼,對應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/#/HookFalcon,或者本地文檔: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/#/HookHBase,或本地文檔:docs/src/site/twiki/Hook-HBase.twiki
4、hive-bridge
hive橋接擴展模塊,通過bin目錄下的import-hive.sh腳本導入hive元數據到Atlas系統,腳本調用了橋接代碼類HiveMetaStoreBridge,main方法入口。
這個模塊的詳細介紹說明和使用說明見官方文檔:http://atlas.apache.org/#/HookHive,或本地文檔: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/#/HookSqoop
8、storm-bridge
Storm橋接擴展模塊,提供StormAtlasHook類用於將storm拓撲元數據信息通過Kafka Broker發送給Atlas系統進行持久化管理。這個模塊的詳細介紹說明和使用說明見官方文檔:http://atlas.apache.org/#/HookStorm
三、authorization
Atlas鑒權模塊,支持Simple鑒權和Ranger鑒權兩種方式,這個模塊的詳細介紹說明和使用說明見官方文檔:http://atlas.apache.org/#/AuthorizationModel
四、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
圖數據庫模塊,大致對應架構圖中的如下部分:
- api:圖數據庫API,主要提供Atlas從圖數據庫操作元數據的API接口
- common:圖數據庫公共代碼,主要是Tinkerpop圖數據庫和圖計算框架,主要提供了圖數據庫查詢表達式和查詢接口
- graphdb-impls:Atlas圖數據庫實現依賴,無源代碼
- janus:JanusGraph圖數據庫實現模塊
- graphson:主要提供GraphSON格式數據操作實用工具方法,主要工具方法和業務代碼在AtlasGraphSONUtility類中,提供唯一的公共靜態API方法:jsonFromElement,用於將圖元素對象轉化成json格式的GraphSON對象
- migration包:數據遷移相關的代碼包,主類是GraphDBGraphSONMigrator,用於導入舊數據,入口方法:importData
- query包:查詢相關的代碼包,主要提供圖計算查詢構造器AtlasJanusGraphQuery
- serializer包:序列化相關的的代碼包,提供幾種數據類型的序列化實現
- 另外是一些圖數據庫操作相關的類
- janus-hbase2:JanusGraph圖數據庫HBase存儲管理模塊
十二、intg
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元數據倉庫管理模塊,大致對應架構圖中的如下部分:
- 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元數據服務系統