Hadoop的元數據治理--Apache Atlas

Apache Atlas是Hadoop社區爲解決Hadoop生態系統的元數據治理問題而產生的開源項目,它爲Hadoop集羣提供了包括數據分類、集中策略引擎、數據血緣、安全和生命週期管理在內的元數據治理核心能力。

Apache Atlas目前是Apache下的孵化項目,最新版本爲Apache Atlas 0.8:
在這裏插入圖片描述

概述

面對海量且持續增加的各式各樣的數據對象,你是否有信心知道哪些數據從哪裏來以及它如何隨時間而變化?採用Hadoop必須考慮數據管理的實際情況,元數據與數據治理成爲企業級數據湖的重要部分。

爲尋求數據治理的開源解決方案,Hortonworks 公司聯合其他廠商與用戶於2015年發起數據治理倡議,包括數據分類、集中策略引擎、數據血緣、安全和生命週期管理等方面。Apache Atlas 項目就是這個倡議的結果,社區夥伴持續的爲該項目提供新的功能和特性。該項目用於管理共享元數據、數據分級、審計、安全性以及數據保護等方面,努力與Apache Ranger整合,用於數據權限控制策略。

Apache Atlas是hadoop的數據治理和元數據框架,它提供了一個可伸縮和可擴展的核心基礎數據治理服務集,使得 企業可以有效的和高效的滿足Hadoop中的合規性要求,並允許與整個企業的數據生態系統集成:
在這裏插入圖片描述

核心特性

Apache Atlas爲Hadoop的元數據治理提供了以下特性:

  • 數據分類

    • 爲元數據導入或定義業務導向的分類註釋

    • 定義,註釋,以及自動捕獲數據集和底層元素之間的關係

    • 導出元數據到第三方系統

  • 集中審計

    • 捕獲與所有應用,過程以及與數據交互的安全訪問信息

    • 捕獲執行,步驟,活動等操作的信息

  • 搜索與血緣

    • 預定義的導航路徑用來探索數據分類以及審計信息

    • 基於文本的搜索特性來快速和準確的定位相關聯的數據和審計事件

    • 對數據集血緣關係的可視化瀏覽使用戶可以下鑽到操作,安全以及數據起源相關的信息

  • 安全與策略引擎

    • 基於數據分類模式,屬性以及角色的運行時合理合規策略

    • 基於分類-預測的高級策略定義以防止數據推導

    • 基於cell的屬性和值的行/列級別的masking

Apache Atlas的架構如下圖所示:
在這裏插入圖片描述

Atlas的組件可以分爲以下幾個部分:

  • Core

此類別包含實現 Atlas 功能核心的組件,包括:

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

  • Ingest/Export:Ingest 組件允許將元數據添加到 Atlas。類似地,Export 組件暴露由 Atlas 檢測到的元數據更改,以作爲事件引發,消費者可以使用這些更改事件來實時響應元數據更改。

  • Graph Engine:在內部,Atlas 通過使用圖形模型管理元數據對象。以實現元數據對象之間的巨大靈活性和豐富的關係。圖形引擎是負責在類型系統的類型和實體之間進行轉換的組件,以及基礎圖形模型。除了管理圖形對象之外,圖形引擎還爲元數據對象創建適當的索引,以便有效地搜索它們。

  • Titan:目前,Atlas 使用 Titan 圖數據庫來存儲元數據對象。 Titan 使用兩個存儲:默認情況下元數據存儲配置爲 HBase ,索引存儲配置爲 Solr。也可以通過構建相應的配置文件使用BerkeleyDB存儲元數據存儲 和使用ElasticSearch存儲 Index。元數據存儲用於存儲元數據對象本身,索引存儲用於存儲元數據屬性的索引,其允許高效搜索。

  • Integration

用戶可以使用兩種方法管理 Atlas 中的元數據:

  • API: Atlas 的所有功能都可以通過 REST API 提供給最終用戶,允許創建,更新和刪除類型和實體。它也是查詢和發現通過 Atlas 管理的類型和實體的主要方法。

  • Messaging:除了 API 之外,用戶還可以選擇使用基於 Kafka 的消息接口與 Atlas 集成。這對於將元數據對象傳輸到 Atlas 以及從 Atlas 使用可以構建應用程序的元數據更改事件都非常有用。如果希望使用與 Atlas 更鬆散耦合的集成,這可以允許更好的可擴展性,可靠性等,消息傳遞接口是特別有用的。Atlas 使用 Apache Kafka 作爲通知服務器用於鉤子和元數據通知事件的下游消費者之間的通信。事件由鉤子(hook)和 Atlas 寫到不同的 Kafka 主題:

    • ATLAS_HOOK: 來自 各個組件的Hook 的元數據通知事件通過寫入到名爲 ATLAS_HOOK 的 Kafka topic 發送到 Atlas

    • ATLAS_ENTITIES:從 Atlas 到其他集成組件(如Ranger)的事件寫入到名爲 ATLAS_ENTITIES 的 Kafka topic

  • Metadata source

Atlas 支持與許多元數據源的集成,將來還會添加更多集成。目前,Atlas 支持從以下數據源獲取和管理元數據:

  • Hive:通過hive bridge, atlas可以接入Hive的元數據,包括hive_db/hive_table/hive_column/hive_process

  • Sqoop:通過sqoop bridge,atlas可以接入關係型數據庫的元數據,包括sqoop_operation_type/ sqoop_dbstore_usage/sqoop_process/sqoop_dbdatastore

  • Falcon:通過falcon bridge,atlas可以接入Falcon的元數據,包括falcon_cluster/falcon_feed/falcon_feed_creation/falcon_feed_replication/ falcon_process

  • Storm:通過storm bridge,atlas可以接入流式處理的元數據,包括storm_topology/storm_spout/storm_bolt

Atlas集成大數據組件的元數據源需要實現以下兩點:

  • 首先,需要基於atlas的類型系統定義能夠表達大數據組件元數據對象的元數據模型(例如Hive的元數據模型實現在org.apache.atlas.hive.model.HiveDataModelGenerator);

  • 然後,需要提供hook組件去從大數據組件的元數據源中提取元數據對象,實時偵聽元數據的變更並反饋給atlas;

  • Applications

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

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

    • Business Taxonomy:從元數據源獲取到 Atlas 的元數據對象主要是一種技術形式的元數據。爲了增強可發現性和治理能力,Atlas 提供了一個業務分類界面,允許用戶首先定義一組代表其業務域的業務術語,並將其與 Atlas 管理的元數據實體相關聯。業務分類法是一種 Web 應用程序,目前是 Atlas Admin UI 的一部分,並且使用 REST API 與 Atlas 集成。

      • 在HDP2.5中,Business Taxonomy是提供了Technical Preview版本,需要在Atlas > Configs > Advanced > Custom application-properties中添加atlas.feature.taxonomy.enable=true並重啓atlas服務來開啓

部署與配置

在HDP集羣中,可以通過Ambari快速部署Apache atlas服務:
在這裏插入圖片描述

Ambari會部署啓動Atlas metadata server和Atlas Metadata Client,並將自動配置hive/sqoop/falcon/storm等服務的atlas hook(以Hive爲例):
在這裏插入圖片描述

Apache Atlas需要依賴以下HDP組件:

  • HBase:Titan默認使用HBase存儲元數據

  • Ambari infra/Solr:Titan默認使用Solr存儲元數據索引

  • Kafka:Apache Atlas使用Kafka作爲消息隊列,實現hook和元數據通知事件的消費者之間的通信

部署完Apache Atlas之後,可以通過腳本導入Atlas自帶的示例數據:
在這裏插入圖片描述

Apache Atlas支持配置多個Atlas Web服務實例來實現自動故障轉移(failover),多個服務實例之間採取主動/被動模式。其中一個實例將被自動選擇爲 “活動” 實例來爲用戶請求提供服務。其他人將自動被視爲 “被動”。如果 “活動” 實例由於故意停止或由於意外故障而變得不可用,則其他實例之一將自動選爲 “活動” 實例,並開始爲用戶請求提供服務。

“活動” 實例是能夠正確響應用戶請求的唯一實例,其可以創建,刪除,修改或響應元數據對象上的查詢。 “被動” 實例將接受用戶請求,但會使用 HTTP 重定向將其重定向到當前已知的 “活動” 實例。

多個Apache Atlas Web服務實例之間使用Zookeeper進行協調。

當配置爲高可用性模式時,具有以下優勢:

  • 在維護間隔期間不間斷服務:如果需要停用 Atlas Web 服務的活動實例進行維護,則另一個實例將自動變爲活動狀態並可以爲請求提供服務。

  • 在意外故障事件中的不間斷服務:如果由於軟件或硬件錯誤,Atlas Web 服務的活動實例失敗,另一個實例將自動變爲活動狀態並可以爲請求提供服務。

Apache Atlas的高可用性目前只支持手動配置,Ambari尚不支持添加新的Atlas Metadata Server。

類型系統

Atlas 允許用戶爲他們想要管理的元數據對象定義一個模型。該模型由稱爲 “類型” (type)的定義組成。被稱爲 “實體” (entities)的 “類型” 實例表示被管理的實際元數據對象。由 Atlas 管理的所有元數據對象(例如Hive表)都使用類型進行建模,並表示爲實體。

  • Type:Atlas中的 “類型” 定義瞭如何存儲和訪問特定類型的元數據對象。類型表示了所定義元數據對象的一個或多個屬性集合。具有開發背景的用戶可以將 “類型” 理解成面向對象的編程語言的 “類” 定義的或關係數據庫的 “表模式”。類型具有元類型,元類型表示 Atlas 中此模型的類型:

    • 基本元類型: Int,String,Boolean等

    • 枚舉元類型

    • 集合元類型:例如Array,Map

    • Class,Struct,Trait

  • Entities:Atlas中的 “實體” 是類 “類型” 的特定值或實例,因此表示真實世界中的特定元數據對象。 回顧我們的面向對象編程語言的類比,“實例” 是某個 “類” 的 “對象”。

  • Attributes:Atlas 中的屬性還有一些屬性,其定義了與類型系統相關的更多概念,包括:

    • isComposite - 是否複合

    • isIndexable - 是否索引

    • isUnique - 是否唯一

    • multiplicity - 指示此屬性是(必需的/可選的/還是可以是多值)的

Atlas 提供了一些預定義的系統類型:

  • Referenceable:此類型表示可使用名爲 qualifiedName 的唯一屬性搜索的所有實體

  • Asset:此類型包含名稱,說明和所有者等屬性

  • Infrastructure:此類型擴展了Referenceable和Asset ,通常可用於基礎設施元數據對象(如羣集,主機等)的常用超類型

  • DataSet:此類型擴展了Referenceable和Asset 。在概念上,它可以用於表示存儲數據的類型。在 Atlas 中,hive表,Sqoop RDBMS表等都是從 DataSet 擴展的類型。擴展 DataSet 的類型可以期望具有模式,它們將具有定義該數據集的屬性的屬性。例如, hive_table 中的 columns 屬性。另外,擴展 DataSet 的實體類型的實體參與數據轉換,這種轉換可以由 Atlas 通過 lineage(或 provenance)生成圖形。

  • Process:此類型擴展了Referenceable和Asset 。在概念上,它可以用於表示任何數據變換操作。例如,將原始數據的 hive 錶轉換爲存儲某個聚合的另一個 hive 表的 ETL 過程可以是擴展過程類型的特定類型。流程類型有兩個特定的屬性,輸入和輸出。

元數據搜索與血緣

Atlas 支持使用以下 2 種方式搜索元數據:

  • Search using DSL

在這裏插入圖片描述

  • Full-text search

    • Atlas也支持lucene風格的全文檢索

Apache atlas的其中一個核心特性就是可以追溯數據湖(Data Lake)中數據的血緣關係並以可視化的方式呈現,使用戶能夠快速瞭解數據的生命週期,並能夠知曉自己的數據時從那裏來以及和數據湖中的那些數據具有關聯關係。

參考下面的例子,創建兩張hive表,然後通過表的join創建一張新表:

  • 創建一張hive表存儲以數組形式存儲tweet文本中的單詞

    CREATE TABLE words_array AS SELECT tweet_id AS id, split(text,’ ') AS words FROM tweets;

  • 創建一張hive表將文本中的數組切分成單獨的單詞

    CREATE TABLE tweet_word AS SELECT id AS id, word FROM words_array LATERAL VIEW explode(words) w as word;

  • 通過對上述表的Join操作創建新的表

    CREATE TABLE word_join AS SELECT tweet_word.id, tweet_word.word, sentiment_dictionary.rating FROM tweet_word LEFT OUTER JOIN sentiment_dictionary ON (tweet_word.word=sentiment_dictionary.word);

在Atlas中,上述操作生成的word_join表的血緣關係圖如下所示:
在這裏插入圖片描述

基於標籤的安全策略

Atlas通過與Ranger集成,爲Hadoop提供了基於標籤(Tag)的動態訪問權限控制,通過控制與資源關聯的標籤而非資源本身可以爲權限控制模型提供諸多便利:

  • 將資源分類從權限控制中分離出來,不同Hadoop組件的資源(比如HDFS目錄,Hive表,HBase表)中的同一類數據(比如社保賬號/信用卡帳號)可以被打上同一個標籤,以統一的權限來控制訪問

  • 如果Hadoop資源被打上標籤,那麼與標籤相關的權限將被自動賦予該資源

  • 單獨的訪問控制策略可以應用於不同的Hadoop組件的資源,而不再需要爲每一個組件的資源都創建單獨的策略

Ranger 0.6版本引入了一個新的服務(ranger-tagsync)用來同步Atlas的tag,ranger-tagsync通過監聽Kafka topic(ATLAS_ENTITIES)的消息變更來接受來自Atlas的tag(以及Taxonomy Terms)詳細信息;當Atlas的tag(以及Taxonomy Terms)在atlas裏被增加,修改或刪除時,ranger-tagsync會接受來自Kafka的通知並更新Ranger的數據庫(ranger.x_tag*)。

在這裏插入圖片描述
通用Ranger Admin UI創建基於標籤的策略需要如下步驟:

  • 創建tag服務實例(tag服務實例可以創建多個以歸類不同集羣的基於標籤策略)

    • Login to Ranger Admin

    • Select menu: Access Manager è Tag Based Policies

    • Click the + icon next to TAG

    • In ‘Service Name’ field, enter tagdev and click ‘Add’
      在這裏插入圖片描述

  • Ranger的各個組件的服務實例需要被更新以實施指定的tag服務實例所提供的基於標籤的訪問控制策略,以hive爲例:

    • Login to Ranger Admin

    • Select menu: Access Manager è Resource Based Policies

    • Click on the edit icon next to your hive service instance, like hdp_hive,

    • In ‘Select Tag Service’ field, select tag-test and click ‘Save’
      在這裏插入圖片描述

  • 在”Tag Based Policies”頁面創建基於策略的訪問控制策略,例如:

在這裏插入圖片描述

集成Apache Falcon

  • Atlas可以提供對Falcon元數據(cluster/feed/process)的存儲和搜索

    • Atlas的Falcon Hook監聽Falcon的元數據變更(比如falcon feed/process的創建,更改,刪除)並將這些元數據變更詳細信息寫入Kafka的topic中,Atlas metadata server從Kafka接收到Falcon的元數然後作爲entity更新到Titan數據庫中

    • 用戶通過Atlas Admin UI可以通過DSL或全文方式去搜索Falcon的元數據
      在這裏插入圖片描述

  • Atlas可以對Falcon元數據進行分類(tag/taxonomy)
    在這裏插入圖片描述

  • Atlas可以展示Falcon元數據的血緣關係
    在這裏插入圖片描述

總結

Apache Atlas爲Hadoop集羣提供了包括數據分類、集中策略引擎、數據血緣、安全和生命週期管理在內的元數據治理核心能力,其與Apache Falcon,Apache Ranger相互整合可以形成完整的數據治理解決方案。但是Atlas目前還是Apache孵化項目,尚未成熟,有待發展。

Atlas目前還存在以下一些需要改進之處:

  • 缺乏對元數據的全局視圖,對元數據的血緣追溯只能夠展示具體某張表或某個SQL的生命週期(其前提是用戶必須對Hadoop的元數據結構十分清楚,才能夠通過Atlas的查詢語句去定位自己需要了解的表)

  • 0.8以前的版本,對元數據只能進行只讀操作,例如只能展示Hive的表但是不能創建新表

  • 與Hadoop各組件的集成尚待完善,例如Atlas對Hive的元數據變更操作的捕獲只支持hive CLI,不支持beeline/JDBC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章