apache atlas 数据治理

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

猜你喜欢

转载自blog.csdn.net/shlhhy/article/details/115459436