使用 Apache Atlas 进行数据治理
本文由??網(wǎng)易云?發(fā)布。
?
作者:網(wǎng)易/劉勛(本篇文章僅限知乎內(nèi)部分享,如需轉(zhuǎn)載,請(qǐng)取得作者同意授權(quán)。)
面對(duì)海量且持續(xù)增加的各式各樣的數(shù)據(jù)對(duì)象,你是否有信心知道哪些數(shù)據(jù)從哪里來以及它如何隨時(shí)間而變化?采用Hadoop必須考慮數(shù)據(jù)管理的實(shí)際情況,元數(shù)據(jù)與數(shù)據(jù)治理成為企業(yè)級(jí)數(shù)據(jù)湖的重要部分。
為尋求數(shù)據(jù)治理的開源解決方案,Hortonworks 公司聯(lián)合其他廠商與用戶于2015年發(fā)起數(shù)據(jù)治理倡議,包括數(shù)據(jù)分類、集中策略引擎、數(shù)據(jù)血緣、安全和生命周期管理等方面。Apache Atlas 項(xiàng)目就是這個(gè)倡議的結(jié)果,社區(qū)伙伴持續(xù)的為該項(xiàng)目提供新的功能和特性。該項(xiàng)目用于管理共享元數(shù)據(jù)、數(shù)據(jù)分級(jí)、審計(jì)、安全性以及數(shù)據(jù)保護(hù)等方面,努力與Apache Ranger整合,用于數(shù)據(jù)權(quán)限控制策略。
Atlas 是一個(gè)可擴(kuò)展和可擴(kuò)展的核心基礎(chǔ)治理服務(wù)集 - 使企業(yè)能夠有效地和高效地滿足 Hadoop 中的合規(guī)性要求,并允許與整個(gè)企業(yè)數(shù)據(jù)生態(tài)系統(tǒng)的集成。
Atlas 的組件可以分為以下主要類別:
Core
此類別包含實(shí)現(xiàn) Atlas 功能核心的組件,包括:
Type System:Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對(duì)象定義一個(gè)模型。該模型由稱為 "類型" 的定義組成。"類型" 的 實(shí)例被稱為 "實(shí)體" 表示被管理的實(shí)際元數(shù)據(jù)對(duì)象。類型系統(tǒng)是一個(gè)組件,允許用戶定義和管理類型和實(shí)體。由 Atlas 管理的所有元數(shù)據(jù)對(duì)象(例如Hive表)都使用類型進(jìn)行建模,并表示為實(shí)體。要在 Atlas 中存儲(chǔ)新類型的元數(shù)據(jù),需要了解類型系統(tǒng)組件的概念。
需要注意的一個(gè)關(guān)鍵點(diǎn)是,Atlas 中建模的通用性質(zhì)允許數(shù)據(jù)管理員和集成者定義技術(shù)元數(shù)據(jù)和業(yè)務(wù)元數(shù)據(jù)。也可以使用 Atlas 的特征來定義兩者之間的豐富關(guān)系。
Ingest / Export:Ingest 組件允許將元數(shù)據(jù)添加到 Atlas。類似地,Export 組件暴露由 Atlas 檢測(cè)到的元數(shù)據(jù)更改,以作為事件引發(fā),消費(fèi)者可以使用這些更改事件來實(shí)時(shí)響應(yīng)元數(shù)據(jù)更改。
Graph Engine :在內(nèi)部,Atlas 通過使用圖形模型管理元數(shù)據(jù)對(duì)象。以實(shí)現(xiàn)元數(shù)據(jù)對(duì)象之間的巨大靈活性和豐富的關(guān)系。圖形引擎是負(fù)責(zé)在類型系統(tǒng)的類型和實(shí)體之間進(jìn)行轉(zhuǎn)換的組件,以及基礎(chǔ)圖形模型。除了管理圖形對(duì)象之外,圖形引擎還為元數(shù)據(jù)對(duì)象創(chuàng)建適當(dāng)?shù)乃饕?#xff0c;以便有效地搜索它們。
Titan:目前,Atlas 使用 Titan 圖數(shù)據(jù)庫(kù)來存儲(chǔ)元數(shù)據(jù)對(duì)象。 Titan 使用兩個(gè)存儲(chǔ):默認(rèn)情況下元數(shù)據(jù)存儲(chǔ)配置為 HBase ,索引存儲(chǔ)配置為 Solr。也可以通過構(gòu)建相應(yīng)的配置文件將元數(shù)據(jù)存儲(chǔ)作為 BerkeleyDB 和 Index 存儲(chǔ)使用為 ElasticSearch。元數(shù)據(jù)存儲(chǔ)用于存儲(chǔ)元數(shù)據(jù)對(duì)象本身,并且索引存儲(chǔ)用于存儲(chǔ)元數(shù)據(jù)屬性的索引,其允許高效搜索。
Integration
用戶可以使用兩種方法管理 Atlas 中的元數(shù)據(jù):
API:Atlas 的所有功能通過 REST API 提供給最終用戶,允許創(chuàng)建,更新和刪除類型和實(shí)體。它也是查詢和發(fā)現(xiàn)通過 Atlas 管理的類型和實(shí)體的主要方法。
Messaging:除了 API 之外,用戶還可以選擇使用基于 Kafka 的消息接口與 Atlas 集成。這對(duì)于將元數(shù)據(jù)對(duì)象傳輸?shù)?Atlas 以及從 Atlas 使用可以構(gòu)建應(yīng)用程序的元數(shù)據(jù)更改事件都非常有用。如果希望使用與 Atlas 更松散耦合的集成,這可以允許更好的可擴(kuò)展性,可靠性等,消息傳遞接口是特別有用的。Atlas 使用 Apache Kafka 作為通知服務(wù)器用于鉤子和元數(shù)據(jù)通知事件的下游消費(fèi)者之間的通信。事件由鉤子和 Atlas 寫到不同的 Kafka 主題。
元數(shù)據(jù)源
Atlas 支持與許多元數(shù)據(jù)源的集成。將來還會(huì)添加更多集成。目前,Atlas 支持從以下來源獲取和管理元數(shù)據(jù):
HiveSqoopFalconStorm
與其它元數(shù)據(jù)源集成意味著兩件事:有一些元數(shù)據(jù)模型,Atlas 定義本機(jī)來表示這些組件的對(duì)象。 Atlas 提供了從這些組件中通過實(shí)時(shí)或批處理模式獲取元數(shù)據(jù)對(duì)象的組件。
Apps
由 Atlas 管理的元數(shù)據(jù)各種應(yīng)用程序使用,滿足許多治理用例。
Atlas Admin UI:該組件是一個(gè)基于 Web 的應(yīng)用程序,允許數(shù)據(jù)管理員和科學(xué)家發(fā)現(xiàn)和注釋元數(shù)據(jù)。這里最重要的是搜索界面和 SQL 樣的查詢語言,可以用來查詢由 Atlas 管理的元數(shù)據(jù)類型和對(duì)象。管理 UI 使用 Atlas 的 REST API 來構(gòu)建其功能。
Tag Based Policies:Apache Ranger 是針對(duì) Hadoop 生態(tài)系統(tǒng)的高級(jí)安全管理解決方案,與各種 Hadoop 組件具有廣泛的集成。通過與 Atlas 集成,Ranger 允許安全管理員定義元數(shù)據(jù)驅(qū)動(dòng)的安全策略,以實(shí)現(xiàn)有效的治理。 Ranger 是由 Atlas 通知的元數(shù)據(jù)更改事件的消費(fèi)者。
Business Taxonomy:從元數(shù)據(jù)源獲取到 Atlas 的元數(shù)據(jù)對(duì)象主要是一種技術(shù)形式的元數(shù)據(jù)。為了增強(qiáng)可發(fā)現(xiàn)性和治理能力,Atlas 提供了一個(gè)業(yè)務(wù)分類界面,允許用戶首先定義一組代表其業(yè)務(wù)域的業(yè)務(wù)術(shù)語,并將其與 Atlas 管理的元數(shù)據(jù)實(shí)體相關(guān)聯(lián)。業(yè)務(wù)分類法是一種 Web 應(yīng)用程序,目前是 Atlas Admin UI 的一部分,并且使用 REST API 與 Atlas 集成。
Type System
Overview
Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對(duì)象定義一個(gè)模型。該模型由稱為 "類型" 的定義組成。被稱為 "實(shí)體" 的 "類型" 實(shí)例表示被管理的實(shí)際元數(shù)據(jù)對(duì)象。類型系統(tǒng)是一個(gè)組件,允許用戶定義和管理類型和實(shí)體。由 Atlas 管理的所有元數(shù)據(jù)對(duì)象(例如Hive表)都使用類型進(jìn)行建模,并表示為實(shí)體。要在Atlas中存儲(chǔ)新類型的元數(shù)據(jù),需要了解類型系統(tǒng)組件的概念。
Types
Atlas中的 "類型" 定義了如何存儲(chǔ)和訪問特定類型的元數(shù)據(jù)對(duì)象。類型表示了所定義元數(shù)據(jù)對(duì)象的一個(gè)或多個(gè)屬性集合。具有開發(fā)背景的用戶可以將 "類型" 理解成面向?qū)ο蟮木幊陶Z言的 "類" 定義的或關(guān)系數(shù)據(jù)庫(kù)的 "表模式"。
?
與 Atlas 本地定義的類型的示例是 Hive 表。 Hive 表用這些屬性定義:
Name: hive_tableMetaType: ClassSuperTypes: DataSetAttributes:name: String (name of the table)db: Database object of type hive_dbowner: StringcreateTime: DatelastAccessTime: Datecomment: Stringretention: intsd: Storage Description object of type hive_storagedescpartitionKeys: Array of objects of type hive_columnaliases: Array of stringscolumns: Array of objects of type hive_columnparameters: Map of String keys to String valuesviewOriginalText: StringviewExpandedText: StringtableType: Stringtemporary: Boolean?
從上面的例子可以注意到以下幾點(diǎn):
-
Atlas中的類型由 "name" 唯一標(biāo)識(shí),
-
類型具有元類型。元類型表示 Atlas 中此模型的類型。 Atlas 有以下幾種類型:
-
基本元類型: Int,String,Boolean等。
-
枚舉元類型
-
集合元類型:例如Array,Map
-
復(fù)合元類型:Class,Struct,Trait
-
-
類型可以從稱為 "supertype" 的父類型 "extend" - 憑借這一點(diǎn),它將包含在 "supertype" 中定義的屬性。這允許模型在一組相關(guān)類型等之間定義公共屬性。這再次類似于面向?qū)ο笳Z言如何定義類的超類的概念。 Atlas 中的類型也可以從多個(gè)超類型擴(kuò)展。
-
在該示例中,每個(gè) hive 表從預(yù)定義的超類型(稱為 "DataSet")擴(kuò)展。稍后將提供關(guān)于此預(yù)定義類型的更多細(xì)節(jié)。
-
-
具有 "Class","Struct" 或 "Trait" 的元類型的類型可以具有屬性集合。每個(gè)屬性都有一個(gè)名稱(例如 "name")和一些其他關(guān)聯(lián)的屬性。可以使用表達(dá)式 type_name.attribute_name 來引用屬性。還要注意,屬性本身是使用 Atlas 元類型定義的。
-
在這個(gè)例子中,hive_table.name 是一個(gè)字符串,hive_table.aliases 是一個(gè)字符串?dāng)?shù)組,hive_table.db 引用一個(gè)類型的實(shí)例稱為 hive_db 等等。
-
-
在屬性中鍵入引用(如hive_table.db)。使用這樣的屬性,我們可以在 Atlas 中定義的兩種類型之間的任意關(guān)系,從而構(gòu)建豐富的模型。注意,也可以收集一個(gè)引用列表作為屬性類型(例如 hive_table.cols,它表示從 hive_table 到 hive_column 類型的引用列表)
Entities
Atlas中的 "實(shí)體" 是類 "類型" 的特定值或?qū)嵗?#xff0c;因此表示真實(shí)世界中的特定元數(shù)據(jù)對(duì)象。 回顧我們的面向?qū)ο缶幊陶Z言的類比,"實(shí)例" 是某個(gè) "類" 的 "對(duì)象"。
?
實(shí)體的示例將是特定的 Hive 表。 說 "Hive" 在 "默認(rèn)" 數(shù)據(jù)庫(kù)中有一個(gè)名為 "customers" 的表。 此表將是類型為 hive_table 的 Atlas 中的 "實(shí)體"。 通過作為類類型的實(shí)例,它將具有作為 Hive 表 "類型" 的一部分的每個(gè)屬性的值,例如:
id: "9ba387dd-fa76-429c-b791-ffc338d3c91f"typeName: “hive_table”values:name: "customers"db: "b42c6cfc-c1e7-42fd-a9e6-890e0adf33bc"owner: "admin"createTime: "2016-06-20T06:13:28.000Z"lastAccessTime: "2016-06-20T06:13:28.000Z"comment: nullretention: 0sd: "ff58025f-6854-4195-9f75-3a3058dd8dcf"partitionKeys: nullaliases: nullcolumns: ["65e2204f-6a23-4130-934a-9679af6a211f", "d726de70-faca-46fb-9c99-cf04f6b579a6", ...]parameters: {"transient_lastDdlTime": "1466403208"}viewOriginalText: nullviewExpandedText: nulltableType: "MANAGED_TABLE"temporary: false?
從上面的例子可以注意到以下幾點(diǎn):
-
作為 Class Type 實(shí)例的每個(gè)實(shí)體都由唯一標(biāo)識(shí)符 GUID 標(biāo)識(shí)。此 GUID 由 Atlas 服務(wù)器在定義對(duì)象時(shí)生成,并在實(shí)體的整個(gè)生命周期內(nèi)保持不變。在任何時(shí)間點(diǎn),可以使用其 GUID 來訪問該特定實(shí)體。
-
在本示例中,默認(rèn)數(shù)據(jù)庫(kù)中的 "customers" 表由GUID "9ba387dd-fa76-429c-b791-ffc338d3c91f" 唯一標(biāo)識(shí)
-
-
實(shí)體具有給定類型,并且類型的名稱與實(shí)體定義一起提供。
-
在這個(gè)例子中,"customers" 表是一個(gè) "hive_table"。
-
-
此實(shí)體的值是所有屬性名稱及其在 hive_table 類型定義中定義的屬性的值的映射。
-
屬性值將根據(jù)屬性的元類型。
-
基本元類型:整數(shù),字符串,布爾值。例如。 'name'='customers','Temporary'='false'
-
集合元類型:包含元類型的值的數(shù)組或映射。例如。 parameters = {"transient_lastDdlTime":"1466403208"}
-
復(fù)合元類型:對(duì)于類,值將是與該特定實(shí)體具有關(guān)系的實(shí)體。例如。hive 表 "customers" 存在于稱為 "default" 的數(shù)據(jù)庫(kù)中。
-
表和數(shù)據(jù)庫(kù)之間的關(guān)系通過 "db" 屬性捕獲。因此,"db" 屬性的值將是一個(gè)唯一標(biāo)識(shí) hive_db 實(shí)體的 GUID,稱為 "default"對(duì)于實(shí)體的這個(gè)想法,我們現(xiàn)在可以看到 Class 和 Struct 元類型之間的區(qū)別。類和結(jié)構(gòu)體都組成其他類型的屬性。但是,類類型的實(shí)體具有 Id 屬性(具有GUID值)并且可以從其他實(shí)體引用(如 hive_db 實(shí)體從 hive_table 實(shí)體引用)。 Struct 類型的實(shí)例沒有自己的身份,Struct 類型的值是在實(shí)體本身內(nèi)嵌入的屬性的集合。
Attributes
我們已經(jīng)看到屬性在復(fù)合元類型(如 Class 和 Struct)中定義。 但是我們簡(jiǎn)單地將屬性稱為具有名稱和元類型值。 然而, Atlas 中的屬性還有一些屬性,定義了與類型系統(tǒng)相關(guān)的更多概念。
屬性具有以下屬性:
name: string,dataTypeName: string,isComposite: boolean,isIndexable: boolean,isUnique: boolean,multiplicity: enum,reverseAttributeName: string?
以上屬性具有以下含義:
-
name - 屬性的名稱
-
dataTypeName - 屬性的元類型名稱(本機(jī),集合或復(fù)合)
-
isComposite - 是否復(fù)合
-
此標(biāo)志指示建模的一個(gè)方面。如果一個(gè)屬性被定義為復(fù)合,它意味著它不能有一個(gè)生命周期與它所包含的實(shí)體無關(guān)。這個(gè)概念的一個(gè)很好的例子是構(gòu)成 hive 表一部分的一組列。由于列在 hive 表之外沒有意義,它們被定義為組合屬性。
-
必須在 Atlas 中創(chuàng)建復(fù)合屬性及其所包含的實(shí)體。即,必須與 hive 表一起創(chuàng)建 hive 列。
-
-
isIndexable - 是否索引
-
此標(biāo)志指示此屬性是否應(yīng)該索引,以便可以使用屬性值作為謂詞來執(zhí)行查找,并且可以有效地執(zhí)行查找。
-
-
isUnique - 是否唯一
-
此標(biāo)志再次與索引相關(guān)。如果指定為唯一,這意味著為 Titan 中的此屬性創(chuàng)建一個(gè)特殊索引,允許基于等式的查找。
-
具有此標(biāo)志的真實(shí)值的任何屬性都被視為主鍵,以將此實(shí)體與其他實(shí)體區(qū)分開。因此,應(yīng)注意確保此屬性在現(xiàn)實(shí)世界中模擬獨(dú)特的屬性。
-
例如,考慮 hive_table 的 name 屬性。孤立地,名稱不是 hive_table 的唯一屬性,因?yàn)榫哂邢嗤Q的表可以存在于多個(gè)數(shù)據(jù)庫(kù)中。如果 Atlas 在多個(gè)集群中存儲(chǔ) hive 表的元數(shù)據(jù),即使一對(duì)(數(shù)據(jù)庫(kù)名稱,表名稱)也不是唯一的。只有集群位置,數(shù)據(jù)庫(kù)名稱和表名稱可以在物理世界中被視為唯一。
-
-
-
multiplicity - 指示此屬性是(必需的/可選的/還是可以是多值)的。如果實(shí)體的屬性值的定義與類型定義中的多重性聲明不匹配,則這將是一個(gè)約束違反,并且實(shí)體添加將失敗。因此,該字段可以用于定義元數(shù)據(jù)信息上的一些約束。
使用上面的內(nèi)容,讓我們擴(kuò)展下面的 hive 表的屬性之一的屬性定義。讓我們看看稱為 "db" 的屬性,它表示 hive 表所屬的數(shù)據(jù)庫(kù):
db:"dataTypeName": "hive_db","isComposite": false,"isIndexable": true,"isUnique": false,"multiplicity": "required","name": "db","reverseAttributeName": null注意多重性的 "multiplicity" = "required" 約束。 如果沒有 db 引用,則不能發(fā)送表實(shí)體。
columns:"dataTypeName": "array<hive_column>","isComposite": true,"isIndexable": true,“isUnique": false,"multiplicity": "optional","name": "columns","reverseAttributeName": null請(qǐng)注意列的 "isComposite" = true 值。通過這樣做,我們指示定義的列實(shí)體應(yīng)該始終綁定到它們定義的表實(shí)體。
從這個(gè)描述和示例中,您將能夠意識(shí)到屬性定義可以用于影響 Atlas 系統(tǒng)要執(zhí)行的特定建模行為(約束,索引等)。
系統(tǒng)特定類型及其意義
Atlas 提供了一些預(yù)定義的系統(tǒng)類型。我們?cè)谇懊娴恼鹿?jié)中看到了一個(gè)例子(DataSet)。在本節(jié)中,我們將看到所有這些類型并了解它們的意義。
Referenceable:此類型表示可使用名為 qualifiedName 的唯一屬性搜索的所有實(shí)體。
Asset:此類型包含名稱,說明和所有者等屬性。名稱是必需屬性(multiplicity = required),其他是可選的。可引用和資源的目的是為定型器提供在定義和查詢其自身類型的實(shí)體時(shí)強(qiáng)制一致性的方法。擁有這些固定的屬性集允許應(yīng)用程序和用戶界面基于約定基于默認(rèn)情況下他們可以期望的屬性的假設(shè)。
Infrastructure:此類型擴(kuò)展了可引用和資產(chǎn),通常可用于基礎(chǔ)設(shè)施元數(shù)據(jù)對(duì)象(如群集,主機(jī)等)的常用超類型。
DataSet:此類型擴(kuò)展了可引用和資產(chǎn)。在概念上,它可以用于表示存儲(chǔ)數(shù)據(jù)的類型。在 Atlas 中,hive表,Sqoop RDBMS表等都是從 DataSet 擴(kuò)展的類型。擴(kuò)展 DataSet 的類型可以期望具有模式,它們將具有定義該數(shù)據(jù)集的屬性的屬性。例如, hive_table 中的 columns 屬性。另外,擴(kuò)展 DataSet 的實(shí)體類型的實(shí)體參與數(shù)據(jù)轉(zhuǎn)換,這種轉(zhuǎn)換可以由 Atlas 通過 lineage(或 provenance)生成圖形。
?
Process:此類型擴(kuò)展了可引用和資產(chǎn)。在概念上,它可以用于表示任何數(shù)據(jù)變換操作。例如,將原始數(shù)據(jù)的 hive 表轉(zhuǎn)換為存儲(chǔ)某個(gè)聚合的另一個(gè) hive 表的 ETL 過程可以是擴(kuò)展過程類型的特定類型。流程類型有兩個(gè)特定的屬性,輸入和輸出。輸入和輸出都是 DataSet 實(shí)體的數(shù)組。因此,Process 類型的實(shí)例可以使用這些輸入和輸出來捕獲 DataSet 的 lineage 如何演變。
Search
Atlas 支持以下 2 種方式搜索元數(shù)據(jù):
-
Search using DSL
-
Full-text search
Hive Atlas Bridge
Hive Model
默認(rèn) hive 建模在 org.apache.atlas.hive.model.HiveDataModelGenerator 中可用。 它定義以下類型:
hive_db(ClassType) - super types [Referenceable] - attributes [name, clusterName, description, locationUri, parameters, ownerName, ownerType]hive_storagedesc(ClassType) - super types [Referenceable] - attributes [cols, location, inputFormat, outputFormat, compressed, numBuckets, serdeInfo, bucketCols, sortCols, parameters, storedAsSubDirectories]hive_column(ClassType) - super types [Referenceable] - attributes [name, type, comment, table]hive_table(ClassType) - super types [DataSet] - attributes [name, db, owner, createTime, lastAccessTime, comment, retention, sd, partitionKeys, columns, aliases, parameters, viewOriginalText, viewExpandedText, tableType, temporary]hive_process(ClassType) - super types [Process] - attributes [name, startTime, endTime, userName, operationType, queryText, queryPlan, queryId]hive_principal_type(EnumType) - values [USER, ROLE, GROUP]hive_order(StructType) - attributes [col, order]hive_serde(StructType) - attributes [name, serializationLib, parameters]使用唯一的限定名稱創(chuàng)建和去重復(fù)實(shí)體。它們提供命名空間,也可以用于 query/lineage。請(qǐng)注意,dbName,tableName 和 columnName 應(yīng)為小寫。 clusterName 解釋如下。
-
hive_db - attribute qualifiedName - <dbName>@<clusterName>
-
hive_table - attribute qualifiedName - <dbName>.<tableName>@<clusterName>
-
hive_column - attribute qualifiedName - <dbName>.<tableName>.<columnName>@<clusterName>
-
hive_process - attribute name - <queryString> - 小寫的修剪查詢字符串
導(dǎo)入 Hive Metadata
org.apache.atlas.hive.bridge.HiveMetaStoreBridge 使用 org.apache.atlas.hive.model.HiveDataModelGenerator 中定義的模型將 Hive 元數(shù)據(jù)導(dǎo)入 Atlas。 import-hive.sh 命令可以用來方便這一點(diǎn)。腳本需要 Hadoop 和 Hive 類路徑 jar。 對(duì)于 Hadoop jar,請(qǐng)確保環(huán)境變量 HADOOP_CLASSPATH 已設(shè)置。另一種方法是將 HADOOP_HOME 設(shè)置為指向 Hadoop 安裝的根目錄同樣,對(duì)于 Hive jar,將 HIVE_HOME 設(shè)置為 Hive 安裝的根目錄將環(huán)境變量 HIVE_CONF_DIR 設(shè)置為 Hive 配置目錄復(fù)制 ${atlas-conf}/atlas-application.properties 到 hive conf 目錄
Usage: <atlas package>/hook-bin/import-hive.sh日志位于 ${atlas package}/logs/import-hive.log
如果要在 kerberized 集群中導(dǎo)入元數(shù)據(jù),則需要運(yùn)行以下命令:
<atlas package>/hook-bin/import-hive.sh -Dsun.security.jgss.debug=true -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.krb5.conf=[krb5.conf location] -Djava.security.auth.login.config=[jaas.conf location]-
krb5.conf is typically found at /etc/krb5.conf
-
for details about jaas.conf and a suggested location see the atlas security documentation
Hive Hook
Hive 在使用 hive hook 的 hive 命令執(zhí)行上支持偵聽器。 這用于在 Atlas 中使用 org.apache.atlas.hive.model.HiveDataModelGenerator 中定義的模型添加/更新/刪除實(shí)體。 hive hook 將請(qǐng)求提交給線程池執(zhí)行器,以避免阻塞命令執(zhí)行。 線程將實(shí)體作為消息提交給通知服務(wù)器,并且服務(wù)器讀取這些消息并注冊(cè)實(shí)體。 按照 hive 設(shè)置中的這些說明為 Atlas 添加 hive hook :
-
Set-up atlas hook in hive-site.xml of your hive configuration:
-
Add 'export HIVE_AUX_JARS_PATH=<atlas package>/hook/hive' in hive-env.sh of your hive configuration
-
Copy <atlas-conf>/atlas-application.properties to the hive conf directory.
在<atlas-conf> /atlas-application.properties中的以下屬性控制線程池和通知詳細(xì)信息:
?
-
atlas.hook.hive.synchronous - boolean,true來同步運(yùn)行鉤子。 默認(rèn)false。 建議設(shè)置為false,以避免 hive 查詢完成中的延遲。
-
atlas.hook.hive.numRetries - 通知失敗的重試次數(shù)。 默認(rèn)值 3
-
atlas.hook.hive.minThreads - 核心線程數(shù)。 默認(rèn)值 5
-
atlas.hook.hive.maxThreads - 最大線程數(shù)。 默認(rèn)值 5
-
atlas.hook.hive.keepAliveTime - 保持活動(dòng)時(shí)間以毫秒為單位。 默認(rèn) 10
-
atlas.hook.hive.queueSize - 線程池的隊(duì)列大小。 默認(rèn) 10000
參考 Configuration 通知相關(guān)配置
Column Level Lineage
從 atlas-0.8-incubating 版本開始,在 Atlas 中捕獲列 lineage
Model
-
ColumnLineageProcess 類型是 Process 的子類
-
這將輸出列與一組輸入列或輸入表相關(guān)聯(lián)
-
Lineage 還捕獲 Dependency 的類型:當(dāng)前的值是 SIMPLE,EXPRESSION,SCRIPT
-
SIMPLE依賴: 意味著輸出列具有與輸入相同的值
-
EXPRESSION依賴: 意味著輸出列被輸入列上的運(yùn)行時(shí)中的一些表達(dá)式(例如Hive SQL表達(dá)式)轉(zhuǎn)換。
-
SCRIPT依賴: 表示輸出列由用戶提供的腳本轉(zhuǎn)換。
-
-
在 EXPRESSION 依賴的情況下,表達(dá)式屬性包含字符串形式的表達(dá)式
-
由于 Process 鏈接輸入和輸出 DataSet,我們使 Column 成為 DataSet 的子類
Examples
對(duì)于下面的簡(jiǎn)單 CTAS:
create table t2 as select id, name from T1lineage 為
?
Extracting Lineage from Hive commands
-
HiveHook 將 HookContext 中的 LineageInfo 映射到 Column lineage 實(shí)例
-
Hive 中的 LineageInfo 為最終的 FileSinkOperator 提供 Column lineage ,將它們鏈接到 Hive 查詢中的輸入列
NOTE
在將 HIVE-13112 的補(bǔ)丁應(yīng)用于 Hive 源之后,列級(jí)別 lineage 與 Hive 版本1.2.1配合使用
Limitations
-
由于數(shù)據(jù)庫(kù)名,表名和列名在 hive 中不區(qū)分大小寫,因此實(shí)體中的對(duì)應(yīng)名稱為小寫。 因此,任何搜索 API 都應(yīng)該在查詢實(shí)體名稱時(shí)使用小寫
-
以下 hive 操作由 hive hook 當(dāng)前捕獲
-
create database
-
create table/view, create table as select
-
load, import, export
-
DMLs (insert)
-
alter database
-
alter table (skewed table information, stored as, protection is not supported)
-
alter view
-
Sqoop Atlas Bridge
Sqoop Model
默認(rèn)的 Sqoop 建模在 org.apache.atlas.sqoop.model.SqoopDataModelGenerator 中可用。 它定義以下類型:
sqoop_operation_type(EnumType) - values [IMPORT, EXPORT, EVAL]sqoop_dbstore_usage(EnumType) - values [TABLE, QUERY, PROCEDURE, OTHER]sqoop_process(ClassType) - super types [Process] - attributes [name, operation, dbStore, hiveTable, commandlineOpts, startTime, endTime, userName]sqoop_dbdatastore(ClassType) - super types [DataSet] - attributes [name, dbStoreType, storeUse, storeUri, source, description, ownerName]使用唯一的限定名稱創(chuàng)建和去重復(fù)實(shí)體。 它們提供命名空間,也可以用于查詢:sqoop_process - attribute name - sqoop-dbStoreType-storeUri-endTime sqoop_dbdatastore - attribute name - dbStoreType-connectorUrl-source
Sqoop Hook
Sqoop 添加了一個(gè) SqoopJobDataPublisher,在完成導(dǎo)入作業(yè)后將數(shù)據(jù)發(fā)布到 Atlas。 現(xiàn)在 sqoopHook 只支持hiveImport。 這用于使用 org.apache.atlas.sqoop.model.SqoopDataModelGenerator 中定義的模型在 Atlas 中添加實(shí)體。 按照 sqoop 設(shè)置中的以下說明在 ${sqoop-conf}/sqoop-site.xml 中為 Atlas 添加 sqoop 鉤子:
-
Sqoop Job publisher class. Currently only one publishing class is supported
sqoop.job.data.publish.class org.apache.atlas.sqoop.hook.SqoopHook
-
Atlas cluster name
atlas.cluster.name
-
復(fù)制 ${atlas-conf}/atlas-application.properties 到 sqoop 的配置文件夾 ${sqoop-conf}/
-
Link ${atlas-home}/hook/sqoop/*.jar in sqoop libRefer Configuration for notification related configurations
Limitations
-
目前 sqoop hook 只支持 hiveImport 這一種 sqoop 操作
Falcon Atlas Bridge
Falcon Model
默認(rèn)的falcon建模在 org.apache.atlas.falcon.model.FalconDataModelGenerator. 它可以定義以下類型:
falcon_cluster(ClassType) - super types [Infrastructure] - attributes [timestamp, colo, owner, tags]falcon_feed(ClassType) - super types [DataSet] - attributes [timestamp, stored-in, owner, groups, tags]falcon_feed_creation(ClassType) - super types [Process] - attributes [timestamp, stored-in, owner]falcon_feed_replication(ClassType) - super types [Process] - attributes [timestamp, owner]falcon_process(ClassType) - super types [Process] - attributes [timestamp, runs-on, owner, tags, pipelines, workflow-properties]為 falcon 進(jìn)程定義的每個(gè)集群創(chuàng)建一個(gè) falcon_process 實(shí)體。
使用唯一的 qualifiedName 屬性創(chuàng)建和去重復(fù)實(shí)體。 它們提供命名空間,也可以用于查詢/沿襲。 唯一的屬性是:
-
falcon_process - <process name>@<cluster name>
-
falcon_cluster - <cluster name>
-
falcon_feed - <feed name>@<cluster name>
-
falcon_feed_creation - <feed name>
-
falcon_feed_replication - <feed name>
Falcon Hook
Falcon 支持在 falcon 實(shí)體提交上的偵聽器。 這用于在 Atlas 中使用 org.apache.atlas.falcon.model.FalconDataModelGenerator 中定義的模型添加實(shí)體。 hook 將請(qǐng)求提交給線程池執(zhí)行器,以避免阻塞命令執(zhí)行。 線程將實(shí)體作為消息提交給通知服務(wù)器,并且服務(wù)器讀取這些消息并注冊(cè)實(shí)體。
-
Add 'org.apache.atlas.falcon.service.AtlasService' to application.services in ${falcon-conf}/startup.properties
-
Link falcon hook jars in falcon classpath - 'ln -s atlas?home/hook/falcon/?{falcon-home}/server/webapp/falcon/WEB-INF/lib/'
-
In ${falcon_conf}/falcon-env.sh, set an environment variable as follows:
The following properties in ${atlas-conf}/atlas-application.properties control the thread pool and notification details:
-
atlas.hook.falcon.synchronous - boolean, true to run the hook synchronously. default false
-
atlas.hook.falcon.numRetries - number of retries for notification failure. default 3
-
atlas.hook.falcon.minThreads - core number of threads. default 5
-
atlas.hook.falcon.maxThreads - maximum number of threads. default 5
-
atlas.hook.falcon.keepAliveTime - keep alive time in msecs. default 10
-
atlas.hook.falcon.queueSize - queue size for the threadpool. default 10000
Refer Configuration for notification related configurations
Limitations
-
在 falcon 集群實(shí)體中,使用的集群名稱應(yīng)該跨諸如 hive,falcon,sqoop 等組件是統(tǒng)一的。如果與 ambari 一起使用,則應(yīng)該使用 ambari 集群名稱用于集群實(shí)體
Storm Atlas Bridge
Introduction
Apache Storm 是一個(gè)分布式實(shí)時(shí)計(jì)算系統(tǒng)。 Storm 使得容易可靠地處理無界的數(shù)據(jù)流,為實(shí)時(shí)處理 Hadoop 對(duì)批處理所做的工作。 該過程實(shí)質(zhì)上是節(jié)點(diǎn)的 DAG,其被稱為 topology。
Apache Atlas 是一個(gè)元數(shù)據(jù)存儲(chǔ)庫(kù),支持端到端數(shù)據(jù)沿襲,搜索和關(guān)聯(lián)業(yè)務(wù)分類。
這種集成的目的是推動(dòng)操作 topology 元數(shù)據(jù)以及基礎(chǔ)數(shù)據(jù)源,目標(biāo),推導(dǎo)過程和任何可用的業(yè)務(wù)上下文,以便 Atlas 可以捕獲此 topology 的 lineage。
在此過程中有2個(gè)部分詳述如下:
-
Data model to represent the concepts in Storm
-
Storm Atlas Hook to update metadata in Atlas
Storm Data Model
數(shù)據(jù)模型在 Atlas 中表示為 Types。 它包含 topology 圖中各種節(jié)點(diǎn)的描述,例如 spouts 和 bolts 以及相應(yīng)的生產(chǎn)者和消費(fèi)者類型。
在Atlas中添加以下類型。
-
storm_topology - 表示粗粒度拓?fù)洹torm_topology 來自于 Atlas 過程類型,因此可用于通知 Atlas 關(guān)于 lineage。
-
添加以下數(shù)據(jù)集 - kafka_topic,jms_topic,hbase_table,hdfs_data_set。 這些都來自Atlas Dataset類型,因此形成譜系圖的端點(diǎn)。
-
storm_spout - 具有輸出的數(shù)據(jù)生產(chǎn)者,通常為Kafka,JMS
-
storm_bolt - 具有輸入和輸出的數(shù)據(jù)使用者,通常為Hive,HBase,HDFS等。
Storm Atlas hook自動(dòng)注冊(cè)依賴模型,如Hive數(shù)據(jù)模型,如果它發(fā)現(xiàn)這些是不為Atlas服務(wù)器所知。
每個(gè)類型的數(shù)據(jù)模型在類定義org.apache.atlas.storm.model.StormDataModel中描述。
Storm Atlas Hook
當(dāng)在 Storm 中成功注冊(cè)新 topology 時(shí),通知 Atlas。 Storm 在 Storm 客戶端提供了一個(gè)鉤子,backtype.storm.ISubmitterHook,用于提交一個(gè) Storm topology。
Storm Atlas hook 攔截 hook 后執(zhí)行,并從 topology 中提取元數(shù)據(jù),并使用定義的類型更新 Atlas。 Atlas 在org.apache.atlas.storm.hook.StormAtlasHook 中實(shí)現(xiàn)了 Storm 客戶端 hook 接口。
Limitations
以下內(nèi)容適用于集成的第一個(gè)版本。
-
只有新的 topology 提交已注冊(cè)到 Atlas,任何生命周期變化都不會(huì)反映在 Atlas 中。
-
當(dāng)為要捕獲的元數(shù)據(jù)提交 Storm topology 時(shí),Atlas 服務(wù)器需要在線。
-
hook 目前不支持捕獲自定義 spouts 和 bolts 的 lineage。
Installation
Storm Atlas Hook 需要在客戶端手動(dòng)安裝在 Storm 在:$ATLAS_PACKAGE/hook/storm
Storm Atlas Hook 需要復(fù)制到 $STORM_HOME/extlib。 使用 storm 安裝路徑替換 STORM_HOME。
在將安裝了 atlas hook 到 Storm 后重新啟動(dòng)所有守護(hù)進(jìn)程。
Configuration
Storm Configuration
Storm Atlas Hook 需要在 Storm 客戶端 $STORM_HOME/conf/storm.yaml 進(jìn)行配置:
storm.topology.submission.notifier.plugin.class: "org.apache.atlas.storm.hook.StormAtlasHook"還設(shè)置一個(gè) "集群名稱",將用作在 Atlas 中注冊(cè)的對(duì)象的命名空間。 此名稱將用于命名 Storm topology,spouts 和 bolts。
其他對(duì)象(如 Dataset)應(yīng)該理想地用生成它們的組件的集群名稱來標(biāo)識(shí)。 例如, Hive 表和數(shù)據(jù)庫(kù)應(yīng)該使用在 Hive 中設(shè)置的集群名稱來標(biāo)識(shí)。 如果 Hive 配置在客戶端上提交的 Storm topology jar 中可用,并且在那里定義了集群名稱,Storm Atlas hook 將選擇此選項(xiàng)。 對(duì)于 HBase 數(shù)據(jù)集,這種情況類似。 如果此配置不可用,將使用在 Storm 配置中設(shè)置的集群名稱。
atlas.cluster.name: "cluster_name"在 $STORM_HOME/conf/storm_env.ini 中, 設(shè)置以下環(huán)境變量:
STORM_JAR_JVM_OPTS:"-Datlas.conf=$ATLAS_HOME/conf/"將 ATLAS_HOME 指向 ATLAS 的安裝目錄.
你也可以通過程序?qū)?Storm 進(jìn)行如下配置:
Config stormConf = new Config();...stormConf.put(Config.STORM_TOPOLOGY_SUBMISSION_NOTIFIER_PLUGIN,org.apache.atlas.storm.hook.StormAtlasHook.class.getName());容錯(cuò)和高可用
簡(jiǎn)介
Apache Atlas 使用各種系統(tǒng)并與其交互,為數(shù)據(jù)管理員提供元數(shù)據(jù)管理和數(shù)據(jù) lineage。 通過適當(dāng)?shù)剡x擇和配置這些依賴關(guān)系,可以使用 Atlas 實(shí)現(xiàn)高度的服務(wù)可用性。 本文檔介紹了 Atlas 的高可用性支持狀態(tài),包括其功能和當(dāng)前限制,以及實(shí)現(xiàn)此級(jí)別高可用性所需的配置。
Atlas Web Service
目前,Atlas Web 服務(wù)有一個(gè)限制,它一次只能有一個(gè)活動(dòng)實(shí)例。在早期版本的 Atlas 中,可以配置和保持備份實(shí)例。但是,需要手動(dòng)故障轉(zhuǎn)移才能使此備份實(shí)例處于活動(dòng)狀態(tài)。
從這個(gè)版本開始,Atlas 將支持帶有自動(dòng)故障轉(zhuǎn)移的 主動(dòng)/被動(dòng) 配置中的 Atlas Web 服務(wù)的多個(gè)實(shí)例。這意味著用戶可以在不同的物理主機(jī)上同時(shí)部署和啟動(dòng) Atlas Web 服務(wù)的多個(gè)實(shí)例。其中一個(gè)實(shí)例將被自動(dòng)選擇為 "活動(dòng)" 實(shí)例來為用戶請(qǐng)求提供服務(wù)。其他人將自動(dòng)被視為 "被動(dòng)"。如果 "活動(dòng)" 實(shí)例由于故意停止或由于意外故障而變得不可用,則其他實(shí)例之一將自動(dòng)選為 "活動(dòng)" 實(shí)例,并開始為用戶請(qǐng)求提供服務(wù)。
"活動(dòng)" 實(shí)例是能夠正確響應(yīng)用戶請(qǐng)求的唯一實(shí)例。它可以創(chuàng)建,刪除,修改或響應(yīng)元數(shù)據(jù)對(duì)象上的查詢。 "被動(dòng)" 實(shí)例將接受用戶請(qǐng)求,但會(huì)使用 HTTP 重定向?qū)⑵渲囟ㄏ虻疆?dāng)前已知的 "活動(dòng)" 實(shí)例。具體來說,被動(dòng)實(shí)例本身不會(huì)響應(yīng)對(duì)元數(shù)據(jù)對(duì)象的任何查詢。但是,所有實(shí)例(包括主動(dòng)和被動(dòng))都將響應(yīng)返回有關(guān)該實(shí)例的信息的管理請(qǐng)求。
當(dāng)配置為高可用性模式時(shí),用戶可以獲得以下操作優(yōu)勢(shì):
-
在維護(hù)間隔期間不間斷服務(wù):如果需要停用 Atlas Web 服務(wù)的活動(dòng)實(shí)例進(jìn)行維護(hù),則另一個(gè)實(shí)例將自動(dòng)變?yōu)榛顒?dòng)狀態(tài)并可以為請(qǐng)求提供服務(wù)。
-
在意外故障事件中的不間斷服務(wù):如果由于軟件或硬件錯(cuò)誤,Atlas Web 服務(wù)的活動(dòng)實(shí)例失敗,另一個(gè)實(shí)例將自動(dòng)變?yōu)榛顒?dòng)狀態(tài)并可以為請(qǐng)求提供服務(wù)。
在以下小節(jié)中,我們將介紹為 Atlas Web 服務(wù)設(shè)置高可用性所需的步驟。 我們還描述了如何設(shè)計(jì)部署和客戶端以利用此功能。 最后,我們描述一些底層實(shí)現(xiàn)的細(xì)節(jié)。
Setting up the High Availability feature in Atlas
設(shè)置高可用性功能必須滿足以下先決條件。
-
確保在一組計(jì)算機(jī)上安裝 Apache Zookeeper(建議至少使用3臺(tái)服務(wù)器進(jìn)行生產(chǎn))。
-
選擇 2 個(gè)或更多物理機(jī)以在其上運(yùn)行 Atlas Web Service 實(shí)例。這些機(jī)器定義了我們稱為 Atlas 的 "服務(wù)器集合"。
要在 Atlas 中設(shè)置高可用性,必須在 atlas-application.properties 文件中定義一些配置選項(xiàng)。雖然配置項(xiàng)的完整列表在配置頁(yè)中定義,但本節(jié)列出了幾個(gè)主要選項(xiàng)。
-
高可用性是 Atlas 的可選功能。因此,必須通過將配置選項(xiàng) atlas.server.ha.enabled 設(shè)置為 true 來啟用。
-
接下來,定義標(biāo)識(shí)符列表,為您為 Atlas Web Service 實(shí)例選擇的每個(gè)物理機(jī)器分配一個(gè)標(biāo)識(shí)符。這些標(biāo)識(shí)符可以是簡(jiǎn)單的字符串,如id1,id2等。它們應(yīng)該是唯一的,不應(yīng)包含逗號(hào)。
-
將這些標(biāo)識(shí)符的逗號(hào)分隔列表定義為選項(xiàng) atlas.server.ids 的值。
-
對(duì)于每個(gè)物理機(jī),請(qǐng)列出IP地址/主機(jī)名和端口作為配置 atlas.server.address.id 的值,其中 id 指的是此物理機(jī)的標(biāo)識(shí)符字符串。
-
例如,如果您選擇了 2 臺(tái)主機(jī)名為 http://host1.company.com 和 http://host2.company.com 的計(jì)算機(jī),則可以如下定義配置選項(xiàng):
atlas.server.ids=id1,id2atlas.server.address.id1=host1.company.com:21000atlas.server.address.id2=host2.company.com:21000
-
-
定義使用的 Zookeeper 為 Atlas 提供高可用性功能
-
您可以查看為高可用性功能定義的其他配置選項(xiàng),并根據(jù)需要在 atlas-application.properties 文件中進(jìn)行設(shè)置。
-
對(duì)于生產(chǎn)環(huán)境,Atlas 所依賴的組件也必須在高可用性模式下設(shè)置。 這將在以下部分中詳細(xì)描述。 按照這些說明設(shè)置和配置它們。
-
在選定的物理機(jī)器上安裝 Atlas 軟件。
-
將使用上述步驟創(chuàng)建的 atlas-application.properties 文件復(fù)制到所有計(jì)算機(jī)的配置目錄。
-
啟動(dòng)相關(guān)組件。
-
啟動(dòng) Atlas Web 服務(wù)的每個(gè)實(shí)例。
要驗(yàn)證高可用性是否正常工作,請(qǐng)?jiān)诎惭b了 Atlas Web Service 的每個(gè)實(shí)例上運(yùn)行以下腳本。
$ATLAS_HOME/bin/atlas_admin.py -status此腳本可以打印以下值之一作為響應(yīng):
-
ACTIVE:此實(shí)例處于活動(dòng)狀態(tài),可以響應(yīng)用戶請(qǐng)求。
-
PASSIVE:此實(shí)例為 PASSIVE。它會(huì)將它收到的任何用戶請(qǐng)求重定向到當(dāng)前活動(dòng)實(shí)例。
-
BECOMING_ACTIVE:如果服務(wù)器正在轉(zhuǎn)換為 ACTIVE 實(shí)例,則將打印此消息。在此狀態(tài)下,服務(wù)器無法處理任何元數(shù)據(jù)用戶請(qǐng)求。
-
BECOMING_PASSIVE:如果服務(wù)器正在轉(zhuǎn)換為 PASSIVE 實(shí)例,則將打印此消息。在此狀態(tài)下,服務(wù)器無法處理任何元數(shù)據(jù)用戶請(qǐng)求。
在正常操作情況下,只有其中一個(gè)實(shí)例應(yīng)該打印 ACTIVE 值作為對(duì)腳本的響應(yīng),而其他實(shí)例將打印 PASSIVE。
配置客戶端以使用高可用性功能
Atlas Web 服務(wù)可以通過兩種方式訪問:
-
使用 Atlas Web UI:這是一個(gè)基于瀏覽器的客戶端,可用于查詢存儲(chǔ)在Atlas中的元數(shù)據(jù)。
-
使用 Atlas REST API:由于 Atlas 公開了一個(gè) RESTful API,因此可以使用任何標(biāo)準(zhǔn)的 REST 客戶端,包括其他應(yīng)用程序中的庫(kù)。事實(shí)上,Atlas 附帶了一個(gè)名為 AtlasClient 的客戶端,可以用作創(chuàng)建 REST 客戶端訪問的示例。
為了利用客戶端中的高可用性功能,可以有兩個(gè)選項(xiàng)。
使用中間代理
啟用高可用性訪問 Atlas 的最簡(jiǎn)單的解決方案是安裝和配置一些中間代理,其具有基于狀態(tài)透明地切換服務(wù)的能力。一個(gè)這樣的代理解決方案是 HAProxy。
下面是一個(gè)可以使用的 HAProxy 配置示例。注意,這只是為了說明,而不是作為推薦的生產(chǎn)配置。為此,請(qǐng)參閱 HAProxy文檔以獲取相應(yīng)的說明。
frontend atlas_febind *:41000default_backend atlas_bebackend atlas_bemode httpoption httpchk get /api/atlas/admin/statushttp-check expect string ACTIVEbalance roundrobinserver host1_21000 host1:21000 checkserver host2_21000 host2:21000 check backuplisten atlasbind localhost:42000以上配置綁定 HAProxy 偵聽端口 41000 傳入客戶端連接。然后根據(jù) HTTP 狀態(tài)檢查將連接路由到主機(jī) host1 或 host2 中的任一個(gè)。狀態(tài)檢查是使用 REST URL / api / atlas / admin / status 上的 HTTP GET 完成的,只有當(dāng) HTTP 響應(yīng)包含字符串ACTIVE 時(shí),才認(rèn)為成功。
使用活動(dòng)實(shí)例的自動(dòng)檢測(cè)
如果不想設(shè)置和管理單獨(dú)的代理,則使用高可用性功能的另一個(gè)選項(xiàng)是構(gòu)建能夠檢測(cè)狀態(tài)和重試操作的客戶端應(yīng)用程序。在這樣的設(shè)置中,可以使用形成集合的所有 Atlas Web 服務(wù)實(shí)例的 URL 啟動(dòng)客戶端應(yīng)用程序。然后,客戶端應(yīng)調(diào)用其中每一個(gè)上的 REST URL / api / atlas / admin / status,以確定哪個(gè)是活動(dòng)實(shí)例。來自 Active 實(shí)例的響應(yīng)將具有 {Status:ACTIVE}的形式。此外,當(dāng)客戶端在操作過程中遇到任何異常時(shí),它應(yīng)該再次確定哪些剩余的URL是活動(dòng)的并重試該操作。
Atlas 附帶的 AtlasClient 類可以用作一個(gè)示例客戶端庫(kù),它實(shí)現(xiàn)了使用集合并選擇正確的Active服務(wù)器實(shí)例的邏輯。
Atlas 中的實(shí)用程序(如quick_start.py和import-hive.sh)可以配置為使用多個(gè)服務(wù)器URL運(yùn)行。當(dāng)在此模式下啟動(dòng)時(shí),AtlasClient 自動(dòng)選擇并使用當(dāng)前活動(dòng)實(shí)例。如果在之間設(shè)置了代理,則可以在運(yùn)行 quick_start.py 或 import-hive.sh 時(shí)使用其地址。
實(shí)現(xiàn) Atlas 高可用
Atlas 高可用性工作在主 JIRA ATLAS-510 下進(jìn)行跟蹤。根據(jù)其提交的 JIRA 具有關(guān)于高可用性功能如何實(shí)現(xiàn)的詳細(xì)信息。在高級(jí)別可以調(diào)出以下幾點(diǎn):
-
活動(dòng)實(shí)例的自動(dòng)選擇以及到新的活動(dòng)實(shí)例的自動(dòng)故障轉(zhuǎn)移通過領(lǐng)導(dǎo)者選擇算法發(fā)生。
-
對(duì)于領(lǐng)導(dǎo)選舉,我們使用 Apache Curator 的 Leader Latch Recipe。
-
Active 實(shí)例是唯一一個(gè)在后端存儲(chǔ)中初始化,修改或讀取狀態(tài)以保持它們一致的實(shí)例。
-
此外,當(dāng)實(shí)例被選為活動(dòng)時(shí),它會(huì)刷新后端存儲(chǔ)中的任何緩存信息以獲取最新信息。
-
servlet 過濾器確保只有活動(dòng)的實(shí)例服務(wù)用戶請(qǐng)求。如果被動(dòng)實(shí)例接收到這些請(qǐng)求,它會(huì)自動(dòng)將它們重定向到當(dāng)前活動(dòng)實(shí)例。
Metadata Store
如上所述,Atlas 使用 Titan 來存儲(chǔ)它管理的元數(shù)據(jù)。默認(rèn)情況下,Atlas 使用獨(dú)立的 HBase 實(shí)例作為 Titan 的后備存儲(chǔ)。為了為元數(shù)據(jù)存儲(chǔ)提供 HA,我們建議將 Atlas 配置為使用分布式 HBase 作為 Titan 的后備存儲(chǔ)。這意味著您可以從 HBase 提供的 HA 保證中受益。為了將 Atlas 配置為在 HA 模式下使用 HBase,請(qǐng)執(zhí)行以下操作:
-
選擇在HA模式中設(shè)置的現(xiàn)有 HBase 集群以在 Atlas(OR)中配置在 HA模式 下設(shè)置新的 HBase 集群。
-
如果為 Atlas 設(shè)置 HBase,請(qǐng)按照 Installation Steps 中列出的用于設(shè)置 HBase 的說明進(jìn)行操作。
-
-
我們建議在使用 Zookeeper 協(xié)調(diào)的不同物理主機(jī)上的集群中使用多個(gè) HBase 主機(jī)(至少2個(gè)),以提供 HBase的 冗余和高可用性。
-
有關(guān)在 atlas.properties 中配置的選項(xiàng)的 Configuration page ,請(qǐng)參考配置頁(yè)面,以便使用 HBase 設(shè)置 Atlas。
-
Index Store
如上所述,Atlas 通過 Titan 索引元數(shù)據(jù)以支持全文搜索查詢。 為了為索引存儲(chǔ)提供 HA,我們建議將 Atlas 配置為使用 Solr作為 Titan 的后備索引存儲(chǔ)。 為了將 Atlas 配置為在 HA 模式下使用 Solr,請(qǐng)執(zhí)行以下操作:
-
在 HA 模式下選擇現(xiàn)有的 SolrCloud 群集設(shè)置以在 Atlas(OR)中配置設(shè)置新的 SolrCloud 群集。
-
確保 Solr 在至少 2 個(gè)物理主機(jī)上啟動(dòng)以實(shí)現(xiàn)冗余,并且每個(gè)主機(jī)運(yùn)行 Solr 節(jié)點(diǎn)。
-
我們建議將冗余數(shù)設(shè)置為至少 2。
-
-
創(chuàng)建 Atlas 所需的 SolrCloud 集合,如安裝步驟中所述
-
請(qǐng)參閱配置頁(yè)面以了解在 atlas.properties 中配置的選項(xiàng),以使用 Solr 設(shè)置 Atlas。
Notification Server
來自 Hook 的元數(shù)據(jù)通知事件通過寫入到名為 ATLAS_HOOK 的 Kafka topic 發(fā)送到 Atlas 。類似地,從 Atlas 到其他集成組件(如Ranger)的事件寫入名為 ATLAS_ENTITIES 的 Kafka topic。由于 Kafka 會(huì)保留這些消息,即使消費(fèi)者在發(fā)送事件時(shí)失敗,事件也不會(huì)丟失。此外,我們建議 Kafka 也設(shè)置容錯(cuò),以便它具有更高的可用性保證。為了配置 Atlas 在 HA 模式下使用 Kafka,請(qǐng)執(zhí)行以下操作:
-
選擇在 HA 模式中設(shè)置的現(xiàn)有 Kafka 集群以在 Atlas(OR)中配置設(shè)置新的 Kafka 集群。
-
我們建議在不同物理主機(jī)上的群集中有多個(gè) Kafka 代理,它們使用 Zookeeper 協(xié)調(diào),以提供 Kafka 的冗余和高可用性。
-
設(shè)置至少 2 個(gè)物理主機(jī)以實(shí)現(xiàn)冗余,每個(gè)托管一個(gè) Kafka 代理。
-
-
為 Atlas 使用設(shè)置 Kafka 主題:
-
ATLAS 主題的分區(qū)數(shù)應(yīng)設(shè)置為1(numPartitions)
-
確定 Kafka 主題的副本數(shù)量:將此值設(shè)置為至少 2 以進(jìn)行冗余。
-
運(yùn)行以下命令:
-
在 atlas-application.properties 中進(jìn)行如下配置:
-
Known Issues
-
如果托管 Atlas 'titan' HTable 的 HBase region servers 停機(jī),Atlas 將無法在 HBase 恢復(fù)聯(lián)機(jī)之前從 HBase 存儲(chǔ)或檢索元數(shù)據(jù)。
?
網(wǎng)易有數(shù):企業(yè)級(jí)大數(shù)據(jù)可視化分析平臺(tái)。面向業(yè)務(wù)人員的自助式敏捷分析平臺(tái),采用PPT模式的報(bào)告制作,更加易學(xué)易用,具備強(qiáng)大的探索分析功能,真正幫助用戶洞察數(shù)據(jù)發(fā)現(xiàn)價(jià)值。可點(diǎn)擊這里免費(fèi)試用。
?
了解 網(wǎng)易云 :
網(wǎng)易云官網(wǎng):https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網(wǎng)易云社區(qū):https://sq.163yun.com/
轉(zhuǎn)載于:https://www.cnblogs.com/163yun/p/9015985.html
總結(jié)
以上是生活随笔為你收集整理的使用 Apache Atlas 进行数据治理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结一些java编程题的思路
- 下一篇: 美元和马克(dp)