1. 程式人生 > 實用技巧 >開源血緣分析工具atlas原始碼講解

開源血緣分析工具atlas原始碼講解

需求說明:公司進行血緣分析,但是沒有好用的血緣分析工具,從開源的社群找到了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-implsAtlas圖資料庫實現依賴,無原始碼
  • 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元資料服務系統