Hadoop的元數(shù)據(jù)治理--Apache Atlas
Apache Atlas是Hadoop社區(qū)為解決Hadoop生態(tài)系統(tǒng)的元數(shù)據(jù)治理問題而產(chǎn)生的開源項目蝗碎,它為Hadoop集群提供了包括數(shù)據(jù)分類督笆、集中策略引擎泊业、數(shù)據(jù)血緣、安全和生命周期管理在內的元數(shù)據(jù)治理核心能力厚棵。
Apache Atlas目前是Apache下的孵化項目超凳,最新版本為Apache Atlas 0.8:
本文將分以下部分為大家介紹Atlas的架構和核心功能:
- 概述
- 核心特性
- 架構與組件
- 部署與配置
- 類型系統(tǒng)
- 元數(shù)據(jù)搜索與血緣
- 基于標簽的安全策略
- 集成Apache Falcon
概述
面對海量且持續(xù)增加的各式各樣的數(shù)據(jù)對象侨糟,你是否有信心知道哪些數(shù)據(jù)從哪里來以及它如何隨時間而變化?采用Hadoop必須考慮數(shù)據(jù)管理的實際情況回季,元數(shù)據(jù)與數(shù)據(jù)治理成為企業(yè)級數(shù)據(jù)湖的重要部分家制。
為尋求數(shù)據(jù)治理的開源解決方案正林,Hortonworks 公司聯(lián)合其他廠商與用戶于2015年發(fā)起數(shù)據(jù)治理倡議,包括數(shù)據(jù)分類颤殴、集中策略引擎觅廓、數(shù)據(jù)血緣、安全和生命周期管理等方面涵但。Apache Atlas 項目就是這個倡議的結果杈绸,社區(qū)伙伴持續(xù)的為該項目提供新的功能和特性。該項目用于管理共享元數(shù)據(jù)矮瘟、數(shù)據(jù)分級瞳脓、審計、安全性以及數(shù)據(jù)保護等方面澈侠,努力與Apache Ranger整合劫侧,用于數(shù)據(jù)權限控制策略。
Apache Atlas是hadoop的數(shù)據(jù)治理和元數(shù)據(jù)框架埋涧,它提供了一個可伸縮和可擴展的核心基礎數(shù)據(jù)治理服務集板辽,使得 企業(yè)可以有效的和高效的滿足Hadoop中的合規(guī)性要求奇瘦,并允許與整個企業(yè)的數(shù)據(jù)生態(tài)系統(tǒng)集成:
核心特性
Apache Atlas為Hadoop的元數(shù)據(jù)治理提供了以下特性:
- 數(shù)據(jù)分類
? - 為元數(shù)據(jù)導入或定義業(yè)務導向的分類注釋
? - 定義棘催,注釋,以及自動捕獲數(shù)據(jù)集和底層元素之間的關系
? - 導出元數(shù)據(jù)到第三方系統(tǒng)
- 集中審計
? - 捕獲與所有應用耳标,過程以及與數(shù)據(jù)交互的安全訪問信息
? - 捕獲執(zhí)行醇坝,步驟,活動等操作的信息
- 搜索與血緣
? - 預定義的導航路徑用來探索數(shù)據(jù)分類以及審計信息
? - 基于文本的搜索特性來快速和準確的定位相關聯(lián)的數(shù)據(jù)和審計事件
? - 對數(shù)據(jù)集血緣關系的可視化瀏覽使用戶可以下鉆到操作次坡,安全以及數(shù)據(jù)起源相關的信息
- 安全與策略引擎
? - 基于數(shù)據(jù)分類模式呼猪,屬性以及角色的運行時合理合規(guī)策略
? - 基于分類-預測的高級策略定義以防止數(shù)據(jù)推導
? - 基于cell的屬性和值的行/列級別的masking
Apache Atlas的架構如下圖所示:
Atlas的組件可以分為以下幾個部分:
- Core
此類別包含實現(xiàn) Atlas 功能核心的組件,包括:
? - Type System: Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對象定義一個模型砸琅。該模型由稱為 "類型" 的定義組成宋距。"類型" 的 實例被稱為 "實體" 表示被管理的實際元數(shù)據(jù)對象。類型系統(tǒng)是一個組件症脂,允許用戶定義和管理類型和實體谚赎。由 Atlas 管理的所有元數(shù)據(jù)對象(例如Hive表)都使用類型進行建模,并表示為實體诱篷。要在 Atlas 中存儲新類型的元數(shù)據(jù)壶唤,需要了解類型系統(tǒng)組件的概念。
? - Ingest/Export:Ingest 組件允許將元數(shù)據(jù)添加到 Atlas棕所。類似地闸盔,Export 組件暴露由 Atlas 檢測到的元數(shù)據(jù)更改,以作為事件引發(fā)琳省,消費者可以使用這些更改事件來實時響應元數(shù)據(jù)更改迎吵。
? - Graph Engine:在內部躲撰,Atlas 通過使用圖形模型管理元數(shù)據(jù)對象。以實現(xiàn)元數(shù)據(jù)對象之間的巨大靈活性和豐富的關系击费。圖形引擎是負責在類型系統(tǒng)的類型和實體之間進行轉換的組件茴肥,以及基礎圖形模型。除了管理圖形對象之外荡灾,圖形引擎還為元數(shù)據(jù)對象創(chuàng)建適當?shù)乃饕亢员阌行У厮阉魉鼈儭?/p>
? - Titan:目前,Atlas 使用 Titan 圖數(shù)據(jù)庫來存儲元數(shù)據(jù)對象批幌。 Titan 使用兩個存儲:默認情況下元數(shù)據(jù)存儲配置為 HBase 础锐,索引存儲配置為 Solr。也可以通過構建相應的配置文件使用BerkeleyDB存儲元數(shù)據(jù)存儲 和使用ElasticSearch存儲 Index荧缘。元數(shù)據(jù)存儲用于存儲元數(shù)據(jù)對象本身皆警,索引存儲用于存儲元數(shù)據(jù)屬性的索引,其允許高效搜索截粗。
- Integration
用戶可以使用兩種方法管理 Atlas 中的元數(shù)據(jù):
? - API: Atlas 的所有功能都可以通過 REST API 提供給最終用戶信姓,允許創(chuàng)建摹蘑,更新和刪除類型和實體蜂奸。它也是查詢和發(fā)現(xiàn)通過 Atlas 管理的類型和實體的主要方法。
? - Messaging:除了 API 之外吞鸭,用戶還可以選擇使用基于 Kafka 的消息接口與 Atlas 集成珊蟀。這對于將元數(shù)據(jù)對象傳輸?shù)?Atlas 以及從 Atlas 使用可以構建應用程序的元數(shù)據(jù)更改事件都非常有用菊值。如果希望使用與 Atlas 更松散耦合的集成,這可以允許更好的可擴展性育灸,可靠性等腻窒,消息傳遞接口是特別有用的。Atlas 使用 Apache Kafka 作為通知服務器用于鉤子和元數(shù)據(jù)通知事件的下游消費者之間的通信磅崭。事件由鉤子(hook)和 Atlas 寫到不同的 Kafka 主題:
? ? - ATLAS_HOOK: 來自 各個組件的Hook 的元數(shù)據(jù)通知事件通過寫入到名為 ATLAS_HOOK 的 Kafka topic 發(fā)送到 Atlas
? ? - ATLAS_ENTITIES:從 Atlas 到其他集成組件(如Ranger)的事件寫入到名為 ATLAS_ENTITIES 的 Kafka topic
- Metadata source
Atlas 支持與許多元數(shù)據(jù)源的集成儿子,將來還會添加更多集成。目前砸喻,Atlas 支持從以下數(shù)據(jù)源獲取和管理元數(shù)據(jù):
? - Hive:通過hive bridge柔逼, atlas可以接入Hive的元數(shù)據(jù),包括hive_db/hive_table/hive_column/hive_process
? - Sqoop:通過sqoop bridge恩够,atlas可以接入關系型數(shù)據(jù)庫的元數(shù)據(jù)卒落,包括sqoop_operation_type/ sqoop_dbstore_usage/sqoop_process/sqoop_dbdatastore
? - Falcon:通過falcon bridge,atlas可以接入Falcon的元數(shù)據(jù)蜂桶,包括falcon_cluster/falcon_feed/falcon_feed_creation/falcon_feed_replication/ falcon_process
? - Storm:通過storm bridge儡毕,atlas可以接入流式處理的元數(shù)據(jù),包括storm_topology/storm_spout/storm_bolt
? Atlas集成大數(shù)據(jù)組件的元數(shù)據(jù)源需要實現(xiàn)以下兩點:
? - 首先,需要基于atlas的類型系統(tǒng)定義能夠表達大數(shù)據(jù)組件元數(shù)據(jù)對象的元數(shù)據(jù)模型(例如Hive的元數(shù)據(jù)模型實現(xiàn)在org.apache.atlas.hive.model.HiveDataModelGenerator)腰湾;
? - 然后雷恃,需要提供hook組件去從大數(shù)據(jù)組件的元數(shù)據(jù)源中提取元數(shù)據(jù)對象,實時偵聽元數(shù)據(jù)的變更并反饋給atlas费坊;
- Applications
? - Atlas Admin UI: 該組件是一個基于 Web 的應用程序倒槐,允許數(shù)據(jù)管理員和科學家發(fā)現(xiàn)和注釋元數(shù)據(jù)。Admin UI提供了搜索界面和 類SQL的查詢語言附井,可以用來查詢由 Atlas 管理的元數(shù)據(jù)類型和對象讨越。Admin UI 使用 Atlas 的 REST API 來構建其功能。
? - Tag Based Policies: Apache Ranger 是針對 Hadoop 生態(tài)系統(tǒng)的高級安全管理解決方案永毅,與各種 Hadoop 組件具有廣泛的集成把跨。通過與 Atlas 集成,Ranger 允許安全管理員定義元數(shù)據(jù)驅動的安全策略沼死,以實現(xiàn)有效的治理着逐。 Ranger 是由 Atlas 通知的元數(shù)據(jù)更改事件的消費者。
? - Business Taxonomy:從元數(shù)據(jù)源獲取到 Atlas 的元數(shù)據(jù)對象主要是一種技術形式的元數(shù)據(jù)意蛀。為了增強可發(fā)現(xiàn)性和治理能力耸别,Atlas 提供了一個業(yè)務分類界面,允許用戶首先定義一組代表其業(yè)務域的業(yè)務術語县钥,并將其與 Atlas 管理的元數(shù)據(jù)實體相關聯(lián)秀姐。業(yè)務分類法是一種 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存儲元數(shù)據(jù)
- Ambari infra/Solr:Titan默認使用Solr存儲元數(shù)據(jù)索引
- Kafka:Apache Atlas使用Kafka作為消息隊列细移,實現(xiàn)hook和元數(shù)據(jù)通知事件的消費者之間的通信
部署完Apache Atlas之后,可以通過腳本導入Atlas自帶的示例數(shù)據(jù):
Apache Atlas支持配置多個Atlas Web服務實例來實現(xiàn)自動故障轉移(failover)熊锭,多個服務實例之間采取主動/被動模式弧轧。其中一個實例將被自動選擇為 “活動” 實例來為用戶請求提供服務。其他人將自動被視為 “被動”碗殷。如果 “活動” 實例由于故意停止或由于意外故障而變得不可用精绎,則其他實例之一將自動選為 “活動” 實例,并開始為用戶請求提供服務锌妻。
“活動” 實例是能夠正確響應用戶請求的唯一實例代乃,其可以創(chuàng)建,刪除,修改或響應元數(shù)據(jù)對象上的查詢搁吓。 “被動” 實例將接受用戶請求原茅,但會使用 HTTP 重定向將其重定向到當前已知的 “活動” 實例。
多個Apache Atlas Web服務實例之間使用Zookeeper進行協(xié)調堕仔。
當配置為高可用性模式時擂橘,具有以下優(yōu)勢:
- 在維護間隔期間不間斷服務:如果需要停用 Atlas Web 服務的活動實例進行維護,則另一個實例將自動變?yōu)榛顒訝顟B(tài)并可以為請求提供服務摩骨。
- 在意外故障事件中的不間斷服務:如果由于軟件或硬件錯誤通贞,Atlas Web 服務的活動實例失敗,另一個實例將自動變?yōu)榛顒訝顟B(tài)并可以為請求提供服務恼五。
Apache Atlas的高可用性目前只支持手動配置滑频,Ambari尚不支持添加新的Atlas Metadata Server。
類型系統(tǒng)
Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對象定義一個模型唤冈。該模型由稱為 “類型” (type)的定義組成峡迷。被稱為 “實體” (entities)的 “類型” 實例表示被管理的實際元數(shù)據(jù)對象。由 Atlas 管理的所有元數(shù)據(jù)對象(例如Hive表)都使用類型進行建模你虹,并表示為實體绘搞。
- Type:Atlas中的 “類型” 定義了如何存儲和訪問特定類型的元數(shù)據(jù)對象。類型表示了所定義元數(shù)據(jù)對象的一個或多個屬性集合傅物。具有開發(fā)背景的用戶可以將 “類型” 理解成面向對象的編程語言的 “類” 定義的或關系數(shù)據(jù)庫的 “表模式”夯辖。類型具有元類型,元類型表示 Atlas 中此模型的類型:
? - 基本元類型: Int董饰,String蒿褂,Boolean等
? - 枚舉元類型
? - 集合元類型:例如Array,Map
? - Class卒暂,Struct啄栓,Trait
- Entities:Atlas中的 “實體” 是類 “類型” 的特定值或實例,因此表示真實世界中的特定元數(shù)據(jù)對象也祠。 回顧我們的面向對象編程語言的類比昙楚,“實例” 是某個 “類” 的 “對象”。
- Attributes:Atlas 中的屬性還有一些屬性诈嘿,其定義了與類型系統(tǒng)相關的更多概念堪旧,包括:
? - isComposite - 是否復合
? - isIndexable - 是否索引
? - isUnique - 是否唯一
? - multiplicity - 指示此屬性是(必需的/可選的/還是可以是多值)的
Atlas 提供了一些預定義的系統(tǒng)類型:
- Referenceable:此類型表示可使用名為 qualifiedName 的唯一屬性搜索的所有實體
- Asset:此類型包含名稱,說明和所有者等屬性
- Infrastructure:此類型擴展了Referenceable和Asset 奖亚,通炒久危可用于基礎設施元數(shù)據(jù)對象(如群集,主機等)的常用超類型
- DataSet:此類型擴展了Referenceable和Asset 昔字。在概念上爆袍,它可以用于表示存儲數(shù)據(jù)的類型。在 Atlas 中,hive表螃宙,Sqoop RDBMS表等都是從 DataSet 擴展的類型蛮瞄。擴展 DataSet 的類型可以期望具有模式,它們將具有定義該數(shù)據(jù)集的屬性的屬性谆扎。例如挂捅, hive_table 中的 columns 屬性。另外堂湖,擴展 DataSet 的實體類型的實體參與數(shù)據(jù)轉換闲先,這種轉換可以由 Atlas 通過 lineage(或 provenance)生成圖形。
- Process:此類型擴展了Referenceable和Asset 无蜂。在概念上伺糠,它可以用于表示任何數(shù)據(jù)變換操作。例如斥季,將原始數(shù)據(jù)的 hive 表轉換為存儲某個聚合的另一個 hive 表的 ETL 過程可以是擴展過程類型的特定類型训桶。流程類型有兩個特定的屬性,輸入和輸出酣倾。
元數(shù)據(jù)搜索與血緣
Atlas 支持使用以下 2 種方式搜索元數(shù)據(jù):
- Search using DSL
- Full-text search
? - Atlas也支持lucene風格的全文檢索
Apache atlas的其中一個核心特性就是可以追溯數(shù)據(jù)湖(Data Lake)中數(shù)據(jù)的血緣關系并以可視化的方式呈現(xiàn)舵揭,使用戶能夠快速了解數(shù)據(jù)的生命周期,并能夠知曉自己的數(shù)據(jù)時從那里來以及和數(shù)據(jù)湖中的那些數(shù)據(jù)具有關聯(lián)關系躁锡。
參考下面的例子午绳,創(chuàng)建兩張hive表,然后通過表的join創(chuàng)建一張新表:
- 創(chuàng)建一張hive表存儲以數(shù)組形式存儲tweet文本中的單詞
? CREATE TABLE words_array AS SELECT tweet_id AS id, split(text,' ') AS words FROM tweets;
- 創(chuàng)建一張hive表將文本中的數(shù)組切分成單獨的單詞
? CREATE TABLE tweet_word AS SELECT id AS id, word FROM words_array LATERAL VIEW explode(words) w as word;
- 通過對上述表的Join操作創(chuàng)建新的表
? 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)的動態(tài)訪問權限控制,通過控制與資源關聯(lián)的標簽而非資源本身可以為權限控制模型提供諸多便利:
- 將資源分類從權限控制中分離出來杠输,不同Hadoop組件的資源(比如HDFS目錄赎败,Hive表,HBase表)中的同一類數(shù)據(jù)(比如社保賬號/信用卡帳號)可以被打上同一個標簽抬伺,以統(tǒng)一的權限來控制訪問
- 如果Hadoop資源被打上標簽螟够,那么與標簽相關的權限將被自動賦予該資源
- 單獨的訪問控制策略可以應用于不同的Hadoop組件的資源,而不再需要為每一個組件的資源都創(chuàng)建單獨的策略
Ranger 0.6版本引入了一個新的服務(ranger-tagsync)用來同步Atlas的tag峡钓,ranger-tagsync通過監(jiān)聽Kafka topic(ATLAS_ENTITIES)的消息變更來接受來自Atlas的tag(以及Taxonomy Terms)詳細信息;當Atlas的tag(以及Taxonomy Terms)在atlas里被增加若河,修改或刪除時能岩,ranger-tagsync會接受來自Kafka的通知并更新Ranger的數(shù)據(jù)庫(ranger.x_tag*)。
通用Ranger Admin UI創(chuàng)建基于標簽的策略需要如下步驟:
- 創(chuàng)建tag服務實例(tag服務實例可以創(chuàng)建多個以歸類不同集群的基于標簽策略)
? - 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”頁面創(chuàng)建基于策略的訪問控制策略拉鹃,例如:
集成Apache Falcon
? - Atlas可以提供對Falcon元數(shù)據(jù)(cluster/feed/process)的存儲和搜索
? ? - Atlas的Falcon Hook監(jiān)聽Falcon的元數(shù)據(jù)變更(比如falcon feed/process的創(chuàng)建,更改,刪除)并將這些元數(shù)據(jù)變更詳細信息寫入Kafka的topic中膏燕,Atlas metadata server從Kafka接收到Falcon的元數(shù)然后作為entity更新到Titan數(shù)據(jù)庫中
? ? - 用戶通過Atlas Admin UI可以通過DSL或全文方式去搜索Falcon的元數(shù)據(jù)
- Atlas可以對Falcon元數(shù)據(jù)進行分類(tag/taxonomy)
- Atlas可以展示Falcon元數(shù)據(jù)的血緣關系
總結
Apache Atlas為Hadoop集群提供了包括數(shù)據(jù)分類钥屈、集中策略引擎、數(shù)據(jù)血緣坝辫、安全和生命周期管理在內的元數(shù)據(jù)治理核心能力篷就,其與Apache Falcon,Apache Ranger相互整合可以形成完整的數(shù)據(jù)治理解決方案近忙。但是Atlas目前還是Apache孵化項目竭业,尚未成熟,有待發(fā)展及舍。
Atlas目前還存在以下一些需要改進之處:
- 缺乏對元數(shù)據(jù)的全局視圖未辆,對元數(shù)據(jù)的血緣追溯只能夠展示具體某張表或某個SQL的生命周期(其前提是用戶必須對Hadoop的元數(shù)據(jù)結構十分清楚,才能夠通過Atlas的查詢語句去定位自己需要了解的表)
- 0.8以前的版本锯玛,對元數(shù)據(jù)只能進行只讀操作咐柜,例如只能展示Hive的表但是不能創(chuàng)建新表
- 與Hadoop各組件的集成尚待完善,例如Atlas對Hive的元數(shù)據(jù)變更操作的捕獲只支持hive CLI攘残,不支持beeline/JDBC
Reference
- http://atlas.apache.org/
- https://zh.hortonworks.com/apache/atlas/