其他分享
首页 > 其他分享> > DataHub: 现代数据栈的元数据平台的入门体验及填坑记录

DataHub: 现代数据栈的元数据平台的入门体验及填坑记录

作者:互联网

数据治理平台系统文章:
DataHub: 现代数据栈的元数据平台系列之一

什么是datahub

DataHub是为现代数据栈【Modern Data Stack】构建的第三代元数据平台,支持数据发现、协作、治理和端到端可观察性。DataHub采用模型优先的理念,专注于解锁不同工具和系统之间的互操作性。

DataHub架构图

通过Datahub的架构图可以清晰的了解Datahub的架构组成。
主要分为三部分:

DataHub组成部分

Metadata Store

Metadata Models

Ingestion Framework

Ingestion框架是一个模块化的、可扩展的Python库,用于从外部源系统(如kafka、mysql)提取元数据,将其转换为DataHub的元数据模型,并通过Kafka或直接使用元数据存储Rest API将其写入DataHub。

元数据Ingestion Plugin支持的列表详见metadata-ingestion plugin,针对mysql、hive、kafka、postgre等,还可以通过sqlalchemy支持所有jdbc源

使用示例:datahub ingest -c mysql_to_datahub_rest.yml

GraphQL API

GraphQL API提供了一个强类型的、面向实体的API,它使得与构成元数据图的实体的交互变得简单,包括添加和删除标签、所有者、链接和更多的元数据实体!
如何使用参见GraphQL API getting-started

User Interface

DataHub提供了一个React UI,包括一组不断发展的特性,使发现、管理和调试你的数据资产变得简单和愉快。
提供的功能包括如下:

快速安装部署

准备安装环境

需要提前安装 docker,jq,docker-compose。同时保证系统的python版本为 Python 3.6+。

针对系统的要求至少满足: 2 CPUs, 8GB RAM, 2GB Swap area, and 10GB disk space.

安装与启动datahub

安装

pip install --upgrade pip wheel setuptools
pip uninstall datahub acryl-datahub || true
pip install --upgrade acryl-datahub

datahub version

如果能正常显示datahub的版本信息,则说明安装成功!
在这里插入图片描述

启动

因为要下载docker image,所以会经过漫长的下载过程,需要耐心等待。本人安装时,主要碰到如下错误:

datahub docker quickstart

摄取元数据到Datahub

元数据摄取使用的是插件架构,你仅需要安装所需的插件。

安装摄取元数据插件

摄取MySQL源的元数据,需要安装如下插件:
pip install 'acryl-datahub[mysql]'

检查安装情况:datahub check plugins 可以看到mysql 后面的 (disabled) 没有了,
在这里插入图片描述

配置摄取的recipe

recipe一个配置文件,它告诉摄取脚本从哪里提取数据(源)和把数据放在哪里(接收),示例如下:
`vim mysql_to_datahub_rest.yml``

source:
    type: mysql
    config:
        host_port: '172.25.21.123:3306'
        username: videoweb
        password: suntek
        database: md_data_dictionary
        include_views: false
        profiling:
            enabled: false
transformers:
    -
        type: simple_add_dataset_tags
        config:
            tag_urns:
                - 'urn:li:tag:172.25.21.123'
sink:
    type: datahub-rest
    config:
        server: 'http://172.25.21.22:8080'

运行元数据摄取

datahub ingest -c mysql_to_datahub_rest.yml

运行后,会打元数据摄取报告,如下:

Source (mysql) report:
{'entities_profiled': 0,
 'failures': {},
 'filtered': [],
 'query_combiner': None,
 'soft_deleted_stale_entities': [],
 'tables_scanned': 1836,
 'views_scanned': 0,
 'warnings': {},
 'workunit_ids': ['zyt_test.person',
 				  ......
                  'zyt_test.user'],
 'workunits_produced': 1836}
Sink (datahub-rest) report:
{'downstream_end_time': datetime.datetime(2022, 1, 28, 11, 14, 49, 4127),
 'downstream_start_time': datetime.datetime(2022, 1, 28, 11, 14, 17, 910894),
 'downstream_total_latency_in_seconds': 31.093233,
 'failures': [],
 'records_written': 1836,
 'warnings': []}

Pipeline finished successfully

导入样例数据

摄取样例元数据,请从终端运行以下CLI命令:datahub docker ingest-sample-data

运行结果如下:

Source (file) report:
{'failures': {},
 'warnings': {},
 'workunit_ids': ['file:///tmp/tmpnpyfcgho.json:0',
                  'file:///tmp/tmpnpyfcgho.json:1',
                  'file:///tmp/tmpnpyfcgho.json:2',
				  ......
                  'file:///tmp/tmpnpyfcgho.json:83',
                  'file:///tmp/tmpnpyfcgho.json:84',
                  'file:///tmp/tmpnpyfcgho.json:85'],
 'workunits_produced': 86}
Sink (datahub-rest) report:
{'downstream_end_time': datetime.datetime(2022, 1, 28, 12, 55, 37, 412504),
 'downstream_start_time': datetime.datetime(2022, 1, 28, 12, 55, 36, 319103),
 'downstream_total_latency_in_seconds': 1.093401,
 'failures': [],
 'records_written': 86,
 'warnings': []}

Pipeline finished successfully

查看元数据

在摄取元数据后,刷新datahub页面,能正常的查看元数据信息:
根据Tag查看元数据
在这里插入图片描述

在这里插入图片描述

填坑记录

port冲突导致一些服务不能启动

datahub采用docker-compose、docker安装时,默认会占用如下端口,如果被占用,会导致相应的服务不能启动,导致安装失败

通过如下命令,查看docker使用port的情况
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}"
在这里插入图片描述

安装acryl-datahub[mysql]时报错

在使用pip安装acryl-datahub[mysql] ingestion插件时,最后报:Cannot uninstall ‘ruamel-yaml’. It is a distutils installed project
安装命令如下:
pip install 'acryl-datahub[mysql]'

解决方案参见: fail-to-install-great-expectation-error-cannot-uninstall-ruamel-yaml
将安装命令调整为:pip install 'acryl-datahub[mysql]' --ignore-installed ruamel.yaml

执行datahub docker ingest-sample-data报错

解决步骤如下:

def ingest_sample_data(path: Optional[str]) -> None:
    """Ingest sample data into a running DataHub instance."""

    if path is None:
        click.echo("Downloading sample data...")
        with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as tmp_file:
            path = str(pathlib.Path(tmp_file.name))

            # Download the bootstrap MCE file from GitHub.
            mce_json_download_response = requests.get(GITHUB_BOOTSTRAP_MCES_URL)
            mce_json_download_response.raise_for_status()
            tmp_file.write(mce_json_download_response.content)
        click.echo(f"Downloaded to {path}")

    # Verify that docker is up.
    issues = check_local_docker_containers()

在这里插入图片描述

标签:DataHub,安装,填坑,mysql,datahub,数据,docker
来源: https://blog.csdn.net/penriver/article/details/122726388