資料治理之後設資料管理的利器——Atlas入門寶典

獨孤風發表於2021-10-29

隨著數字化轉型的工作推進,資料治理的工作已經被越來越多的公司提上了日程。作為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感興趣的朋友加入學習群進行討論交流~

如二維碼過期請聯絡公眾號大資料流動 作者 獨孤風,備註資料治理,申請入群~

相關文章