Atlas 2.0.0編譯與CDH6.2.1內建
Atlas能夠提供開放式的中繼資料管理和治理功能。能夠建構表與表之間的血緣關系,并且支援對表和建構表的過程進行分類管理。對于平台資料量越來越大,中繼資料管理顯得至關重要,中繼資料有效的表達了資料的來源和流向以及依賴,Atlas的出現,有效的解決了中繼資料的管理問題。
Atlas架構原理
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPBR0T4tmeaVnRXVGcGdUYxgmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2IzN0QTO0MTM0ETMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
核心元件
核心層Core
類型系統Type System: Atlas 允許使用者為他們想要管理的中繼資料對象定義一個模型。該模型由稱為 "Type" 的定義組成。"類型" 的 執行個體被稱為 "實體" 表示被管理的實際中繼資料對象。類型系統是一個元件,允許使用者定義和管理類型和實體。由 Atlas 管理的所有中繼資料對象(例如Hive表)都使用類型進行模組化,并表示為實體。要在 Atlas 中存儲新類型的中繼資料,需要了解類型系統元件的概念。
采集導出Ingest/Export:Ingest 元件允許将中繼資料添加到 Atlas。類似地,Export 元件暴露由Atlas檢測到的中繼資料更改,以作為事件引發,消費者可以使用這些更改事件來實時響應中繼資料更改。
圖形引擎Graph Engine:在内部,Atlas通過使用圖模型管理中繼資料對象。以實作中繼資料對象之間的巨大靈活性和豐富的關系。圖引擎是負責在類型系統的類型和實體之間進行轉換的元件,以及基礎圖形模型。除了管理圖對象之外,圖引擎還為中繼資料對象建立适當的索引,以便有效地搜尋它們。
Titan:目前,Atlas 使用 JanusGraph圖資料庫來存儲中繼資料對象。 JanusGraph使用兩個存儲:預設情況下中繼資料存儲配置為 HBase ,索引存儲配置為 Solr。
繼承層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,可以接入Hive的中繼資料,包括hive_db/hive_table/hive_column/hive_process
Sqoop:通過sqoop bridge,可以接入關系型資料庫的中繼資料,包括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 內建
存儲層
Metadata Store<Hbase>: Atlas使用Hbase存儲中繼資料。
IndexStore<Solr>:采用Solr來建索引
Hook
Hive Hook
Atlas擷取Hive中繼資料主要有兩步:
①在Hive中設定Atlas Hook :
Atlas Hive hook向Hive注冊以監聽建立/更新/删除操作,并通過Kafka實時通知更新Atlas中的中繼資料,以感覺Hive中的更改。
//Set-up Atlas hook in hive-site.xml by adding the following: <property> <name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook</value> </property> |
②導入Hive中繼資料
Apache Atlas提供了一個指令行腳本import-hive.sh,用于将Apache Hive資料庫和表的中繼資料導入Apache Atlas。該腳本可用于使用Apache Hive中的資料庫/表初始化Apache Atlas。此腳本支援導入特定表的中繼資料,特定資料庫中的表或所有資料庫和表
Atlas擷取Hive中繼資料的原理:
首先執行import-hive.sh,這裡相當于初始化作用,Altas擷取Hive的庫/表結構(注意!此時并沒有獲獲表與表/字段之間的血緣關系,隻是擷取了表的結構,即 create table語句,此時可以在web ui上面隻會看到單個表的名字,location等等資訊)
要想正真擷取血緣關系,必須配置hive.exec.post.hooks,然後需要把任務重新排程一下,即執行 insert overwrite a select * from b。此時配置的hook 會監聽感覺到hive表中有更新操作,然後通過Kafka将更新的資料發給Atlas,Atlas會對資料修改,這樣在Web Ui 就會看到 a表與b表的血緣關系。
Atlas2.0.0源碼編譯
源碼下載下傳
Atlas2.0.0的編譯,依賴環境如下:
JDK_8u151及以上版本
Maven3.5.0及以上
Python2.7(centos7.5自帶,無需安裝)
下載下傳位址:
https://archive.apache.org/dist/atlas/
或
http://atlas.apache.org/#/Downloads
編譯說明
由于大資料環境是CDH6.2.1,需要修改Atlas的相關版本與CDH6.2.1元件版本一緻,調整如下:修改下載下傳的源碼包裡的pom檔案,hive版本無需修改,若修改編譯會失敗
解壓下載下傳好的源碼包: tar xzvf apache-atlas-2.0.0-sources.tar.gz 修改pom檔案: <hadoop.version>3.0.0</hadoop.version> <hbase.version>2.1.0</hbase.version> <kafka.version>2.1.0</kafka.version> <zookeeper.version>3.4.5</zookeeper.version> |
編譯
在解壓後的目錄執行編譯指令: export MAVEN_OPTS="-Xms4g -Xmx4g" mvn clean -DskipTests package –Pdist或 mvn clean -DskipTests package -Pdist,embedded-hbase-solr |
編譯的檔案在disto下面target目錄下,紅框中就是我們要的安裝包:
可将tar包重新解壓到所需安裝目錄進行安裝。或者把解解壓好的移動到所需安裝路徑
內建CDH元件
Atlas依賴HBase、Solr環境,提前在CDH中安裝好HBase和Solr服務
內建HBase
vim atlas-2.0.0/conf/atlas-application.properties # 配置項如下 atlas.graph.storage.hostname=[hostname]:2181 # 将Hbase的配置檔案軟連接配接到Atlas的conf/hbase目錄下 ln -s /etc/hbase/conf/ /opt/apps/atlas-2.0.0/conf/hbase/ |
內建Solr
vi atlas-2.0.0/conf/atlas-application.properties # 配置項如下 atlas.graph.index.search.solr.zookeeper-url=[hostname]:2181/solr # 将Atlas的conf目錄下Solr檔案夾同步到Solr的目錄下,更名,然後發到各個節點 cp -r /opt/apps/atlas-2.0.0/conf/solr /opt/cloudera/parcels/CDH/lib/solr/ cd /opt/cloudera/parcels/CDH/lib/solr/ # 更名 mv solr atlas_solr # 同步到其他節點 (如若有其他節點就同步到其他節點) # Solr建立collection cd /opt/cloudera/parcels/CDH/lib/solr/ bin/solr create -c vertex_index -d /opt/cloudera/parcels/CDH/lib/solr/aatlas_solr -force -shards 3 -replicationFactor 1 bin/solr create -c edge_index -d /opt/cloudera/parcels/CDH/lib/solr/atlas_solr -force -shards 3 -replicationFactor 1 bin/solr create -c fulltext_index -d /opt/cloudera/parcels/CDH/lib/solr/atlas_solr -force -shards 3 -replicationFactor 1 |
內建Kafka
vi atlas-2.0.0/conf/atlas-application.properties # 配置項如下 atlas.notification.embedded=false atlas.kafka.zookeeper.connect=[hostname]:2181 atlas.kafka.bootstrap.servers=[hostname]:9092 atlas.kafka.zookeeper.session.timeout.ms=4000 atlas.kafka.zookeeper.connection.timeout.ms=2000 atlas.kafka.enable.auto.commit=true # 建立主題(也可以不要建立,Kafka會自動建立,但是topic分區數是1,生産環境必須建立) kafka-topics --zookeeper hadoop01:2181 --create --replication-factor 2 --partitions 3 --topic ATLAS_HOOK kafka-topics --zookeeper hadoop01:2181 --create --replication-factor 2 --partitions 3 --topic ATLAS_ENTITIES |
內建Hive
将配置檔案atlas-application.properties添加到atlas-2.0.0/hook/hive的atlas-plugin-classloader-2.0.0.jar
# 切換到Atlas的conf目錄下 cd /opt/apps/atlas-2.0.0/conf # 添加 zip -u /opt/apps/atlas-2.0.0/hook/hive/atlas-plugin-classloader-2.0.0.jar atlas-application.properties # 将配置檔案添加到hive的配置目錄下 cp atlas-application.properties /etc/hive/conf |
修改CDH上的hive配置檔案
<property> <name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook</value> </property> <property> <name>hive.reloadable.aux.jars.path</name> <value>/opt/apps/atlas/apache-atlas-2.0.0/hook/hive</value> </property> |
HIVE_AUX_JARS_PATH=/opt/apps/atlas/apache-atlas-2.0.0/hook/hive |
修改完配置需要重新開機Hive及Hive相關的元件
啟動Atlas
Atlas預設web通路頁面端口為21000,此端口與impala端口沖突
Atlas修改端口無效(原因未知),故修改impala 21000端口為21001
#啟動 bin/atlas_start.py #停止: bin/atlas_stop.py |
通路Atlas web頁面: http:// [hostname]:21000 預設密碼admin/admin
導入hive中繼資料
所有節點添加hive環境變量
vi /etc/profile # 添加如下 export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive export HIVE_CONF_DIR=/etc/hive/conf export PATH=$HIVE_HOME/bin:$PATH # 使生效 source /etc/profile #導入hive中繼資料 ,使用者密碼為atlas web通路的使用者密碼,預設admin/admin cd /opt/apps/atlas/apache-atlas-2.0.0 bin/import-hive.sh |