1. 安装
在安装完ambari平台后,可以在可添加服务中选择atlas安装,其它相关安装事项参见https://blog.csdn.net/g511266804/article/details/106489935/
2. UI界面
atlas提供了可视化的界面用于查询某一type下的所有实体、血缘关系等,如type为hive_table的实体共有123个,点击查找后,可以选择一个实体查看其定义信息、血缘关系等。血缘关系通常定义于process类别中。
3. api调用
- atlas提供了丰富的api接口供开发人员使用,主要包括查询(实体、血缘)与创建(实体、血缘)两大功能,部分血缘关系atlas可自动获取,例如在hive数据库中使用如下sql命令create table bbb1 as select * from bbb limit 10,此时atlas将自动获取到实体bbb、bbb1的属性信息,以及两者的关系,即该sql语句。
- 当部分表的关系是通过某些代码处理获取的时候,可以通过api的post方法将关系提交到atlas中
import json
import requests
from src.config.load_config_map import get_config_conf
class AtlasAction(object):
def __init__(self):
self.config_map = get_config_conf()
self.ip = self.config_map["atlas_ip"]
self.port = self.config_map["atlas_port"]
self.user = self.config_map["atlas_user"]
self.password = self.config_map["atlas_password"]
# 查询type为:hive_table下的所有实体
self.url_hive_table = \
'http://%s:%s/api/atlas/v2/search/basic?typeName=hive_table' \
% (self.ip, self.port)
# 根据上述查询获取的实体的guid查询该实体的血缘关系
self.url_lineage = 'http://%s:%s/api/atlas/v2/lineage/%s'
self.url_table = 'http://%s:%s/api/atlas/v2/search/basic?' \
'query=%s&typeName=%s'
self.url_add_entity = 'http://%s:%s/api/atlas/v2/entity'
self.url_add_lineage = 'http://%s:%s/api/atlas/v2/entity/bulk'
self.url_define_entity = 'http://%s:%s/api/atlas/v2/entity/bulk?' \
'minExtInfo=yes&guid=%s'
def get_type_entity(self):
"""
获取实体信息
"""
req = requests.get(self.url_hive_table,
auth=(self.user, self.password), verify=False)
data = json.loads(req.text)
return data
def get_one_table(self, table_name, type_name):
"""
根据name查询某张表
"""
req = requests.get(self.url_table % (self.ip, self.port,
table_name, type_name),
auth=(self.user, self.password), verify=False)
data = json.loads(req.text)
return data
def get_lineage_info(self, guid):
"""
查询某一实体的血缘
"""
req = requests.get(self.url_lineage % (self.ip, self.port, guid),
auth=(self.user, self.password), verify=False)
data = json.loads(req.text)
return data
def get_entity_define_info(self, guid):
"""
查询某个实体的定义信息
"""
req = requests.get(self.url_define_entity % (self.ip, self.port, guid),
auth=(self.user, self.password), verify=False)
data = json.loads(req.text)
return data
def create_one_entity(self, data_info):
"""
创建某一实体信息
"""
req = requests.post(self.url_add_entity % (self.ip, self.port),
auth=(self.user, self.password), verify=False,
json=data_info)
status_code = req.status_code
return_data = None
if 200 == status_code:
return_data = json.loads(req.text)
return return_data
def create_one_lineage(self, data_info):
"""
创建两个实体之间的血缘关系,需要获取两个实体的guid信息
"""
req = requests.post(self.url_add_lineage % (self.ip, self.port),
auth=(self.user, self.password), verify=False,
json=data_info)
status_code = req.status_code
return_data = None
if 200 == status_code:
return_data = json.loads(req.text)
return return_data