使用 Apache Atlas 进行数据治理
本文由??網(wǎng)易云?發(fā)布。
?
作者:網(wǎng)易/劉勛(本篇文章僅限知乎內(nèi)部分享,如需轉(zhuǎn)載,請取得作者同意授權(quán)。)
面對海量且持續(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 項目就是這個倡議的結(jié)果,社區(qū)伙伴持續(xù)的為該項目提供新的功能和特性。該項目用于管理共享元數(shù)據(jù)、數(shù)據(jù)分級、審計、安全性以及數(shù)據(jù)保護等方面,努力與Apache Ranger整合,用于數(shù)據(jù)權(quán)限控制策略。
Atlas 是一個可擴展和可擴展的核心基礎(chǔ)治理服務(wù)集 - 使企業(yè)能夠有效地和高效地滿足 Hadoop 中的合規(guī)性要求,并允許與整個企業(yè)數(shù)據(jù)生態(tài)系統(tǒng)的集成。
Atlas 的組件可以分為以下主要類別:
Core
此類別包含實現(xiàn) Atlas 功能核心的組件,包括:
Type System:Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對象定義一個模型。該模型由稱為 "類型" 的定義組成。"類型" 的 實例被稱為 "實體" 表示被管理的實際元數(shù)據(jù)對象。類型系統(tǒng)是一個組件,允許用戶定義和管理類型和實體。由 Atlas 管理的所有元數(shù)據(jù)對象(例如Hive表)都使用類型進行建模,并表示為實體。要在 Atlas 中存儲新類型的元數(shù)據(jù),需要了解類型系統(tǒng)組件的概念。
需要注意的一個關(guān)鍵點是,Atlas 中建模的通用性質(zhì)允許數(shù)據(jù)管理員和集成者定義技術(shù)元數(shù)據(jù)和業(yè)務(wù)元數(shù)據(jù)。也可以使用 Atlas 的特征來定義兩者之間的豐富關(guān)系。
Ingest / Export:Ingest 組件允許將元數(shù)據(jù)添加到 Atlas。類似地,Export 組件暴露由 Atlas 檢測到的元數(shù)據(jù)更改,以作為事件引發(fā),消費者可以使用這些更改事件來實時響應(yīng)元數(shù)據(jù)更改。
Graph Engine :在內(nèi)部,Atlas 通過使用圖形模型管理元數(shù)據(jù)對象。以實現(xiàn)元數(shù)據(jù)對象之間的巨大靈活性和豐富的關(guān)系。圖形引擎是負責(zé)在類型系統(tǒng)的類型和實體之間進行轉(zhuǎn)換的組件,以及基礎(chǔ)圖形模型。除了管理圖形對象之外,圖形引擎還為元數(shù)據(jù)對象創(chuàng)建適當(dāng)?shù)乃饕?#xff0c;以便有效地搜索它們。
Titan:目前,Atlas 使用 Titan 圖數(shù)據(jù)庫來存儲元數(shù)據(jù)對象。 Titan 使用兩個存儲:默認情況下元數(shù)據(jù)存儲配置為 HBase ,索引存儲配置為 Solr。也可以通過構(gòu)建相應(yīng)的配置文件將元數(shù)據(jù)存儲作為 BerkeleyDB 和 Index 存儲使用為 ElasticSearch。元數(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 使用可以構(gòu)建應(yīng)用程序的元數(shù)據(jù)更改事件都非常有用。如果希望使用與 Atlas 更松散耦合的集成,這可以允許更好的可擴展性,可靠性等,消息傳遞接口是特別有用的。Atlas 使用 Apache Kafka 作為通知服務(wù)器用于鉤子和元數(shù)據(jù)通知事件的下游消費者之間的通信。事件由鉤子和 Atlas 寫到不同的 Kafka 主題。
元數(shù)據(jù)源
Atlas 支持與許多元數(shù)據(jù)源的集成。將來還會添加更多集成。目前,Atlas 支持從以下來源獲取和管理元數(shù)據(jù):
HiveSqoopFalconStorm
與其它元數(shù)據(jù)源集成意味著兩件事:有一些元數(shù)據(jù)模型,Atlas 定義本機來表示這些組件的對象。 Atlas 提供了從這些組件中通過實時或批處理模式獲取元數(shù)據(jù)對象的組件。
Apps
由 Atlas 管理的元數(shù)據(jù)各種應(yīng)用程序使用,滿足許多治理用例。
Atlas Admin UI:該組件是一個基于 Web 的應(yīng)用程序,允許數(shù)據(jù)管理員和科學(xué)家發(fā)現(xiàn)和注釋元數(shù)據(jù)。這里最重要的是搜索界面和 SQL 樣的查詢語言,可以用來查詢由 Atlas 管理的元數(shù)據(jù)類型和對象。管理 UI 使用 Atlas 的 REST API 來構(gòu)建其功能。
Tag Based Policies:Apache Ranger 是針對 Hadoop 生態(tài)系統(tǒng)的高級安全管理解決方案,與各種 Hadoop 組件具有廣泛的集成。通過與 Atlas 集成,Ranger 允許安全管理員定義元數(shù)據(jù)驅(qū)動的安全策略,以實現(xiàn)有效的治理。 Ranger 是由 Atlas 通知的元數(shù)據(jù)更改事件的消費者。
Business Taxonomy:從元數(shù)據(jù)源獲取到 Atlas 的元數(shù)據(jù)對象主要是一種技術(shù)形式的元數(shù)據(jù)。為了增強可發(fā)現(xiàn)性和治理能力,Atlas 提供了一個業(yè)務(wù)分類界面,允許用戶首先定義一組代表其業(yè)務(wù)域的業(yè)務(wù)術(shù)語,并將其與 Atlas 管理的元數(shù)據(jù)實體相關(guān)聯(lián)。業(yè)務(wù)分類法是一種 Web 應(yīng)用程序,目前是 Atlas Admin UI 的一部分,并且使用 REST API 與 Atlas 集成。
Type System
Overview
Atlas 允許用戶為他們想要管理的元數(shù)據(jù)對象定義一個模型。該模型由稱為 "類型" 的定義組成。被稱為 "實體" 的 "類型" 實例表示被管理的實際元數(shù)據(jù)對象。類型系統(tǒng)是一個組件,允許用戶定義和管理類型和實體。由 Atlas 管理的所有元數(shù)據(jù)對象(例如Hive表)都使用類型進行建模,并表示為實體。要在Atlas中存儲新類型的元數(shù)據(jù),需要了解類型系統(tǒng)組件的概念。
Types
Atlas中的 "類型" 定義了如何存儲和訪問特定類型的元數(shù)據(jù)對象。類型表示了所定義元數(shù)據(jù)對象的一個或多個屬性集合。具有開發(fā)背景的用戶可以將 "類型" 理解成面向?qū)ο蟮木幊陶Z言的 "類" 定義的或關(guān)系數(shù)據(jù)庫的 "表模式"。
?
與 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?
從上面的例子可以注意到以下幾點:
-
Atlas中的類型由 "name" 唯一標識,
-
類型具有元類型。元類型表示 Atlas 中此模型的類型。 Atlas 有以下幾種類型:
-
基本元類型: Int,String,Boolean等。
-
枚舉元類型
-
集合元類型:例如Array,Map
-
復(fù)合元類型:Class,Struct,Trait
-
-
類型可以從稱為 "supertype" 的父類型 "extend" - 憑借這一點,它將包含在 "supertype" 中定義的屬性。這允許模型在一組相關(guān)類型等之間定義公共屬性。這再次類似于面向?qū)ο笳Z言如何定義類的超類的概念。 Atlas 中的類型也可以從多個超類型擴展。
-
在該示例中,每個 hive 表從預(yù)定義的超類型(稱為 "DataSet")擴展。稍后將提供關(guān)于此預(yù)定義類型的更多細節(jié)。
-
-
具有 "Class","Struct" 或 "Trait" 的元類型的類型可以具有屬性集合。每個屬性都有一個名稱(例如 "name")和一些其他關(guān)聯(lián)的屬性。可以使用表達式 type_name.attribute_name 來引用屬性。還要注意,屬性本身是使用 Atlas 元類型定義的。
-
在這個例子中,hive_table.name 是一個字符串,hive_table.aliases 是一個字符串?dāng)?shù)組,hive_table.db 引用一個類型的實例稱為 hive_db 等等。
-
-
在屬性中鍵入引用(如hive_table.db)。使用這樣的屬性,我們可以在 Atlas 中定義的兩種類型之間的任意關(guān)系,從而構(gòu)建豐富的模型。注意,也可以收集一個引用列表作為屬性類型(例如 hive_table.cols,它表示從 hive_table 到 hive_column 類型的引用列表)
Entities
Atlas中的 "實體" 是類 "類型" 的特定值或?qū)嵗?#xff0c;因此表示真實世界中的特定元數(shù)據(jù)對象。 回顧我們的面向?qū)ο缶幊陶Z言的類比,"實例" 是某個 "類" 的 "對象"。
?
實體的示例將是特定的 Hive 表。 說 "Hive" 在 "默認" 數(shù)據(jù)庫中有一個名為 "customers" 的表。 此表將是類型為 hive_table 的 Atlas 中的 "實體"。 通過作為類類型的實例,它將具有作為 Hive 表 "類型" 的一部分的每個屬性的值,例如:
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?
從上面的例子可以注意到以下幾點:
-
作為 Class Type 實例的每個實體都由唯一標識符 GUID 標識。此 GUID 由 Atlas 服務(wù)器在定義對象時生成,并在實體的整個生命周期內(nèi)保持不變。在任何時間點,可以使用其 GUID 來訪問該特定實體。
-
在本示例中,默認數(shù)據(jù)庫中的 "customers" 表由GUID "9ba387dd-fa76-429c-b791-ffc338d3c91f" 唯一標識
-
-
實體具有給定類型,并且類型的名稱與實體定義一起提供。
-
在這個例子中,"customers" 表是一個 "hive_table"。
-
-
此實體的值是所有屬性名稱及其在 hive_table 類型定義中定義的屬性的值的映射。
-
屬性值將根據(jù)屬性的元類型。
-
基本元類型:整數(shù),字符串,布爾值。例如。 'name'='customers','Temporary'='false'
-
集合元類型:包含元類型的值的數(shù)組或映射。例如。 parameters = {"transient_lastDdlTime":"1466403208"}
-
復(fù)合元類型:對于類,值將是與該特定實體具有關(guān)系的實體。例如。hive 表 "customers" 存在于稱為 "default" 的數(shù)據(jù)庫中。
-
表和數(shù)據(jù)庫之間的關(guān)系通過 "db" 屬性捕獲。因此,"db" 屬性的值將是一個唯一標識 hive_db 實體的 GUID,稱為 "default"對于實體的這個想法,我們現(xiàn)在可以看到 Class 和 Struct 元類型之間的區(qū)別。類和結(jié)構(gòu)體都組成其他類型的屬性。但是,類類型的實體具有 Id 屬性(具有GUID值)并且可以從其他實體引用(如 hive_db 實體從 hive_table 實體引用)。 Struct 類型的實例沒有自己的身份,Struct 類型的值是在實體本身內(nèi)嵌入的屬性的集合。
Attributes
我們已經(jīng)看到屬性在復(fù)合元類型(如 Class 和 Struct)中定義。 但是我們簡單地將屬性稱為具有名稱和元類型值。 然而, Atlas 中的屬性還有一些屬性,定義了與類型系統(tǒng)相關(guān)的更多概念。
屬性具有以下屬性:
name: string,dataTypeName: string,isComposite: boolean,isIndexable: boolean,isUnique: boolean,multiplicity: enum,reverseAttributeName: string?
以上屬性具有以下含義:
-
name - 屬性的名稱
-
dataTypeName - 屬性的元類型名稱(本機,集合或復(fù)合)
-
isComposite - 是否復(fù)合
-
此標志指示建模的一個方面。如果一個屬性被定義為復(fù)合,它意味著它不能有一個生命周期與它所包含的實體無關(guān)。這個概念的一個很好的例子是構(gòu)成 hive 表一部分的一組列。由于列在 hive 表之外沒有意義,它們被定義為組合屬性。
-
必須在 Atlas 中創(chuàng)建復(fù)合屬性及其所包含的實體。即,必須與 hive 表一起創(chuàng)建 hive 列。
-
-
isIndexable - 是否索引
-
此標志指示此屬性是否應(yīng)該索引,以便可以使用屬性值作為謂詞來執(zhí)行查找,并且可以有效地執(zhí)行查找。
-
-
isUnique - 是否唯一
-
此標志再次與索引相關(guān)。如果指定為唯一,這意味著為 Titan 中的此屬性創(chuàng)建一個特殊索引,允許基于等式的查找。
-
具有此標志的真實值的任何屬性都被視為主鍵,以將此實體與其他實體區(qū)分開。因此,應(yīng)注意確保此屬性在現(xiàn)實世界中模擬獨特的屬性。
-
例如,考慮 hive_table 的 name 屬性。孤立地,名稱不是 hive_table 的唯一屬性,因為具有相同名稱的表可以存在于多個數(shù)據(jù)庫中。如果 Atlas 在多個集群中存儲 hive 表的元數(shù)據(jù),即使一對(數(shù)據(jù)庫名稱,表名稱)也不是唯一的。只有集群位置,數(shù)據(jù)庫名稱和表名稱可以在物理世界中被視為唯一。
-
-
-
multiplicity - 指示此屬性是(必需的/可選的/還是可以是多值)的。如果實體的屬性值的定義與類型定義中的多重性聲明不匹配,則這將是一個約束違反,并且實體添加將失敗。因此,該字段可以用于定義元數(shù)據(jù)信息上的一些約束。
使用上面的內(nèi)容,讓我們擴展下面的 hive 表的屬性之一的屬性定義。讓我們看看稱為 "db" 的屬性,它表示 hive 表所屬的數(shù)據(jù)庫:
db:"dataTypeName": "hive_db","isComposite": false,"isIndexable": true,"isUnique": false,"multiplicity": "required","name": "db","reverseAttributeName": null注意多重性的 "multiplicity" = "required" 約束。 如果沒有 db 引用,則不能發(fā)送表實體。
columns:"dataTypeName": "array<hive_column>","isComposite": true,"isIndexable": true,“isUnique": false,"multiplicity": "optional","name": "columns","reverseAttributeName": null請注意列的 "isComposite" = true 值。通過這樣做,我們指示定義的列實體應(yīng)該始終綁定到它們定義的表實體。
從這個描述和示例中,您將能夠意識到屬性定義可以用于影響 Atlas 系統(tǒng)要執(zhí)行的特定建模行為(約束,索引等)。
系統(tǒng)特定類型及其意義
Atlas 提供了一些預(yù)定義的系統(tǒng)類型。我們在前面的章節(jié)中看到了一個例子(DataSet)。在本節(jié)中,我們將看到所有這些類型并了解它們的意義。
Referenceable:此類型表示可使用名為 qualifiedName 的唯一屬性搜索的所有實體。
Asset:此類型包含名稱,說明和所有者等屬性。名稱是必需屬性(multiplicity = required),其他是可選的。可引用和資源的目的是為定型器提供在定義和查詢其自身類型的實體時強制一致性的方法。擁有這些固定的屬性集允許應(yīng)用程序和用戶界面基于約定基于默認情況下他們可以期望的屬性的假設(shè)。
Infrastructure:此類型擴展了可引用和資產(chǎn),通常可用于基礎(chǔ)設(shè)施元數(shù)據(jù)對象(如群集,主機等)的常用超類型。
DataSet:此類型擴展了可引用和資產(chǎn)。在概念上,它可以用于表示存儲數(shù)據(jù)的類型。在 Atlas 中,hive表,Sqoop RDBMS表等都是從 DataSet 擴展的類型。擴展 DataSet 的類型可以期望具有模式,它們將具有定義該數(shù)據(jù)集的屬性的屬性。例如, hive_table 中的 columns 屬性。另外,擴展 DataSet 的實體類型的實體參與數(shù)據(jù)轉(zhuǎn)換,這種轉(zhuǎn)換可以由 Atlas 通過 lineage(或 provenance)生成圖形。
?
Process:此類型擴展了可引用和資產(chǎn)。在概念上,它可以用于表示任何數(shù)據(jù)變換操作。例如,將原始數(shù)據(jù)的 hive 表轉(zhuǎn)換為存儲某個聚合的另一個 hive 表的 ETL 過程可以是擴展過程類型的特定類型。流程類型有兩個特定的屬性,輸入和輸出。輸入和輸出都是 DataSet 實體的數(shù)組。因此,Process 類型的實例可以使用這些輸入和輸出來捕獲 DataSet 的 lineage 如何演變。
Search
Atlas 支持以下 2 種方式搜索元數(shù)據(jù):
-
Search using DSL
-
Full-text search
Hive Atlas Bridge
Hive Model
默認 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ù)實體。它們提供命名空間,也可以用于 query/lineage。請注意,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 命令可以用來方便這一點。腳本需要 Hadoop 和 Hive 類路徑 jar。 對于 Hadoop jar,請確保環(huán)境變量 HADOOP_CLASSPATH 已設(shè)置。另一種方法是將 HADOOP_HOME 設(shè)置為指向 Hadoop 安裝的根目錄同樣,對于 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ù),則需要運行以下命令:
<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 中定義的模型添加/更新/刪除實體。 hive hook 將請求提交給線程池執(zhí)行器,以避免阻塞命令執(zhí)行。 線程將實體作為消息提交給通知服務(wù)器,并且服務(wù)器讀取這些消息并注冊實體。 按照 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中的以下屬性控制線程池和通知詳細信息:
?
-
atlas.hook.hive.synchronous - boolean,true來同步運行鉤子。 默認false。 建議設(shè)置為false,以避免 hive 查詢完成中的延遲。
-
atlas.hook.hive.numRetries - 通知失敗的重試次數(shù)。 默認值 3
-
atlas.hook.hive.minThreads - 核心線程數(shù)。 默認值 5
-
atlas.hook.hive.maxThreads - 最大線程數(shù)。 默認值 5
-
atlas.hook.hive.keepAliveTime - 保持活動時間以毫秒為單位。 默認 10
-
atlas.hook.hive.queueSize - 線程池的隊列大小。 默認 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依賴: 意味著輸出列被輸入列上的運行時中的一些表達式(例如Hive SQL表達式)轉(zhuǎn)換。
-
SCRIPT依賴: 表示輸出列由用戶提供的腳本轉(zhuǎn)換。
-
-
在 EXPRESSION 依賴的情況下,表達式屬性包含字符串形式的表達式
-
由于 Process 鏈接輸入和輸出 DataSet,我們使 Column 成為 DataSet 的子類
Examples
對于下面的簡單 CTAS:
create table t2 as select id, name from T1lineage 為
?
Extracting Lineage from Hive commands
-
HiveHook 將 HookContext 中的 LineageInfo 映射到 Column lineage 實例
-
Hive 中的 LineageInfo 為最終的 FileSinkOperator 提供 Column lineage ,將它們鏈接到 Hive 查詢中的輸入列
NOTE
在將 HIVE-13112 的補丁應(yīng)用于 Hive 源之后,列級別 lineage 與 Hive 版本1.2.1配合使用
Limitations
-
由于數(shù)據(jù)庫名,表名和列名在 hive 中不區(qū)分大小寫,因此實體中的對應(yīng)名稱為小寫。 因此,任何搜索 API 都應(yīng)該在查詢實體名稱時使用小寫
-
以下 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
默認的 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ù)實體。 它們提供命名空間,也可以用于查詢:sqoop_process - attribute name - sqoop-dbStoreType-storeUri-endTime sqoop_dbdatastore - attribute name - dbStoreType-connectorUrl-source
Sqoop Hook
Sqoop 添加了一個 SqoopJobDataPublisher,在完成導(dǎo)入作業(yè)后將數(shù)據(jù)發(fā)布到 Atlas。 現(xiàn)在 sqoopHook 只支持hiveImport。 這用于使用 org.apache.atlas.sqoop.model.SqoopDataModelGenerator 中定義的模型在 Atlas 中添加實體。 按照 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
默認的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 進程定義的每個集群創(chuàng)建一個 falcon_process 實體。
使用唯一的 qualifiedName 屬性創(chuàng)建和去重復(fù)實體。 它們提供命名空間,也可以用于查詢/沿襲。 唯一的屬性是:
-
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 實體提交上的偵聽器。 這用于在 Atlas 中使用 org.apache.atlas.falcon.model.FalconDataModelGenerator 中定義的模型添加實體。 hook 將請求提交給線程池執(zhí)行器,以避免阻塞命令執(zhí)行。 線程將實體作為消息提交給通知服務(wù)器,并且服務(wù)器讀取這些消息并注冊實體。
-
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 集群實體中,使用的集群名稱應(yīng)該跨諸如 hive,falcon,sqoop 等組件是統(tǒng)一的。如果與 ambari 一起使用,則應(yīng)該使用 ambari 集群名稱用于集群實體
Storm Atlas Bridge
Introduction
Apache Storm 是一個分布式實時計算系統(tǒng)。 Storm 使得容易可靠地處理無界的數(shù)據(jù)流,為實時處理 Hadoop 對批處理所做的工作。 該過程實質(zhì)上是節(jié)點的 DAG,其被稱為 topology。
Apache Atlas 是一個元數(shù)據(jù)存儲庫,支持端到端數(shù)據(jù)沿襲,搜索和關(guān)聯(lián)業(yè)務(wù)分類。
這種集成的目的是推動操作 topology 元數(shù)據(jù)以及基礎(chǔ)數(shù)據(jù)源,目標,推導(dǎo)過程和任何可用的業(yè)務(wù)上下文,以便 Atlas 可以捕獲此 topology 的 lineage。
在此過程中有2個部分詳述如下:
-
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é)點的描述,例如 spouts 和 bolts 以及相應(yīng)的生產(chǎn)者和消費者類型。
在Atlas中添加以下類型。
-
storm_topology - 表示粗粒度拓撲。storm_topology 來自于 Atlas 過程類型,因此可用于通知 Atlas 關(guān)于 lineage。
-
添加以下數(shù)據(jù)集 - kafka_topic,jms_topic,hbase_table,hdfs_data_set。 這些都來自Atlas Dataset類型,因此形成譜系圖的端點。
-
storm_spout - 具有輸出的數(shù)據(jù)生產(chǎn)者,通常為Kafka,JMS
-
storm_bolt - 具有輸入和輸出的數(shù)據(jù)使用者,通常為Hive,HBase,HDFS等。
Storm Atlas hook自動注冊依賴模型,如Hive數(shù)據(jù)模型,如果它發(fā)現(xiàn)這些是不為Atlas服務(wù)器所知。
每個類型的數(shù)據(jù)模型在類定義org.apache.atlas.storm.model.StormDataModel中描述。
Storm Atlas Hook
當(dāng)在 Storm 中成功注冊新 topology 時,通知 Atlas。 Storm 在 Storm 客戶端提供了一個鉤子,backtype.storm.ISubmitterHook,用于提交一個 Storm topology。
Storm Atlas hook 攔截 hook 后執(zhí)行,并從 topology 中提取元數(shù)據(jù),并使用定義的類型更新 Atlas。 Atlas 在org.apache.atlas.storm.hook.StormAtlasHook 中實現(xiàn)了 Storm 客戶端 hook 接口。
Limitations
以下內(nèi)容適用于集成的第一個版本。
-
只有新的 topology 提交已注冊到 Atlas,任何生命周期變化都不會反映在 Atlas 中。
-
當(dāng)為要捕獲的元數(shù)據(jù)提交 Storm topology 時,Atlas 服務(wù)器需要在線。
-
hook 目前不支持捕獲自定義 spouts 和 bolts 的 lineage。
Installation
Storm Atlas Hook 需要在客戶端手動安裝在 Storm 在:$ATLAS_PACKAGE/hook/storm
Storm Atlas Hook 需要復(fù)制到 $STORM_HOME/extlib。 使用 storm 安裝路徑替換 STORM_HOME。
在將安裝了 atlas hook 到 Storm 后重新啟動所有守護進程。
Configuration
Storm Configuration
Storm Atlas Hook 需要在 Storm 客戶端 $STORM_HOME/conf/storm.yaml 進行配置:
storm.topology.submission.notifier.plugin.class: "org.apache.atlas.storm.hook.StormAtlasHook"還設(shè)置一個 "集群名稱",將用作在 Atlas 中注冊的對象的命名空間。 此名稱將用于命名 Storm topology,spouts 和 bolts。
其他對象(如 Dataset)應(yīng)該理想地用生成它們的組件的集群名稱來標識。 例如, Hive 表和數(shù)據(jù)庫應(yīng)該使用在 Hive 中設(shè)置的集群名稱來標識。 如果 Hive 配置在客戶端上提交的 Storm topology jar 中可用,并且在那里定義了集群名稱,Storm Atlas hook 將選擇此選項。 對于 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 進行如下配置:
Config stormConf = new Config();...stormConf.put(Config.STORM_TOPOLOGY_SUBMISSION_NOTIFIER_PLUGIN,org.apache.atlas.storm.hook.StormAtlasHook.class.getName());容錯和高可用
簡介
Apache Atlas 使用各種系統(tǒng)并與其交互,為數(shù)據(jù)管理員提供元數(shù)據(jù)管理和數(shù)據(jù) lineage。 通過適當(dāng)?shù)剡x擇和配置這些依賴關(guān)系,可以使用 Atlas 實現(xiàn)高度的服務(wù)可用性。 本文檔介紹了 Atlas 的高可用性支持狀態(tài),包括其功能和當(dāng)前限制,以及實現(xiàn)此級別高可用性所需的配置。
Atlas Web Service
目前,Atlas Web 服務(wù)有一個限制,它一次只能有一個活動實例。在早期版本的 Atlas 中,可以配置和保持備份實例。但是,需要手動故障轉(zhuǎn)移才能使此備份實例處于活動狀態(tài)。
從這個版本開始,Atlas 將支持帶有自動故障轉(zhuǎn)移的 主動/被動 配置中的 Atlas Web 服務(wù)的多個實例。這意味著用戶可以在不同的物理主機上同時部署和啟動 Atlas Web 服務(wù)的多個實例。其中一個實例將被自動選擇為 "活動" 實例來為用戶請求提供服務(wù)。其他人將自動被視為 "被動"。如果 "活動" 實例由于故意停止或由于意外故障而變得不可用,則其他實例之一將自動選為 "活動" 實例,并開始為用戶請求提供服務(wù)。
"活動" 實例是能夠正確響應(yīng)用戶請求的唯一實例。它可以創(chuàng)建,刪除,修改或響應(yīng)元數(shù)據(jù)對象上的查詢。 "被動" 實例將接受用戶請求,但會使用 HTTP 重定向?qū)⑵渲囟ㄏ虻疆?dāng)前已知的 "活動" 實例。具體來說,被動實例本身不會響應(yīng)對元數(shù)據(jù)對象的任何查詢。但是,所有實例(包括主動和被動)都將響應(yīng)返回有關(guān)該實例的信息的管理請求。
當(dāng)配置為高可用性模式時,用戶可以獲得以下操作優(yōu)勢:
-
在維護間隔期間不間斷服務(wù):如果需要停用 Atlas Web 服務(wù)的活動實例進行維護,則另一個實例將自動變?yōu)榛顒訝顟B(tài)并可以為請求提供服務(wù)。
-
在意外故障事件中的不間斷服務(wù):如果由于軟件或硬件錯誤,Atlas Web 服務(wù)的活動實例失敗,另一個實例將自動變?yōu)榛顒訝顟B(tài)并可以為請求提供服務(wù)。
在以下小節(jié)中,我們將介紹為 Atlas Web 服務(wù)設(shè)置高可用性所需的步驟。 我們還描述了如何設(shè)計部署和客戶端以利用此功能。 最后,我們描述一些底層實現(xiàn)的細節(jié)。
Setting up the High Availability feature in Atlas
設(shè)置高可用性功能必須滿足以下先決條件。
-
確保在一組計算機上安裝 Apache Zookeeper(建議至少使用3臺服務(wù)器進行生產(chǎn))。
-
選擇 2 個或更多物理機以在其上運行 Atlas Web Service 實例。這些機器定義了我們稱為 Atlas 的 "服務(wù)器集合"。
要在 Atlas 中設(shè)置高可用性,必須在 atlas-application.properties 文件中定義一些配置選項。雖然配置項的完整列表在配置頁中定義,但本節(jié)列出了幾個主要選項。
-
高可用性是 Atlas 的可選功能。因此,必須通過將配置選項 atlas.server.ha.enabled 設(shè)置為 true 來啟用。
-
接下來,定義標識符列表,為您為 Atlas Web Service 實例選擇的每個物理機器分配一個標識符。這些標識符可以是簡單的字符串,如id1,id2等。它們應(yīng)該是唯一的,不應(yīng)包含逗號。
-
將這些標識符的逗號分隔列表定義為選項 atlas.server.ids 的值。
-
對于每個物理機,請列出IP地址/主機名和端口作為配置 atlas.server.address.id 的值,其中 id 指的是此物理機的標識符字符串。
-
例如,如果您選擇了 2 臺主機名為 http://host1.company.com 和 http://host2.company.com 的計算機,則可以如下定義配置選項:
atlas.server.ids=id1,id2atlas.server.address.id1=host1.company.com:21000atlas.server.address.id2=host2.company.com:21000
-
-
定義使用的 Zookeeper 為 Atlas 提供高可用性功能
-
您可以查看為高可用性功能定義的其他配置選項,并根據(jù)需要在 atlas-application.properties 文件中進行設(shè)置。
-
對于生產(chǎn)環(huán)境,Atlas 所依賴的組件也必須在高可用性模式下設(shè)置。 這將在以下部分中詳細描述。 按照這些說明設(shè)置和配置它們。
-
在選定的物理機器上安裝 Atlas 軟件。
-
將使用上述步驟創(chuàng)建的 atlas-application.properties 文件復(fù)制到所有計算機的配置目錄。
-
啟動相關(guān)組件。
-
啟動 Atlas Web 服務(wù)的每個實例。
要驗證高可用性是否正常工作,請在安裝了 Atlas Web Service 的每個實例上運行以下腳本。
$ATLAS_HOME/bin/atlas_admin.py -status此腳本可以打印以下值之一作為響應(yīng):
-
ACTIVE:此實例處于活動狀態(tài),可以響應(yīng)用戶請求。
-
PASSIVE:此實例為 PASSIVE。它會將它收到的任何用戶請求重定向到當(dāng)前活動實例。
-
BECOMING_ACTIVE:如果服務(wù)器正在轉(zhuǎn)換為 ACTIVE 實例,則將打印此消息。在此狀態(tài)下,服務(wù)器無法處理任何元數(shù)據(jù)用戶請求。
-
BECOMING_PASSIVE:如果服務(wù)器正在轉(zhuǎn)換為 PASSIVE 實例,則將打印此消息。在此狀態(tài)下,服務(wù)器無法處理任何元數(shù)據(jù)用戶請求。
在正常操作情況下,只有其中一個實例應(yīng)該打印 ACTIVE 值作為對腳本的響應(yīng),而其他實例將打印 PASSIVE。
配置客戶端以使用高可用性功能
Atlas Web 服務(wù)可以通過兩種方式訪問:
-
使用 Atlas Web UI:這是一個基于瀏覽器的客戶端,可用于查詢存儲在Atlas中的元數(shù)據(jù)。
-
使用 Atlas REST API:由于 Atlas 公開了一個 RESTful API,因此可以使用任何標準的 REST 客戶端,包括其他應(yīng)用程序中的庫。事實上,Atlas 附帶了一個名為 AtlasClient 的客戶端,可以用作創(chuàng)建 REST 客戶端訪問的示例。
為了利用客戶端中的高可用性功能,可以有兩個選項。
使用中間代理
啟用高可用性訪問 Atlas 的最簡單的解決方案是安裝和配置一些中間代理,其具有基于狀態(tài)透明地切換服務(wù)的能力。一個這樣的代理解決方案是 HAProxy。
下面是一個可以使用的 HAProxy 配置示例。注意,這只是為了說明,而不是作為推薦的生產(chǎn)配置。為此,請參閱 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)檢查將連接路由到主機 host1 或 host2 中的任一個。狀態(tài)檢查是使用 REST URL / api / atlas / admin / status 上的 HTTP GET 完成的,只有當(dāng) HTTP 響應(yīng)包含字符串ACTIVE 時,才認為成功。
使用活動實例的自動檢測
如果不想設(shè)置和管理單獨的代理,則使用高可用性功能的另一個選項是構(gòu)建能夠檢測狀態(tài)和重試操作的客戶端應(yīng)用程序。在這樣的設(shè)置中,可以使用形成集合的所有 Atlas Web 服務(wù)實例的 URL 啟動客戶端應(yīng)用程序。然后,客戶端應(yīng)調(diào)用其中每一個上的 REST URL / api / atlas / admin / status,以確定哪個是活動實例。來自 Active 實例的響應(yīng)將具有 {Status:ACTIVE}的形式。此外,當(dāng)客戶端在操作過程中遇到任何異常時,它應(yīng)該再次確定哪些剩余的URL是活動的并重試該操作。
Atlas 附帶的 AtlasClient 類可以用作一個示例客戶端庫,它實現(xiàn)了使用集合并選擇正確的Active服務(wù)器實例的邏輯。
Atlas 中的實用程序(如quick_start.py和import-hive.sh)可以配置為使用多個服務(wù)器URL運行。當(dāng)在此模式下啟動時,AtlasClient 自動選擇并使用當(dāng)前活動實例。如果在之間設(shè)置了代理,則可以在運行 quick_start.py 或 import-hive.sh 時使用其地址。
實現(xiàn) Atlas 高可用
Atlas 高可用性工作在主 JIRA ATLAS-510 下進行跟蹤。根據(jù)其提交的 JIRA 具有關(guān)于高可用性功能如何實現(xiàn)的詳細信息。在高級別可以調(diào)出以下幾點:
-
活動實例的自動選擇以及到新的活動實例的自動故障轉(zhuǎn)移通過領(lǐng)導(dǎo)者選擇算法發(fā)生。
-
對于領(lǐng)導(dǎo)選舉,我們使用 Apache Curator 的 Leader Latch Recipe。
-
Active 實例是唯一一個在后端存儲中初始化,修改或讀取狀態(tài)以保持它們一致的實例。
-
此外,當(dāng)實例被選為活動時,它會刷新后端存儲中的任何緩存信息以獲取最新信息。
-
servlet 過濾器確保只有活動的實例服務(wù)用戶請求。如果被動實例接收到這些請求,它會自動將它們重定向到當(dāng)前活動實例。
Metadata Store
如上所述,Atlas 使用 Titan 來存儲它管理的元數(shù)據(jù)。默認情況下,Atlas 使用獨立的 HBase 實例作為 Titan 的后備存儲。為了為元數(shù)據(jù)存儲提供 HA,我們建議將 Atlas 配置為使用分布式 HBase 作為 Titan 的后備存儲。這意味著您可以從 HBase 提供的 HA 保證中受益。為了將 Atlas 配置為在 HA 模式下使用 HBase,請執(zhí)行以下操作:
-
選擇在HA模式中設(shè)置的現(xiàn)有 HBase 集群以在 Atlas(OR)中配置在 HA模式 下設(shè)置新的 HBase 集群。
-
如果為 Atlas 設(shè)置 HBase,請按照 Installation Steps 中列出的用于設(shè)置 HBase 的說明進行操作。
-
-
我們建議在使用 Zookeeper 協(xié)調(diào)的不同物理主機上的集群中使用多個 HBase 主機(至少2個),以提供 HBase的 冗余和高可用性。
-
有關(guān)在 atlas.properties 中配置的選項的 Configuration page ,請參考配置頁面,以便使用 HBase 設(shè)置 Atlas。
-
Index Store
如上所述,Atlas 通過 Titan 索引元數(shù)據(jù)以支持全文搜索查詢。 為了為索引存儲提供 HA,我們建議將 Atlas 配置為使用 Solr作為 Titan 的后備索引存儲。 為了將 Atlas 配置為在 HA 模式下使用 Solr,請執(zhí)行以下操作:
-
在 HA 模式下選擇現(xiàn)有的 SolrCloud 群集設(shè)置以在 Atlas(OR)中配置設(shè)置新的 SolrCloud 群集。
-
確保 Solr 在至少 2 個物理主機上啟動以實現(xiàn)冗余,并且每個主機運行 Solr 節(jié)點。
-
我們建議將冗余數(shù)設(shè)置為至少 2。
-
-
創(chuàng)建 Atlas 所需的 SolrCloud 集合,如安裝步驟中所述
-
請參閱配置頁面以了解在 atlas.properties 中配置的選項,以使用 Solr 設(shè)置 Atlas。
Notification Server
來自 Hook 的元數(shù)據(jù)通知事件通過寫入到名為 ATLAS_HOOK 的 Kafka topic 發(fā)送到 Atlas 。類似地,從 Atlas 到其他集成組件(如Ranger)的事件寫入名為 ATLAS_ENTITIES 的 Kafka topic。由于 Kafka 會保留這些消息,即使消費者在發(fā)送事件時失敗,事件也不會丟失。此外,我們建議 Kafka 也設(shè)置容錯,以便它具有更高的可用性保證。為了配置 Atlas 在 HA 模式下使用 Kafka,請執(zhí)行以下操作:
-
選擇在 HA 模式中設(shè)置的現(xiàn)有 Kafka 集群以在 Atlas(OR)中配置設(shè)置新的 Kafka 集群。
-
我們建議在不同物理主機上的群集中有多個 Kafka 代理,它們使用 Zookeeper 協(xié)調(diào),以提供 Kafka 的冗余和高可用性。
-
設(shè)置至少 2 個物理主機以實現(xiàn)冗余,每個托管一個 Kafka 代理。
-
-
為 Atlas 使用設(shè)置 Kafka 主題:
-
ATLAS 主題的分區(qū)數(shù)應(yīng)設(shè)置為1(numPartitions)
-
確定 Kafka 主題的副本數(shù)量:將此值設(shè)置為至少 2 以進行冗余。
-
運行以下命令:
-
在 atlas-application.properties 中進行如下配置:
-
Known Issues
-
如果托管 Atlas 'titan' HTable 的 HBase region servers 停機,Atlas 將無法在 HBase 恢復(fù)聯(lián)機之前從 HBase 存儲或檢索元數(shù)據(jù)。
?
網(wǎng)易有數(shù):企業(yè)級大數(shù)據(jù)可視化分析平臺。面向業(yè)務(wù)人員的自助式敏捷分析平臺,采用PPT模式的報告制作,更加易學(xué)易用,具備強大的探索分析功能,真正幫助用戶洞察數(shù)據(jù)發(fā)現(xiàn)價值。可點擊這里免費試用。
?
了解 網(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 进行数据治理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结一些java编程题的思路
- 下一篇: 美元和马克(dp)