數據治理之元數據管理的利器——Atlas入門寶典


隨着數字化轉型的工作推進,數據治理的工作已經被越來越多的公司提上了日程。作為Hadoop生態最緊密的元數據管理與發現工具,Atlas在其中扮演着重要的位置。但是其官方文檔不是很豐富,也不夠詳細。所以整理了這份文檔供大家學習使用。

本文檔基於Atlas2.1.0版本,整理自部分官網內容,各種博客及實踐過程。文章較長,建議收藏。新版本的文檔請關注公眾號 大數據流動,會持續的更新~

本文檔共分為8個部分,層級結構如下圖所示。

文檔版權為公眾號 大數據流動 所有,請勿商用。相關技術問題以及安裝包可以聯系筆者獨孤風加入相關技術交流群討論獲取。

一、數據治理與元數據管理

背景

為什么要做數據治理? 業務繁多,數據繁多,業務數據不斷迭代。人員流動,文檔不全,邏輯不清楚,對於數據很難直觀理解,后期很難維護。

在大數據研發中,原始數據就有着非常多的數據庫,數據表。

而經過數據的聚合以后,又會有很多的維度表。

近幾年來數據的量級在瘋狂的增長,由此帶來了系列的問題。作為對人工智能團隊的數據支撐,我們聽到的最多的質疑是 “正確的數據集”,他們需要正確的數據用於他們的分析。我們開始意識到,雖然我們構建了高度可擴展的數據存儲,實時計算等等能力,但是我們的團隊仍然在浪費時間尋找合適的數據集來進行分析。

也就是我們缺乏對數據資產的管理。事實上,有很多公司都提供了開源的解決方案來解決上述問題,這也就是數據發現與元數據管理工具。

元數據管理

簡單地說,元數據管理是為了對數據資產進行有效的組織。它使用元數據來幫助管理他們的數據。它還可以幫助數據專業人員收集、組織、訪問和豐富元數據,以支持數據治理。

三十年前,數據資產可能是 Oracle 數據庫中的一張表。然而,在現代企業中,我們擁有一系列令人眼花繚亂的不同類型的數據資產。可能是關系數據庫或 NoSQL 存儲中的表、實時流數據、 AI 系統中的功能、指標平台中的指標,數據可視化工具中的儀表板。

現代元數據管理應包含所有這些類型的數據資產,並使數據工作者能夠更高效地使用這些資產完成工作。

所以,元數據管理應具備的功能如下:

  • 搜索和發現:數據表、字段、標簽、使用信息
  • 訪問控制:訪問控制組、用戶、策略
  • 數據血緣:管道執行、查詢
  • 合規性:數據隱私/合規性注釋類型的分類
  • 數據管理:數據源配置、攝取配置、保留配置、數據清除策略
  • AI 可解釋性、再現性:特征定義、模型定義、訓練運行執行、問題陳述
  • 數據操作:管道執行、處理的數據分區、數據統計
  • 數據質量:數據質量規則定義、規則執行結果、數據統計

架構與開源方案

下面介紹元數據管理的架構實現,不同的架構都對應了不同的開源實現。

下圖描述了第一代元數據架構。它通常是一個經典的單體前端(可能是一個 Flask 應用程序),連接到主要存儲進行查詢(通常是 MySQL/Postgres),一個用於提供搜索查詢的搜索索引(通常是 Elasticsearch),並且對於這種架構的第 1.5 代,也許一旦達到關系數據庫的“遞歸查詢”限制,就使用了處理譜系(通常是 Neo4j)圖形查詢的圖形索引。

很快,第二代的架構出現了。單體應用程序已拆分為位於元數據存儲數據庫前面的服務。該服務提供了一個 API,允許使用推送機制將元數據寫入系統。

第三代架構是基於事件的元數據管理架構,客戶可以根據他們的需要以不同的方式與元數據數據庫交互。

元數據的低延遲查找、對元數據屬性進行全文和排名搜索的能力、對元數據關系的圖形查詢以及全掃描和分析能力。

Apache Atlas 就是采用的這種架構,並且與Hadoop 生態系統緊密耦合。

下圖是當今元數據格局的簡單直觀表示:

(包含部分非開源方案)

其他方案可作為調研的主要方向,但不是本文討論的重點。

二、Apache Atlas簡介

簡介

在當今大數據的應用越來越廣泛的情況下,數據治理一直是企業面臨的巨大問題。

大部分公司只是單純的對數據進行了處理,而數據的血緣,分類等等卻很難實現,市場上也急需要一個專注於數據治理的技術框架,這時Atlas應運而生。

Atlas官網地址:https://atlas.apache.org/

Atlas是Hadoop的數據治理和元數據框架。

Atlas是一組可擴展和可擴展的核心基礎治理服務,使企業能夠有效,高效地滿足Hadoop中的合規性要求,並允許與整個企業數據生態系統集成。

Apache Atlas為組織提供了開放的元數據管理和治理功能,以建立其數據資產的目錄,對這些資產進行分類和治理,並為數據科學家,分析師和數據治理團隊提供圍繞這些數據資產的協作功能。

如果想要對這些數據做好管理,光用文字、文檔等東西是不夠的,必須用圖。Atlas就是把元數據變成圖的工具。

http://atlas.apache.org/

特性

  • Atlas支持各種Hadoop和非Hadoop元數據類型

  • 提供了豐富的REST API進行集成

  • 對數據血緣的追溯達到了字段級別,這種技術還沒有其實類似框架可以實現

  • 對權限也有很好的控制

Atlas包括以下組件:

  • 采用Hbase存儲元數據
  • 采用Solr實現索引
  • Ingest/Export 采集導出組件 Type System類型系統 Graph Engine圖形引擎 共同構成Atlas的核心機制
  • 所有功能通過API向用戶提供,也可以通過Kafka消息系統進行集成
  • Atlas支持各種源獲取元數據:Hive,Sqoop,Storm。。。
  • 還有優秀的UI支持

效果圖

三、整體架構

架構圖

Atlas架構圖如下:

Core層

Atlas核心包含以下組件:

類型(Type)系統: Atlas允許用戶為他們想要管理的元數據對象定義模型。該模型由稱為“類型”的定義組成。稱為“實體”的“類型”實例表示受管理的實際元數據對象。 Type System是一個允許用戶定義和管理類型和實體的組件。開箱即用的Atlas管理的所有元數據對象(例如Hive表)都使用類型建模並表示為實體。要在Atlas中存儲新類型的元數據,需要了解類型系統組件的概念。

需要注意的一個關鍵點是Atlas中建模的一般特性允許數據管理員和集成商定義技術元數據和業務元數據。也可以使用Atlas的功能定義兩者之間的豐富關系。

圖形引擎: Atlas在內部使用Graph模型持久保存它管理的元數據對象。這種方法提供了很大的靈活性,可以有效地處理元數據對象之間的豐富關系。圖形引擎組件負責在Atlas類型系統的類型和實體之間進行轉換,以及底層圖形持久性模型。除了管理圖形對象之外,圖形引擎還為元數據對象創建適當的索引,以便可以有效地搜索它們。 Atlas使用JanusGraph存儲元數據對象。

采集/導出:采集組件允許將元數據添加到Atlas。同樣,“導出”組件將Atlas檢測到的元數據更改公開為事件。消費者可以使用這些更改事件來實時響應元數據的變更。

Integration層

在Atlas中,用戶可以使用以下的兩種方式管理元數據:

API: Atlas的所有功能都通過REST API向最終用戶暴露,該API允許創建,更新和刪除類型和實體。它也是查詢和發現Atlas管理的類型和實體的主要機制。

Messaging: 除了API之外,用戶還可以選擇使用基於Kafka的消息傳遞接口與Atlas集成。這對於將元數據對象傳遞到Atlas以及使用Atlas使用可以構建應用程序的元數據更改事件都很有用。如果希望使用與Atlas更松散耦合的集成來實現更好的可伸縮性,可靠性等,則消息傳遞接口特別有用.Atlas使用Apache Kafka作為通知服務器,用於鈎子和元數據通知事件的下游消費者之間的通信。事件由鈎子和Atlas寫入不同的Kafka主題。

Metadata sources層

Atlas支持開箱即用的多種元數據源集成。未來還將增加更多集成。目前,Atlas支持從以下來源提取和管理元數據:

  • HBase
  • Hive
  • Sqoop
  • Storm
  • Kafka

集成意味着兩件事:Atlas定義的元數據模型用於表示這些組件的對象。 Atlas提供了從這些組件中攝取元數據對象的組件(在某些情況下實時或以批處理模式)。

Applications層

Atlas管理的元數據被各種應用程序使用,以滿足許多治理需求。

Atlas Admin UI: 該組件是一個基於Web的應用程序,允許數據管理員和科學家發現和注釋元數據。這里最重要的是搜索界面和類似SQL的查詢語言,可用於查詢Atlas管理的元數據類型和對象。 Admin UI使用Atlas的REST API來構建其功能。

Tag Based Policies:Apache Ranger是Hadoop生態系統的高級安全管理解決方案,可與各種Hadoop組件進行廣泛集成。通過與Atlas集成,Ranger允許安全管理員定義元數據驅動的安全策略以實現有效的治理。 Ranger是Atlas通知的元數據更改事件的使用者。

四、編譯、部署與安裝

Atlas的安裝坑較多。本教程將詳細介紹Atlas2.1.0整個安裝過程。

比較難受的是 ,Atlas不提供安裝包,下載的是源碼包 ,需要自行編譯打包。

下載

請前往官網 https://atlas.apache.org/#/Downloads

下載對應版本的源碼包 本文使用的是 2.1.0版本

國內站點 速度要快一些

https://mirrors.tuna.tsinghua.edu.cn/apache/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz

安裝maven

注意,需要先安裝maven,因為這是使用maven開發的java web工程。maven3.6.3版本即可

一些下載地址

http://maven.apache.org/download.cgi

https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

上傳到linux的/usr/local目錄

cd /usr/local

解壓文件

tar -zxvf apache-maven-3.6.3-bin.tar.gz

配置環境變量

vi /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=MAVEN_HOME/bin:PATH 

刷新環境變量

source /etc/profile

檢查版本

mvn -v 

配置好maven的環境變量
注意國內需要配置好maven的國內鏡像,一般使用阿里,華為,清華等鏡像
vi /usr/local/apache-maven-3.6.3/conf/settings.xml

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

把這個setting.xml 拷貝到 ~/.m2/

cp settings.xml .m2/

編譯Atlas

解壓源碼包

tar -zxvf apache-atlas-2.1.0-sources.tar.gz 
1.修改atlas源碼工程的pom.xml

將hbase zookeeper hive等依賴的版本修改成自己環境中一致的版本(或者兼容的版本)

父工程pom文件
<zookeeper.version>3.4.14</zookeeper.version>
<hbase.version>2.2.3</hbase.version>
<solr.version>7.7.2</solr.version>
2.執行maven編譯打包

atlas可以使用內嵌的hbase-solr作為底層索引存儲和搜索組件,也可以使用外置的hbase和solr
如果要使用內嵌的hbase-solr,則使用如下命令進行編譯打包
cd apache-atlas-sources-2.1.0/
export MAVEN_OPTS="-Xms2g -Xmx2g"
mvn clean -DskipTests package -Pdist,embedded-hbase-solr

不用內置就這樣 mvn clean -DskipTests package -Pdist

改完路徑還會非常快的 耐心等待

atlas的webui子模塊中依賴了nodejs,會從nodejs的中央倉庫去下載相關依賴庫

編譯完成之后,會產生打包結果,所在位置是:源碼目錄中的新出現的distro/target目錄

  • 注意,這里產出的有壓縮包也有解壓后的包。這里面的hook包,可以看到有各種平台的hook包。
  • 顧名思義,這就是鈎子包,也就是各個大數據框架會提供各種生命周期回調函數,並且將相關信息以數據方式提供出來。這些鈎子就可以去監聽和接收數據

如果沒有錯誤 並看到一排success就是成功了

安裝Atlas

在完成Atlas編譯以后,就可以進行Atlas的安裝了。Atlas的安裝主要是安裝Atlas的Server端,也就Atlas的管理頁面,並確保Atlas與Kafka Hbase Solr等組件的集成。

Atlas的系統架構如下,在確保 底層存儲與UI界面正常后,之后就可以進行與Hive等組件的集成調試了。

在完成Atlas編譯以后,就可以進行Atlas的安裝了。Atlas的安裝主要是安裝Atlas的Server端,也就Atlas的管理頁面,並確保Atlas與Kafka Hbase Solr等組件的集成。

在確保 底層存儲與UI界面正常后,之后就可以進行與Hive等組件的集成調試了。

1、環境准備

安裝之前 先要准備好

JDK1.8

Zookeeper

Kafka

Hbase

Solr

在啟動Atlas時會配置這些環境變量的地址,所以一定要確保以上組件正常運行。

由於在編譯時可以選擇內部集成,所以這些Atlas是可以自帶的,但是JDK一定要安裝好。

在安裝Altas中,需要Solr 預先創建好collection

 bin/solr create -c vertex_index -shards 3 -replicationFactor 2

 bin/solr create -c edge_index -shards 3 -replicationFactor 2

bin/solr create -c fulltext_index -shards 3 -replicationFactor 2

在solr中驗證創建成功。

2、安裝Atlas

到編譯好的包的路徑下 apache-atlas-sources-2.1.0/distro/target

將生成好的安裝包 apache-atlas-2.1.0-server.tar.gz 拷貝到目標路徑下。

解壓:

tar -zxvf apache-atlas-2.1.0-server.tar.gz

3、修改配置

進入conf目錄下:

vi  atlas-env.sh 

在此指定JAVA_HOME和是否要用內嵌啟動

export JAVA_HOME=/opt/jdk1.8.0_191/
export MANAGE_LOCAL_HBASE=true
export MANAGE_LOCAL_SOLR=true  

如果使用內嵌,那么配置結束,直接去 啟動Atlas

但是大部分時候,需要使用已經有的組件進行集成,所以設置為false。

export JAVA_HOME=/opt/jdk1.8.0_191/
export MANAGE_LOCAL_HBASE=false
export MANAGE_LOCAL_SOLR=false 
#注意修改Hbase配置文件路徑
export HBASE_CONF_DIR=/opt/hbase/conf

修改其他配置

vim atlas-application.properties 

這里就是設置Hbase Solr等配置

#Hbase地址  就是Hbase配置的zookeeper地址
atlas.graph.storage.hostname=slave01:2181,slave02:2181,slave03:2181

atlas.audit.hbase.zookeeper.quorum=slave01:2181,slave02:2181,slave03:2181

#solr服務器地址
atlas.graph.index.search.solr.http-urls=http://slave01:8984/solr

#kafka地址
atlas.notification.embedded=false
atlas.kafka.zookeeper.connect=slave01:2181,slave02:2181,slave03:2181
atlas.kafka.bootstrap.servers=slave01:9092,slave02:9092,slave03:9092

#atlas地址
atlas.rest.address=http://slave01:21000

啟動Atlas

bin/atlas_start.py

啟動成功后訪問:

http://slave01:21000

admin/admin登錄

五、頁面功能介紹

Atlas的頁面功能非常的豐富,可以進行元數據的管理及數據血緣的展示。

主界面

基本搜索

基本搜索允許您使用實體的類型名稱,關聯的分類/標記進行查詢,並且支持對實體屬性以及分類/標記屬性進行過濾。

可以使用 AND/OR 條件對多個屬性進行基於屬性的過濾。



支持的過濾運算符

  • LT(符號:<, lt)適用於數字、日期屬性
  • GT(符號:>、gt)適用於數字、日期屬性
  • LTE(符號:<=, lte)適用於數字、日期屬性
  • GTE(符號:>=,gte)適用於數字、日期屬性
  • EQ(符號:eq、=)適用於數字、日期、字符串屬性
  • NEQ(符號:neq、!=)適用於數字、日期、字符串屬性
  • LIKE(符號:like、LIKE)與字符串屬性一起使用
  • STARTS_WITH(符號:startsWith、STARTSWITH)與字符串屬性一起使用
  • ENDS_WITH(符號:endsWith、ENDSWITH)與字符串屬性一起使用
  • CONTAINS (symbols: contains, CONTAINS) 使用 String 屬性

高級搜索

Atlas 中的高級搜索也稱為基於 DSL 的搜索。

領域特定搜索 (DSL) 是一種結構簡單的語言,該語法模擬了關系數據庫流行的結構化查詢語言 (SQL)。

具體語法請參考Github上的Atlas DSL Grammer (Antlr G4格式)。

例:要檢索名稱可以是 time_dim 或 customer_dim 的 Table 類型的實體:

from Table where name = 'time_dim' or name = 'customer_dim'

Classification

  • 分類傳播使與實體相關聯的分類能夠自動與該實體的其他相關實體相關聯。這在處理數據集從其他數據集派生數據的場景時非常有用 。

為實體添加分類

將分類“PII”添加到“hdfs_path”實體后,該分類將傳播到沿襲路徑中的所有受影響實體,包括“員工”表、視圖“us_employees”和“uk_employees” - 如下所示。

更新與實體關聯的分類

與實體關聯的分類的任何更新也將在分類傳播到的所有實體中看到。

簡單的說,此功能可以監控數據到底流向了哪里。

glossary

詞匯表,也稱術語表為業務用戶提供適當的詞匯表,它允許術語(詞)相互關聯並分類,以便在不同的上下文中理解它們。然后可以將這些術語映射到數據庫、表、列等資產。這有助於抽象與存儲庫相關的技術術語,並允許用戶發現/使用他們更熟悉的詞匯表中的數據。

通過單擊詞匯表 UI 中的術語名稱,可以查看術語的各種詳細信息。詳細信息頁面下的每個選項卡提供該術語的不同詳細信息。

當切換開關在類別上時,面板將列出所有詞匯表以及類別層次結構。這是此視圖下可能的交互的列表。

如果一個術語具有分類,則該實體已被分配繼承相同的分類。

通過術語表的功能,讓數據資產與業務系統建立了聯系。

六、Hive數據血緣

Hive2兼容性問題

Atlas與Hive存在兼容性問題,本文基於Atlas2.1.0兼容CDH6.3.2部署。Hive版本為2.1.1.其他版本的問題不在此文檔討論。

為兼容Hive2.1.1,需要修改源碼重新編譯。

  • 所需修改的項目位置:apache-atlas-sources-2.1.0\addons\hive-bridge

①.org/apache/atlas/hive/bridge/HiveMetaStoreBridge.java 577行

String catalogName = hiveDB.getCatalogName() != null ? hiveDB.getCatalogName().toLowerCase() : null;

改為:

String catalogName = null;

②.org/apache/atlas/hive/hook/AtlasHiveHookContext.java 81行

this.metastoreHandler = (listenerEvent != null) ? metastoreEvent.getIHMSHandler() : null;

改為:C:\Users\Heaton\Desktop\apache-atlas-2.1.0-sources\apache-atlas-sources-2.1.0\addons

this.metastoreHandler = null;

集成Hive

  • 將 atlas-application.properties 配置文件,壓縮加入到 atlas-plugin-classloader-2.0.0.jar 中
#必須在此路徑打包,才能打到第一級目錄下
cd /usr/local/src/atlas/apache-atlas-2.1.0/conf

zip -u /usr/local/src/atlas/apache-atlas-2.1.0/hook/hive/atlas-plugin-classloader-2.1.0.jar atlas-application.properties
  • 修改 hive-site.xml

<property>
    <name>hive.exec.post.hooks</name>
    <value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
  • 修改 hive-env.sh 的 Gateway 客戶端環境高級配置代碼段(安全閥)

HIVE_AUX_JARS_PATH=/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive
  • 修改 HIVE_AUX_JARS_PATH

  • 修改 hive-site.xml 的 HiveServer2 高級配置代碼段(安全閥)

<property>
    <name>hive.exec.post.hooks</name>
    <value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
<property>
    <name>hive.reloadable.aux.jars.path</name>
    <value>/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive</value>
</property>
  • 修改 HiveServer2 環境高級配置代碼段

HIVE_AUX_JARS_PATH=/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive

需要將配置好的Atlas包發往各個hive節點后重啟集群。

導入Hive元數據

  • 執行atlas腳本
./bin/import-hive.sh
#輸入用戶名:admin;輸入密碼:admin

登錄Atlas查看元數據信息。

測試實時hive hook

簡單執行一個hera資源統計的hive腳本

use sucx_test
;

-- 昨日升級設備數
create table if not exists qs_tzl_ProductTag_result(
pid string
,category string
,category_code string
,tag_name string
,tag_value string
,other string
,update_time string
)
partitioned by (tag_id string)
STORED AS PARQUET TBLPROPERTIES('parquet.compression'='SNAPPY')
;


insert overwrite table qs_tzl_ProductTag_result partition(tag_id='3014')
select
       T1.product_id as pid
       ,T2.category
       ,cast(from_unixtime(unix_timestamp()) as string) as update_time
from (select
             product_id
      from COM_PRODUCT_UPGRADE_STAT_D where p_day='20200901' 
     ) T1
left join (select category
        from bi_ods.ods_smart_product where dt='20200901'
        ) T2
on T1.product_id=T2.id
;

執行后查看 qs_tzl_ProductTag_result 的表級血緣為

pid 的字段血緣為

七、Spark數據血緣

打包spark-atlas-connector

atlas 官方文檔中並不支持 spark sql 的解析,需要使用第三方的包。

地址: https://github.com/hortonworks-spark/spark-atlas-connector

一、git clone 后本地進行打包

mvn package -DskipTests

二、打包后在 spark-atlas-connector/spark-atlas-connector-assembly/target 目錄有一個 spark-atlas-connector-assembly-${version}.jar 的 jar,將該 jar 上傳到服務器。
需要注意的是不要上傳 spark-atlas-connector/spark-atlas-connector/target 這個目錄內的 jar ,缺少相關依賴包

三、將 spark-atlas-connector-assembly-${version}.jar 放到一個固定目錄 比如/opt/resource

測試spark hook

首先進入spark-sql client

spark-sql --master yarn  \
--jars /opt/resource/spark-atlas-connector_2.11-0.1.0-SNAPSHOT.jar  \
--files /opt/resource/atlas-application.properties \
--conf spark.extraListeners=com.hortonworks.spark.atlas.SparkAtlasEventTracker \
--conf spark.sql.queryExecutionListeners=com.hortonworks.spark.atlas.SparkAtlasEventTracker \
--conf spark.sql.streaming.streamingQueryListeners=com.hortonworks.spark.atlas.SparkAtlasStreamingQueryEventTracker

執行 hera 的一個資源統計任務

CREATE EXTERNAL TABLE  IF NOT EXISTS sucx_hera.ads_hera_task_mem_top_10(
    `job_id` BIGINT COMMENT '任務ID',
    `user` STRING COMMENT '關注人',
    `applicationId` STRING COMMENT 'yarn執行的app id',
    `memorySeconds` BIGINT COMMENT '內存使用時間和',
    `startedTime` BIGINT COMMENT '開始時間',
    `finishedTime` BIGINT COMMENT '結束時間',
    `elapsedTime` BIGINT COMMENT '運行時間',
    `vcoreSeconds` BIGINT COMMENT 'vcore使用時間和')

ROW FORMAT SERDE
    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
    'field.delim'='\t',
    'serialization.format'='\t')
STORED AS INPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
    'cosn://sucx-big-data/bi//sucx_hera/ads_hera_task_mem_top_10';

 

 

insert overwrite table sucx_hera.ads_hera_task_mem_top_10

select
 job_id,user,applicationId,memorySeconds,startedTime,finishedTime,elapsedTime,vcoreSeconds
from
(SELECT
    top.job_id,
    row_number() over(distribute by top.applicationId ORDER BY sso.id) as num,
    case when sso.name is null then operator
    else sso.name end as user,
    top.applicationId,
    top.memorySeconds,
    top.startedTime,
    top.finishedTime,
    top.elapsedTime,
    top.vcoreSeconds

FROM (
select * from sucx_hera.dws_hera_task_mem_top_10 where dt = '20200901' ) top

left join bi_ods.ods_hera_job_monitor monitor

on  monitor.dt='20200901' and top.job_id=monitor.job_id

left join bi_ods.ods_hera_sso sso

on sso.dt='20200901' and find_in_set(sso.id,monitor.user_ids) >0 order by job_id ) temp

where temp.num = 1

執行后,查看 ads_hera_task_mem_top_10 表級血緣

注意此包不支持 spark 字段的支持。

如果需要spark字段的支持,一種是spark代碼轉成hive跑一遍,一種就是需要自研了。

八、Atlas二次開發

atlas雖好,但是很多場景依然無法滿足我們的需要。這時候就不得不做一些改動了。二次開發有兩種方式一種是基於Atlas Api的開發,一種是修改源碼。

REST API

http://atlas.apache.org/api/v2/index.html

DiscoveryREST

http://hostname:21000/api/atlas/v2/search/basic?classification=class1
參數支持:query、typeName、classification、excludeDeletedEntities、limit、offset
code:https://github.com/apache/atlas/blob/6bacbe946bbc5ca72118304770d5ad920695bd52/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java

# 查詢所有 Table
http://hostname:21000/api/atlas/v2/search/dsl?typeName=Table

# 查詢 owner 前綴為 John 的 Table
http://hostname:21000/api/atlas/v2/search/attribute?typeName=Table&attrName=owner&attrValuePrefix=John

# 查詢 Table 的一些屬性,如:guid, ownerName, searchParameters 等
http://hostname:21000/api/atlas/v2/search/saved/Table

# 不是很懂(返回的數據和上面那個 API 一模一樣)
http://hostname:21000/api/atlas/v2/search/saved

# 查詢 EntityType - Table 下有哪些 entity.
http://hostname:21000/api/atlas/v2/search/saved/execute/Table

# 查詢 guid 為 e283d8c1-ae19-4f4b-80c0-38031788383b 的 EntityType 下有哪些 entity.
http://hostname:21000/api/atlas/v2/search/saved/execute/guid/e283d8c1-ae19-4f4b-80c0-38031788383b

LineageREST

# 查詢 guid 為 a95cb57f-4643-4edf-b5a5-0f1de2e0f076 的實體的血緣
http://hostname:21000/api/atlas/v2/lineage/a95cb57f-4643-4edf-b5a5-0f1de2e0f076

EntityREST

# 查詢 guid 為 48f29229-47a9-4b05-b053-91e6484f42a1 的實體
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1

# 查詢 guid 為 48f29229-47a9-4b05-b053-91e6484f42a1 的實體的審計數據
http://hostname:21000/api/atlas/v2/entity/48f29229-47a9-4b05-b053-91e6484f42a1/audit

# 查詢 guid 為 48f29229-47a9-4b05-b053-91e6484f42a1 的實體所屬的 classifications
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1/classifications

# 根據 EntityType 的唯一屬性查找實體
# 如下:name 是 DB 的一個唯一屬性. 查找 name=Logging 的 DB.
http://hostname:21000/api/atlas/v2/entity/uniqueAttribute/type/DB?attr:name=Logging

# 查詢 entity 與 classification 是否有關?
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1/classification/Dimension

# 批量查詢實體
http://hostname:21000/api/atlas/v2/entity/bulk?guid=e667f337-8dcc-468b-a5d0-96473f8ede26&guid=a95cb57f-4643-4edf-b5a5-0f1de2e0f076

RelationshipREST

# 查詢 guid 為 726c0120-19d2-4978-b38d-b03124033f41 的 relationship
# 注:relationship 可以看做是血緣的一條邊
http://hostname:21000/api/atlas/v2/relationship/guid/726c0120-19d2-4978-b38d-b03124033f41

TypesREST

http://hostname:21000/api/atlas/v2/types/typedef/guid/e0ca4c40-6165-4cec-b489-2b8e5fc7112b
http://hostname:21000/api/atlas/v2/types/typedef/name/Table
http://hostname:21000/api/atlas/v2/types/typedefs/headers
http://hostname:21000/api/atlas/v2/types/typedefs
http://hostname:21000/api/atlas/v2/types/enumdef/name/hive_principal_type
http://hostname:21000/api/atlas/v2/types/enumdef/guid/ee30446a-92e1-4bbc-aa0a-66ac21970d88
http://hostname:21000/api/atlas/v2/types/structdef/name/hive_order
http://hostname:21000/api/atlas/v2/types/structdef/guid/0b602605-8c88-4b60-a177-c1c671265294
http://hostname:21000/api/atlas/v2/types/classificationdef/name/PII
http://hostname:21000/api/atlas/v2/types/classificationdef/guid/3992eef8-fd74-4ae7-8b35-fead363b2122
http://hostname:21000/api/atlas/v2/types/entitydef/name/DataSet
http://hostname:21000/api/atlas/v2/types/entitydef/guid/5dca20ce-7d57-4bc3-a3f1-93fa622c32b1
http://hostname:21000/api/atlas/v2/types/relationshipdef/name/process_dataset_outputs
http://hostname:21000/api/atlas/v2/types/relationshipdef/guid/5d76dae0-6bad-4d19-b9b2-cb0cdc3b53d5

GlossaryREST

http://hostname:21000/api/atlas/v2/glossary
http://hostname:21000/api/atlas/v2/glossary/302dc8f8-3bc8-4878-9ba2-0c585ca6de3d

本地開發環境

啟動HBase和solr

由於在Atlas需要使用到HBase以及slor。方便調試可以解壓之前編譯好內置HBase和sole的tar。

文件補充

創建文件夾將,atlas所需要的文件拷貝過去。

將編譯內置HBase以及solr源碼目錄distro/target/conf下的文件拷貝到上述的上圖的conf目錄。
將源碼中addons/models下所有的文件拷貝過去。
將源碼中的atlas/webapp/target中的內容全部拷貝到webapp目錄中。

源碼啟動

將clone下來的源碼導入到IDEA中。配置啟動參數:

-Datlas.home=/opt/deploy
-Datlas.conf=/opt/deploy/conf
-Datlas.data=/opt/deploy/data

附錄:

參考文章:

http://atlas.apache.org/

https://blog.csdn.net/su20145104009/article/details/108253556

https://www.cnblogs.com/ttzzyy/p/14143508.html

本文檔為Atlas入門寶典,介紹了Atlas基本的一些使用,部分高級功能還在調研與摸索中。包括Atlas與spark,flink的更深入整合,以及與數據湖的集成。也歡迎對數據治理,元數據管理,Atlas感興趣的朋友加入學習群進行討論交流~

如二維碼過期請聯系公眾號大數據流動 作者 獨孤風,備注數據治理,申請入群~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM