談到數據治理,自然離不開元數據。元數據(Metadata),用一句話定義就是:描述數據的數據。元數據打通了數據源、數據倉庫、數據應用,記錄了數據從產生到消費的全過程。因此,數據治理的核心就是元數據管理。
數據的真正價值在於數據驅動決策,通過數據指導運營。通過數據驅動的方法判斷趨勢,幫助我們發現問題,繼而推動創新或產生新的解決方案。隨著企業數據爆發式增長,數據體量越來越難以估量,我們很難說清楚我們到底擁有哪些數據,這些數據從哪裡來,到哪裡去,發生了什麼變化,應該如何使用它們。因此元數據管理(數據治理)成為企業級數據湖不可或缺的重要組成部分。
可惜很長一段時間內,市面都沒有成熟的數據治理解決方案。直到2015年,Hortonworks終於坐不住了,約了一眾小夥伴公司倡議:咱們開始整個數據治理方案吧。然後,包含數據分類、集中策略引擎、數據血緣、安全和生命周期管理功能的Atlas應運而生。(PS:另一個應用的較多的元數據開源項目是Linkedin 在2016年新開源的項目:WhereHows)Atlas目前最新的版本為2018年9月18日發布的1.0.0版本。
Atlas 是一個可伸縮和可擴展的核心基礎治理服務集合 ,使企業能夠有效地和高效地滿足 Hadoop 中的合規性要求,並允許與整個企業數據生態系統的集成。
Apache Atlas為組織提供開放式元數據管理和治理功能,用以構建其數據資產目錄,對這些資產進行分類和管理,並為數據科學家,數據分析師和數據治理團隊提供圍繞這些數據資產的協作功能。
2、Atlas的架構概述核心模塊當中又包含以下幾大模塊:
Type System:類型系統Atlas允許用戶為他們要管理的元數據對象定義模型。該模型由稱為「類型」的定義組成。稱為「實體」的「類型」實例代表所管理的實際元數據對象。類型系統是允許用戶定義和管理類型和實體的組件。開箱即用的Atlas管理的所有元數據對象(例如,像Hive表一樣)均使用類型進行建模,並表示為實體。為了在Atlas中存儲新類型的元數據,需要了解類型系統組件的概念。
Graph Engine:圖形引擎在內部,Atlas保留使用Graph模型管理的元數據對象。這種方法提供了極大的靈活性,並可以有效處理元數據對象之間的豐富關係。圖引擎組件負責在Atlas類型系統的類型和實體以及基礎圖持久性模型之間進行轉換。除了管理圖形對象之外,圖形引擎還為元數據對象創建適當的索引,以便可以高效地搜索它們。Atlas使用JanusGraph存儲元數據對象。
Ingest / Export:提取/導出「提取」組件允許將元數據添加到Atlas。同樣,導出組件將Atlas檢測到的元數據更改公開為事件。消費者可以使用這些更改事件來實時響應元數據更改
用戶可以使用兩種方法在Atlas中管理元數據:
API:Atlas的所有功能都通過REST API向最終用戶公開,該API允許創建,更新和刪除類型和實體。它也是查詢和發現Atlas管理的類型和實體的主要機制。
Messaging:除了API,用戶還可以選擇使用基於Kafka的消息傳遞接口與Atlas集成。這對於將元數據對象傳達給Atlas以及從Atlas消耗元數據更改事件(用於構建應用程式)都是很有用的。如果有人希望使用與Atlas的鬆散耦合集成,以實現更好的可伸縮性,可靠性等,則該消息傳遞接口特別有用。Atlas使用Apache Kafka作為通知伺服器,用於掛鈎和元數據通知事件的下遊使用者之間的通信。這些事件由鉤子和Atlas編寫,涉及不同的Kafka主題。
Atlas支持與許多現成的元數據源集成。將來還將添加更多集成。當前,Atlas支持從以下來源提取和管理元數據:
集成意味著兩件事:Atlas原生定義了一些元數據模型來表示這些組件的對象。Atlas提供了一些組件,可以從這些組件(實時或在某些情況下為批處理模式)中提取元數據對象
APPS 應用領域Atlas管理的元數據被各種應用程式使用,以滿足許多治理用例。
Atlas Admin UI:此組件是一個基於Web的應用程式,允許數據管理員和科學家發現和注釋元數據。這裡最重要的是搜索界面和類似SQL的查詢語言,可用於查詢Atlas管理的元數據類型和對象。管理員界面使用Atlas的REST API來構建其功能。
基於標籤的策略:Apache Ranger是針對Hadoop生態系統的高級安全管理解決方案,與各種Hadoop組件廣泛集成。通過與Atlas集成,Ranger使安全管理員可以定義元數據驅動的安全策略以進行有效的管理。Ranger是Atlas通知的元數據更改事件的使用者。
3、Atlas的編譯Atlas這個軟體框架在官網http://atlas.apache.org/#/ 上面沒有給我們提供線程的二進位安裝包,只提供了源碼包,所以需要我們自己去對源碼包進行編譯,編譯源碼包的過程比較簡單,但是由於網絡原因等,會造成我們一直編譯不通過。所以我們知道如何編譯Atlas即可,不用自己動手去編譯(一般由於網絡原因,也會編譯不通過的)
第一步:安裝jdk注意:Atlas1.x及以上的版本的編譯,必須使用jdk版本高於jdk-8u151的版本,我們這裡選擇使用jdk-8u231這個版本即可,只要版本高於8u151的都行。
linux下面安裝jdk的步驟省略
第二步:安裝mavenmaven的版本儘量選擇高一點的版本,這裡選擇使用3.6.x的版本都行,具體我這裡使用的是3.6.2的版本來進行編譯,沒有問題
linux安裝maven步驟省略
第三步:下載源碼準備編譯我們這裡使用1.2.0這個版本來進行編譯,下載Atlas的源碼,然後解壓,進行編譯即可
統一linux的軟體下載以及軟體編譯目錄
定義軟體下載目錄
mkdir -p /kkb/soft
定義軟體安裝目錄
mkdir -p /kkb/install
下載Atlas的軟體安裝包
cd /kkb/soft
wget https://www.apache.org/dyn/closer.cgi/atlas/1.2.0/apache-atlas-1.2.0-sources.tar.gz
解壓源碼安裝包
tar -zxf apache-atlas-1.2.0-sources.tar.gz -C /kkb/install/
準備進行編譯
cd /kkb/install/apache-atlas-sources-1.2.0/
export MAVEN_OPTS="-Xms2g -Xmx2g"
使用以下命令進行編譯 表示使用外部的hbase與solr
mvn clean package -DskipTests -Pdist,external-hbase-solr
如果要使用Atlas內嵌的HBase與solr,那麼我們可以執行以下命令進行編譯
mvn clean package -DskipTests -Pdist,embedded-hbase-solr
編譯好的安裝包路徑位於
/kkb/install/apache-atlas-sources-1.2.0/distro/target這個路徑下,獲取到以下這個壓縮包即可
編譯過程中稍微注意下:需要下載一個包linux-x64-57_binding.node 這個包很難下載下來,我們可以給手動下載下來,然後放到編譯linux機器的的/root/.npm/node-sass/4.13.1 這個路徑下即可
4、Atlas的安裝與前置環境準備Atlas是用於做元數據管理的,可以用於來集成各種框架的元數據管理,例如可以用來集成hbase,集成solr,集成kafka,集成hive等,所以我們需要提前安裝好hbase,solr,kafka,hive等框架,我們這裡主要用於集成kafka,hbase,hive等這幾個框架。所以我們需要提前啟動kafka,啟動hbase,以及啟動hive的hiveserver2以及metastore服務等
安裝並啟動zookeeper服務安裝好zookeeper之後並啟動zookeeper
安裝並啟動hadoop服務安裝好hadoop,我們這裡使用的版本是CDH5.14.2這個版本
安裝啟動hbase服務安裝好hbase,並啟動hbase的服務,我們這裡使用的hbase的版本是CDH5.14.2
安裝啟動hive的服務安裝好hive
安裝並啟動好solr集群服務Atlas需要一個搜尋引擎服務作為Atlas的數據搜索服務,可以使用solrCloud或者使用Elasticsearch都行,我們這裡選擇使用SolrCloud作為Atlas的集群搜索服務,所以我們需要安裝SolrCloud服務,我們這裡選擇使用solr5.5.2這個版本
第一步:下載solr安裝包並解壓下載solr5.5.2安裝包,並上傳到node01伺服器的/kkb/soft路徑下
cd /kkb/soft
tar -zxf solr-5.5.2.tgz -C /kkb/install/第二步:修改solr配置文件node01執行以下命令修改solr配置文件
cd /kkb/install/solr-5.5.2/bin
vim solr.in.sh
ZK_HOST="node01:2181,node02:2181,node03:2181"
SOLR_HOST="node01"第三步:分發安裝包分發solr安裝包到node02與node03伺服器
node01執行以下命令分發solr安裝包到node02與node03伺服器
cd /kkb/install/
scp -r solr-5.5.2/ node02:$PWD
scp -r solr-5.5.2/ node03:$PWD第四步:單獨修改node02與node03配置文件node02執行以下命令修改 SOLR_HOST配置項
cd /kkb/install/solr-5.5.2/bin/
vim solr.in.sh
SOLR_HOST="node02"node03執行以下命令修改 SOLR_HOST配置項
cd /kkb/install/solr-5.5.2/bin/
vim solr.in.sh
SOLR_HOST="node03"第五步:啟動solr服務三臺機器啟動solr服務
三臺機器執行以下命令啟動solr服務
cd /kkb/install/solr-5.5.2/
bin/solr start第六步:瀏覽器頁面訪問瀏覽器頁面訪問
http://node01:8983/solr/#/
出現cloud選項,證明solr集群安裝成功
安裝Atlas集成其他框架Atlas集成HBase服務第一步:上傳壓縮包並解壓上傳Atlas編譯之後的安裝包並進行解壓
將Atlas的安裝包上傳到node03伺服器的/kkb/soft路徑下,然後進行解壓
cd /kkb/soft
tar -zxf apache-atlas-1.2.0-bin.tar.gz -C /kkb/install/第二步:修改atlas-application.properties 更改Atlas存儲數據主機名修改Atlas的存儲數據主機名
node03執行以下命令修改Atlas連接zk的地址
cd /kkb/install/apache-atlas-1.2.0/conf
vim atlas-application.properties
atlas.graph.storage.hostname=node01:2181,node02:2181,node03:2181第三步:修改Atlas與HBase集成文件修改Atlas與HBase的集成配置文件
node03執行以下命令,修改Atlas連接hbase的配置文件夾路徑
直接通過連結的方式即可,將hbase的配置文件夾conf目錄,連結到Atlas對應hbase的配置文件夾下
ln -s /kkb/install/hbase-1.2.0-cdh5.14.2/conf /kkb/install/apache-atlas-1.2.0/conf/hbase/conf
在Atlas的conf目錄下的hbase文件夾下面創建一個連接文件夾,連接到hbase的conf配置文件第四步:修改atlas-env.sh配置文件修改atlas-env.sh添加hbase配置路徑
node03執行以下命令修改JAVA_HOME以及修改HBASE_CONF_DIR路徑
修改atlas-env.sh 添加hbase的配置文件的路徑
cd /kkb/install/apache-atlas-1.2.0/conf/
vim atlas-env.sh
#修改java環境變量
export JAVA_HOME=/kkb/install/jdk1.8.0_141
#添加這一行配置項
export HBASE_CONF_DIR=/kkb/install/apache-atlas-1.2.0/conf/hbase/confAtlas集成Solr服務第一步:修改Atlas配置文件 atlas-application.propertiesnode03執行以下命令修改Atlas的配置文件 atlas-application.properties
cd /kkb/install/apache-atlas-1.2.0/conf/
vim atlas-application.properties
atlas.graph.index.search.backend=solr
atlas.graph.index.search.solr.zookeeper-url=node01:2181,node02:2181,node03:2181
atlas.graph.index.search.solr.mode=http
atlas.graph.index.search.solr.http-urls=http://node01:8983/solr
第二步:拷貝atlas配置文件到solr裡面去將Atlas自帶的solr配置文件拷貝到node03伺服器的Solr安裝目錄下
cp -r /kkb/install/apache-atlas-1.2.0/conf/solr /kkb/install/solr-5.5.2/
重命名文件夾名稱
cd /kkb/install/solr-5.5.2/
mv solr/ atlas_conf第三步:同步拷貝後的配置文件到node01與node02同步node01伺服器的配置文件到node01和node02
node01執行以下命令進行同步
cd /kkb/install/solr-5.5.2/
scp -r atlas_conf/ node01:$PWD
scp -r atlas_conf/ node02:$PWD第四步:創建solr的collection在solrCloud模式下,啟動solr,並創建collection
node01執行以下命令來創建collection
cd /kkb/install/solr-5.5.2/
bin/solr create -c vertex_index -d /kkb/install/solr-5.5.2/atlas_conf/ -shards 3 -replicationFactor 2
bin/solr create -c edge_index -d /kkb/install/solr-5.5.2/atlas_conf -shards 3 -replicationFactor 2
bin/solr create -c fulltext_index -d /kkb/install/solr-5.5.2/atlas_conf -shards 3 -replicationFactor 2
-shards 3:表示該集合分片數為3
-replicationFactor 2:表示每個分片數都有2個備份
vertex_index、edge_index、fulltext_index:表示集合名稱
注意:如果需要刪除vertex_index、edge_index、fulltext_index等collection可以執行如下命令。
cd /kkb/install/solr-5.5.2/
bin/solr delete -c ${collection_name}驗證創建collection成功
瀏覽器頁面訪問http://node01:8983/solr/#/~cloud看到以下效果證明創建成功
Atlas集成Kafka服務第一步:修改Atlas配置文件 atlas-application.properties修改Atlas配置文件atlas-application.properties
node03執行以下命令修改配置文件內容
cd /kkb/install/apache-atlas-1.2.0/conf
vim atlas-application.properties
atlas.notification.embedded=false
atlas.kafka.zookeeper.connect=node01:2181,node02:2181,node03:2181
atlas.kafka.bootstrap.servers=node01:9092,node02:9092,node03:9092
atlas.kafka.zookeeper.session.timeout.ms=4000
atlas.kafka.zookeeper.connection.timeout.ms=2000
atlas.kafka.enable.auto.commit=true第二步:創建kafka的topic創建kafka的topic
Atlas與kafka集成需要創建兩個topic,這兩個topic的名字配置在atlas-application.properties這個配置文件裡面
atlas.notification.topics=ATLAS_HOOK,ATLAS_ENTITIESnode01執行以下命令創建這兩個topic
cd /kkb/install/kafka_2.11-1.1.0/
bin/kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181 --create --replication-factor 3 --partitions 3 --topic ATLAS_HOOK
bin/kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181 --create --replication-factor 3 --partitions 3 --topic ATLAS_ENTITIESAtlas集成hive服務第一步:修改Atlas配置文件 atlas-application.properties修改Atlas配置文件atlas-application.properties
node03執行以下命令修改配置文件內容
cd /kkb/install/apache-atlas-1.2.0/conf
vim atlas-application.properties
#手動添加以下配置,這些配置在配置文件裡面沒有,需要我們自己手動添加
######### Hive Hook Configs #######
atlas.hook.hive.synchronous=false
atlas.hook.hive.numRetries=3
atlas.hook.hive.queueSize=10000
atlas.cluster.name=primary
第二步:添加配置文件放到jar包裡面去將atlas-application.properties配置文件添加到atlas-plugin-classloader-1.2.0.jar包
node03執行以下命令,將atlas-application.properties這個配置文件添加到atlas-plugin-classloader-1.2.0.jar這個jar包
sudo yum -y install zip
cd /kkb/install/apache-atlas-1.2.0/conf
zip -u /kkb/install/apache-atlas-1.2.0/hook/hive/atlas-plugin-classloader-1.2.0.jar atlas-application.properties第三步:拷貝配置文件到hive的conf目錄下node03執行以下命令,將atlas-application.properties配置文件,拷貝到hive的conf目錄下
node01執行以下命令進行拷貝
cd /kkb/install/apache-atlas-1.2.0/conf/
cp atlas-application.properties /kkb/install/hive-1.1.0-cdh5.14.2/conf/
第四步:修改hive-env.sh配置外部jar包node03執行以下命令修改hive-env.sh添加外部jar包
cd /kkb/install/hive-1.1.0-cdh5.14.2/conf
vim hive-env.sh
export HIVE_AUX_JARS_PATH=/kkb/install/apache-atlas-1.2.0/hook/hive第五步:修改hive-site.xml修改hive-site.xml配置文件
node03執行以下命令修改hive的配置文件hive-site.xml
cd /kkb/install/hive-1.1.0-cdh5.14.2/conf
vim hive-site.xml
<property>
<name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook,org.apache.hadoop.hive.ql.hooks.LineageLogger</value>
</property>Atlas其他配置選項第一步:修改Atlas的主機名 node03執行以下命令,修改配置文件atlas-application.properties
cd /kkb/install/apache-atlas-1.2.0/conf/
vim atlas-application.properties
atlas.rest.address=http://node03:21000
atlas.audit.hbase.zookeeper.quorum=node01:2181,node02:2181,node03:2181第二步:修改Atlas的日誌配置文件node03執行以下命令修改atlas的日誌服務配置文件atlas-log4j.xml
cd /kkb/install/apache-atlas-1.2.0/conf
vim atlas-log4j.xml
以下配置在文件當中已經存在,只不過被注釋掉了,直接打開即可
<appender name="perf_appender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${atlas.log.dir}/atlas_perf.log" />
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d|%t|%m%n" />
</layout>
</appender>
<logger name="org.apache.atlas.perf" additivity="false">
<level value="debug" />
<appender-ref ref="perf_appender" />
</logger>
5、Atlas啟動服務並訪問頁面node03執行以下命令啟動Atlas的服務
cd /kkb/install/apache-atlas-1.2.0
bin/atlas_start.py瀏覽器頁面訪問:
http://node03:21000/#!/search
用戶名:admin
密碼:admin
6、導入hive元數據到Atlas當中來將hive元數據導入到Atlas當中來進行管理
第一步:node03配置hive環境變量node03執行以下命令,配置hive的環境變量
sudo vim /etc/profile
export HIVE_HOME=/kkb/install/hive-1.1.0-cdh5.14.2
export PATH=:$HIVE_HOME/bin:$PATH
source /etc/profile第二步:驗證hive功能正常node03執行以下命令進入hive客戶端,如果hive功能正常即可
[hadoop@node03 hive]$ cd /kkb/install/hive-1.1.0-cdh5.14.2/
[hadoop@node03 hive-1.1.0-cdh5.14.2]$ hive
hive (default)> show databases;第三步:導入hive元數據到atlasnode03執行以下命令導入hive元數據
cd /kkb/install/apache-atlas-1.2.0/
bin/import-hive.sh導入過程中會報以下錯誤
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/jaxrs/json/JacksonJaxbJsonProvider
at org.apache.atlas.AtlasBaseClient.getClient(AtlasBaseClient.java:270)
at org.apache.atlas.AtlasBaseClient.initializeState(AtlasBaseClient.java:453)
at org.apache.atlas.AtlasBaseClient.initializeState(AtlasBaseClient.java:448)
at org.apache.atlas.AtlasBaseClient.<init>(AtlasBaseClient.java:132)
at org.apache.atlas.AtlasClientV2.<init>(AtlasClientV2.java:82)
at org.apache.atlas.hive.bridge.HiveMetaStoreBridge.main(HiveMetaStoreBridge.java:131)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
第四步:拷貝jar包解決以上錯誤缺少jar包,導致以上錯誤,需要我們手動拷貝幾個jar包到atlas的hook目錄下即可
cd /kkb/install/apache-atlas-1.2.0/server/webapp/atlas/WEB-INF/lib
cp jackson-jaxrs-base-2.9.9.jar jackson-jaxrs-json-provider-2.9.9.jar jackson-module-jaxb-annotations-2.9.9.jar /kkb/install/apache-atlas-1.2.0/hook/hive/atlas-hive-plugin-impl/
第五步:重新導入元數據重新導入hive元數據信息到atlas當中來
cd /kkb/install/apache-atlas-1.2.0/
bin/import-hive.sh
出現以下信息,證明導入成功
Using Hive configuration directory [/kkb/install/hive-1.1.0-cdh5.14.2/conf]
Log file for import is /kkb/install/apache-atlas-1.2.0/logs/import-hive.log
log4j:WARN No such property [maxFileSize] in org.apache.log4j.PatternLayout.
log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.PatternLayout.
Enter username for atlas :- admin
Enter password for atlas :-
Hive Meta Data imported successfully!!!
第六步:瀏覽器頁面訪問瀏覽元數據信息直接瀏覽器頁面訪問
http://node03:21000/#!/search/searchResult?type=hive_db&searchType=basic
就可以看到我們的元數據信息了
7、使用azkaban來實現我們的任務調度並查看血緣管理第一步:在node03伺服器上面創建mysql資料庫表 CREATE DATABASE /*!32312 IF NOT EXISTS*/`game_center2` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `game_center2`;
/*Table structure for table `res_active_users` */
DROP TABLE IF EXISTS `res_active_users`;
CREATE TABLE `res_active_users` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`plat_id` VARCHAR(16) DEFAULT NULL,
`channel_id` VARCHAR(16) DEFAULT NULL,
`event_date` VARCHAR(16) DEFAULT NULL,
`new_users` VARCHAR(16) DEFAULT NULL,
`old_users` VARCHAR(16) DEFAULT NULL,
`all_users` VARCHAR(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8;
/*Table structure for table `res_channel_num` */
DROP TABLE IF EXISTS `res_channel_num`;
CREATE TABLE `res_channel_num` (
`login_date` VARCHAR(64) DEFAULT NULL,
`channel_id` VARCHAR(64) DEFAULT NULL,
`device_num` VARCHAR(64) DEFAULT NULL,
`reg_user` VARCHAR(64) DEFAULT NULL,
`active_users` VARCHAR(64) DEFAULT NULL,
`play_once_users` VARCHAR(64) DEFAULT NULL,
`pay_users` VARCHAR(64) DEFAULT NULL,
`pay_user` VARCHAR(64) DEFAULT NULL,
`pay_money` VARCHAR(64) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
/*Table structure for table `res_channel_num_temp` */
DROP TABLE IF EXISTS `res_channel_num_temp`;
CREATE TABLE `res_channel_num_temp` (
`login_date` VARCHAR(64) DEFAULT NULL,
`channel_id` VARCHAR(64) DEFAULT NULL,
`device_num` VARCHAR(64) DEFAULT NULL,
`reg_user` VARCHAR(64) DEFAULT NULL,
`active_users` VARCHAR(64) DEFAULT NULL,
`play_once_users` VARCHAR(64) DEFAULT NULL,
`pay_users` VARCHAR(64) DEFAULT NULL,
`pay_user` VARCHAR(64) DEFAULT NULL,
`pay_money` VARCHAR(64) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
第二步:將我們的數據上傳將我們需要執行的數據上傳到node03伺服器的/kkb/datas/gamecenter 這個路徑下
第三步:使用azkaban執行調度任務使用azkaban來調度執行我們的任務
第四步:atlas當中查看血緣關係查看表之間的血緣關係
查看欄位之間的血緣關係