<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          數(shù)據(jù)治理之元數(shù)據(jù)管理的利器——Atlas入門寶典(萬字長文)

          共 17131字,需瀏覽 35分鐘

           ·

          2021-12-12 22:47

          隨著數(shù)字化轉(zhuǎn)型的工作推進(jìn),數(shù)據(jù)治理的工作已經(jīng)被越來越多的公司提上了日程。作為Hadoop生態(tài)最緊密的元數(shù)據(jù)管理與發(fā)現(xiàn)工具,Atlas在其中扮演著重要的位置。但是其官方文檔不是很豐富,也不夠詳細(xì)。所以整理了這份文檔供大家學(xué)習(xí)使用。

          本文檔基于Atlas2.1.0版本,整理自部分官網(wǎng)內(nèi)容,各種博客及實踐過程。文章較長,建議收藏。

          正文共:?17003字?

          預(yù)計閱讀時間:?43分鐘


          本文檔共分為8個部分,層級結(jié)構(gòu)如下圖所示。


          文檔版權(quán)為公眾號 大數(shù)據(jù)流動 所有,請勿商用。相關(guān)技術(shù)問題以及安裝包可以聯(lián)系筆者獨孤風(fēng)加入相關(guān)技術(shù)交流群討論獲取。

          一、數(shù)據(jù)治理與元數(shù)據(jù)管理

          背景

          為什么要做數(shù)據(jù)治理?業(yè)務(wù)繁多,數(shù)據(jù)繁多,業(yè)務(wù)數(shù)據(jù)不斷迭代。人員流動,文檔不全,邏輯不清楚,對于數(shù)據(jù)很難直觀理解,后期很難維護(hù)。

          在大數(shù)據(jù)研發(fā)中,原始數(shù)據(jù)就有著非常多的數(shù)據(jù)庫,數(shù)據(jù)表。

          而經(jīng)過數(shù)據(jù)的聚合以后,又會有很多的維度表。

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

          也就是我們?nèi)狈?shù)據(jù)資產(chǎn)的管理。事實上,有很多公司都提供了開源的解決方案來解決上述問題,這也就是數(shù)據(jù)發(fā)現(xiàn)與元數(shù)據(jù)管理工具。

          元數(shù)據(jù)管理

          簡單地說,元數(shù)據(jù)管理是為了對數(shù)據(jù)資產(chǎn)進(jìn)行有效的組織。它使用元數(shù)據(jù)來幫助管理他們的數(shù)據(jù)。它還可以幫助數(shù)據(jù)專業(yè)人員收集、組織、訪問和豐富元數(shù)據(jù),以支持?jǐn)?shù)據(jù)治理。

          三十年前,數(shù)據(jù)資產(chǎn)可能是 Oracle 數(shù)據(jù)庫中的一張表。然而,在現(xiàn)代企業(yè)中,我們擁有一系列令人眼花繚亂的不同類型的數(shù)據(jù)資產(chǎn)??赡苁顷P(guān)系數(shù)據(jù)庫或 NoSQL 存儲中的表、實時流數(shù)據(jù)、 AI 系統(tǒng)中的功能、指標(biāo)平臺中的指標(biāo),數(shù)據(jù)可視化工具中的儀表板。

          現(xiàn)代元數(shù)據(jù)管理應(yīng)包含所有這些類型的數(shù)據(jù)資產(chǎn),并使數(shù)據(jù)工作者能夠更高效地使用這些資產(chǎn)完成工作。

          所以,元數(shù)據(jù)管理應(yīng)具備的功能如下:

          • 搜索和發(fā)現(xiàn):數(shù)據(jù)表、字段、標(biāo)簽、使用信息

          • 訪問控制:訪問控制組、用戶、策略

          • 數(shù)據(jù)血緣:管道執(zhí)行、查詢

          • 合規(guī)性:數(shù)據(jù)隱私/合規(guī)性注釋類型的分類

          • 數(shù)據(jù)管理:數(shù)據(jù)源配置、攝取配置、保留配置、數(shù)據(jù)清除策略

          • AI 可解釋性、再現(xiàn)性:特征定義、模型定義、訓(xùn)練運行執(zhí)行、問題陳述

          • 數(shù)據(jù)操作:管道執(zhí)行、處理的數(shù)據(jù)分區(qū)、數(shù)據(jù)統(tǒng)計

          • 數(shù)據(jù)質(zhì)量:數(shù)據(jù)質(zhì)量規(guī)則定義、規(guī)則執(zhí)行結(jié)果、數(shù)據(jù)統(tǒng)計

          架構(gòu)與開源方案

          下面介紹元數(shù)據(jù)管理的架構(gòu)實現(xiàn),不同的架構(gòu)都對應(yīng)了不同的開源實現(xiàn)。

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

          很快,第二代的架構(gòu)出現(xiàn)了。單體應(yīng)用程序已拆分為位于元數(shù)據(jù)存儲數(shù)據(jù)庫前面的服務(wù)。該服務(wù)提供了一個 API,允許使用推送機(jī)制將元數(shù)據(jù)寫入系統(tǒng)。

          第三代架構(gòu)是基于事件的元數(shù)據(jù)管理架構(gòu),客戶可以根據(jù)他們的需要以不同的方式與元數(shù)據(jù)數(shù)據(jù)庫交互。

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

          Apache Atlas 就是采用的這種架構(gòu),并且與Hadoop 生態(tài)系統(tǒng)緊密耦合。

          下圖是當(dāng)今元數(shù)據(jù)格局的簡單直觀表示:

          (包含部分非開源方案)

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

          二、Apache Atlas簡介

          簡介

          在當(dāng)今大數(shù)據(jù)的應(yīng)用越來越廣泛的情況下,數(shù)據(jù)治理一直是企業(yè)面臨的巨大問題。

          大部分公司只是單純的對數(shù)據(jù)進(jìn)行了處理,而數(shù)據(jù)的血緣,分類等等卻很難實現(xiàn),市場上也急需要一個專注于數(shù)據(jù)治理的技術(shù)框架,這時Atlas應(yīng)運而生。

          Atlas官網(wǎng)地址:https://atlas.apache.org/

          Atlas是Hadoop的數(shù)據(jù)治理和元數(shù)據(jù)框架。

          Atlas是一組可擴(kuò)展和可擴(kuò)展的核心基礎(chǔ)治理服務(wù),使企業(yè)能夠有效,高效地滿足Hadoop中的合規(guī)性要求,并允許與整個企業(yè)數(shù)據(jù)生態(tài)系統(tǒng)集成。

          Apache Atlas為組織提供了開放的元數(shù)據(jù)管理和治理功能,以建立其數(shù)據(jù)資產(chǎn)的目錄,對這些資產(chǎn)進(jìn)行分類和治理,并為數(shù)據(jù)科學(xué)家,分析師和數(shù)據(jù)治理團(tuán)隊提供圍繞這些數(shù)據(jù)資產(chǎn)的協(xié)作功能。

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

          特性

          • Atlas支持各種Hadoop和非Hadoop元數(shù)據(jù)類型

          • 提供了豐富的REST API進(jìn)行集成

          • 對數(shù)據(jù)血緣的追溯達(dá)到了字段級別,這種技術(shù)還沒有其實類似框架可以實現(xiàn)

          • 對權(quán)限也有很好的控制

          Atlas包括以下組件:

          • 采用Hbase存儲元數(shù)據(jù)

          • 采用Solr實現(xiàn)索引

          • Ingest/Export 采集導(dǎo)出組件 Type System類型系統(tǒng) Graph Engine圖形引擎 共同構(gòu)成Atlas的核心機(jī)制

          • 所有功能通過API向用戶提供,也可以通過Kafka消息系統(tǒng)進(jìn)行集成

          • Atlas支持各種源獲取元數(shù)據(jù):Hive,Sqoop,Storm。。。

          • 還有優(yōu)秀的UI支持

          效果圖

          三、整體架構(gòu)

          架構(gòu)圖

          Atlas架構(gòu)圖如下:

          Core層

          Atlas核心包含以下組件:

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

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

          圖形引擎: Atlas在內(nèi)部使用Graph模型持久保存它管理的元數(shù)據(jù)對象。這種方法提供了很大的靈活性,可以有效地處理元數(shù)據(jù)對象之間的豐富關(guān)系。圖形引擎組件負(fù)責(zé)在Atlas類型系統(tǒng)的類型和實體之間進(jìn)行轉(zhuǎn)換,以及底層圖形持久性模型。除了管理圖形對象之外,圖形引擎還為元數(shù)據(jù)對象創(chuàng)建適當(dāng)?shù)乃饕员憧梢杂行У厮阉魉鼈?。Atlas使用JanusGraph存儲元數(shù)據(jù)對象。

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

          Integration層

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

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

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

          Metadata sources層

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

          • HBase

          • Hive

          • Sqoop

          • Storm

          • Kafka

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

          Applications層

          Atlas管理的元數(shù)據(jù)被各種應(yīng)用程序使用,以滿足許多治理需求。

          Atlas Admin UI: 該組件是一個基于Web的應(yīng)用程序,允許數(shù)據(jù)管理員和科學(xué)家發(fā)現(xiàn)和注釋元數(shù)據(jù)。這里最重要的是搜索界面和類似SQL的查詢語言,可用于查詢Atlas管理的元數(shù)據(jù)類型和對象。Admin UI使用Atlas的REST API來構(gòu)建其功能。

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

          四、編譯、部署與安裝

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

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

          下載

          請前往官網(wǎng) https://atlas.apache.org/#/Downloads

          下載對應(yīng)版本的源碼包 本文使用的是 2.1.0版本

          國內(nèi)站點 速度要快一些

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

          安裝maven

          注意,需要先安裝maven,因為這是使用maven開發(fā)的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

          配置環(huán)境變量

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

          刷新環(huán)境變量

          source /etc/profile

          檢查版本

          mvn -v

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


          alimaven
          aliyun maven http://maven.aliyun.com/nexus/content/groups/public/
          central

          把這個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等依賴的版本修改成自己環(huán)境中一致的版本(或者兼容的版本)

          父工程pom文件
          3.4.14
          2.2.3
          7.7.2
          2.執(zhí)行maven編譯打包

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

          不用內(nèi)置就這樣 mvn clean -DskipTests package -Pdist

          改完路徑還會非??斓?耐心等待

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

          編譯完成之后,會產(chǎn)生打包結(jié)果,所在位置是:源碼目錄中的新出現(xiàn)的distro/target目錄

          • 注意,這里產(chǎn)出的有壓縮包也有解壓后的包。這里面的hook包,可以看到有各種平臺的hook包。

          • 顧名思義,這就是鉤子包,也就是各個大數(shù)據(jù)框架會提供各種生命周期回調(diào)函數(shù),并且將相關(guān)信息以數(shù)據(jù)方式提供出來。這些鉤子就可以去監(jiān)聽和接收數(shù)據(jù)

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

          安裝Atlas

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

          Atlas的系統(tǒng)架構(gòu)如下,在確保 底層存儲與UI界面正常后,之后就可以進(jìn)行與Hive等組件的集成調(diào)試了。

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

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

          1、環(huán)境準(zhǔn)備

          安裝之前 先要準(zhǔn)備好

          JDK1.8

          Zookeeper

          Kafka

          Hbase

          Solr

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

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

          在安裝Altas中,需要Solr 預(yù)先創(chuàng)建好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中驗證創(chuàng)建成功。

          2、安裝Atlas

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

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

          解壓:

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

          3、修改配置

          進(jìn)入conf目錄下:

          vi  atlas-env.sh

          在此指定JAVA_HOME和是否要用內(nèi)嵌啟動

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

          如果使用內(nèi)嵌,那么配置結(jié)束,直接去 啟動Atlas

          但是大部分時候,需要使用已經(jīng)有的組件進(jìn)行集成,所以設(shè)置為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

          這里就是設(shè)置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服務(wù)器地址
          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的頁面功能非常的豐富,可以進(jìn)行元數(shù)據(jù)的管理及數(shù)據(jù)血緣的展示。

          主界面

          Search

          基本搜索

          基本搜索允許您使用實體的類型名稱,關(guān)聯(lián)的分類/標(biāo)記進(jìn)行查詢,并且支持對實體屬性以及分類/標(biāo)記屬性進(jìn)行過濾。

          可以使用 AND/OR 條件對多個屬性進(jìn)行基于屬性的過濾。

          支持的過濾運算符

          • LT(符號:<, lt)適用于數(shù)字、日期屬性

          • GT(符號:>、gt)適用于數(shù)字、日期屬性

          • LTE(符號:<=, lte)適用于數(shù)字、日期屬性

          • GTE(符號:>=,gte)適用于數(shù)字、日期屬性

          • EQ(符號:eq、=)適用于數(shù)字、日期、字符串屬性

          • NEQ(符號:neq、!=)適用于數(shù)字、日期、字符串屬性

          • LIKE(符號:like、LIKE)與字符串屬性一起使用

          • STARTS_WITH(符號:startsWith、STARTSWITH)與字符串屬性一起使用

          • ENDS_WITH(符號:endsWith、ENDSWITH)與字符串屬性一起使用

          • CONTAINS (symbols: contains, CONTAINS) 使用 String 屬性

          高級搜索

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

          領(lǐng)域特定搜索 (DSL) 是一種結(jié)構(gòu)簡單的語言,該語法模擬了關(guān)系數(shù)據(jù)庫流行的結(jié)構(gòu)化查詢語言 (SQL)。

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

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

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

          Classification

          • 分類傳播使與實體相關(guān)聯(lián)的分類能夠自動與該實體的其他相關(guān)實體相關(guān)聯(lián)。這在處理數(shù)據(jù)集從其他數(shù)據(jù)集派生數(shù)據(jù)的場景時非常有用 。

          為實體添加分類

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

          更新與實體關(guān)聯(lián)的分類

          與實體關(guān)聯(lián)的分類的任何更新也將在分類傳播到的所有實體中看到。

          簡單的說,此功能可以監(jiān)控數(shù)據(jù)到底流向了哪里。

          glossary

          詞匯表,也稱術(shù)語表為業(yè)務(wù)用戶提供適當(dāng)?shù)脑~匯表,它允許術(shù)語(詞)相互關(guān)聯(lián)并分類,以便在不同的上下文中理解它們。然后可以將這些術(shù)語映射到數(shù)據(jù)庫、表、列等資產(chǎn)。這有助于抽象與存儲庫相關(guān)的技術(shù)術(shù)語,并允許用戶發(fā)現(xiàn)/使用他們更熟悉的詞匯表中的數(shù)據(jù)。

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

          當(dāng)切換開關(guān)在類別上時,面板將列出所有詞匯表以及類別層次結(jié)構(gòu)。這是此視圖下可能的交互的列表。

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

          通過術(shù)語表的功能,讓數(shù)據(jù)資產(chǎn)與業(yè)務(wù)系統(tǒng)建立了聯(lián)系。

          六、Hive數(shù)據(jù)血緣

          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


          hive.exec.post.hooks
          org.apache.atlas.hive.hook.HiveHook

          • 修改 hive-env.sh 的 Gateway 客戶端環(huán)境高級配置代碼段(安全閥)

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

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


          hive.exec.post.hooks
          org.apache.atlas.hive.hook.HiveHook


          hive.reloadable.aux.jars.path
          /usr/local/src/atlas/apache-atlas-2.1.0/hook/hive

          • 修改 HiveServer2 環(huán)境高級配置代碼段

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

          需要將配置好的Atlas包發(fā)往各個hive節(jié)點后重啟集群。

          導(dǎo)入Hive元數(shù)據(jù)

          • 執(zhí)行atlas腳本

          ./bin/import-hive.sh
          #輸入用戶名:admin;輸入密碼:admin

          登錄Atlas查看元數(shù)據(jù)信息。

          測試實時hive hook

          簡單執(zhí)行一個hera資源統(tǒng)計的hive腳本

          use sucx_test
          ;

          -- 昨日升級設(shè)備數(shù)
          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
          ;

          執(zhí)行后查看 qs_tzl_ProductTag_result 的表級血緣為

          pid 的字段血緣為

          七、Spark數(shù)據(jù)血緣

          打包spark-atlas-connector

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

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

          一、git clone 后本地進(jìn)行打包

          mvn package -DskipTests

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

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

          測試spark hook

          首先進(jìn)入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
          執(zhí)行 hera 的一個資源統(tǒng)計任務(wù)

          CREATE EXTERNAL TABLE IF NOT EXISTS sucx_hera.ads_hera_task_mem_top_10(
          `job_id` BIGINT COMMENT '任務(wù)ID',
          `user` STRING COMMENT '關(guān)注人',
          `applicationId` STRING COMMENT 'yarn執(zhí)行的app id',
          `memorySeconds` BIGINT COMMENT '內(nèi)存使用時間和',
          `startedTime` BIGINT COMMENT '開始時間',
          `finishedTime` BIGINT COMMENT '結(jié)束時間',
          `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

          執(zhí)行后,查看 ads_hera_task_mem_top_10 表級血緣

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

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

          八、Atlas二次開發(fā)

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

          REST API

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

          DiscoveryREST

          http://hostname:21000/api/atlas/v2/search/basic?classification=class1
          參數(shù)支持: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

          # 不是很懂(返回的數(shù)據(jù)和上面那個 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 的實體的審計數(shù)據(jù)
          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

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

          # 查詢 entity 與 classification 是否有關(guān)?
          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

          本地開發(fā)環(huán)境

          啟動HBase和solr

          由于在Atlas需要使用到HBase以及slor。方便調(diào)試可以解壓之前編譯好內(nèi)置HBase和sole的tar。

          文件補充

          創(chuàng)建文件夾將,atlas所需要的文件拷貝過去。

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

          源碼啟動

          將clone下來的源碼導(dǎo)入到IDEA中。配置啟動參數(shù):

          -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

          瀏覽 95
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本视频3号级 | 青春草视频在线 | 国产性爱在线 | 一个色导航五月天伊人网站 | 色黄视频在线播放 |