四、整体架构
要想学习好Datahub,就必须了解Datahub的整体架构。
通过Datahub的架构图可以清晰的了解Datahub的架构组成。
DataHub 的架构有三个主要部分。
前端为 Datahub frontend作为前端的页面展示。
丰富的前端展示让Datahub 拥有了支撑大多数功能的能力。其前端基于React框架研发,对于有二次研发打算的公司,要注意此技术栈的匹配性。
后端 Datahub serving来提供后端的存储服务。
Datahub 的后端开发语言为Python,存储基于ES或者Neo4J。
而Datahub ingestion则用于抽取元数据信息。
Datahub 提供了基于API元数据主动拉取方式,和基于Kafka的实时元数据获取方式。这对于元数据的获取非常的灵活。
这三部分也是我们部署过程中主要关注的点,下面我们就从零开始部署Datahub,并获取一个数据库的元数据信息。
五、快速安装部署
部署datahub对于系统有一定的要求。本文基于CentOS7进行安装。
要先安装好 docker,jq,docker-compose。同时保证系统的python版本为 Python 3.6+。
5.1、安装docker,docker-compose,jq
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
可以通过yum的方式快速的安装docker
yum -y install docker
完成后通过docker -v来查看版本情况。
# docker -v Docker version 1.13.1, build 7d71120/1.13.1
通过下面的命令可以启停docker
systemctl start docker // 启动docker systemctl stop docker // 关闭docker
随后安装Docker Compose
Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
修改执行权限
sudo chmod +x /usr/local/bin/docker-compose
建立软连接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看版本,验证安装成功。
docker-compose --version docker-compose version 1.29.2, build 5becea4c
安装jq
首先安装EPEL源,企业版 Linux 附加软件包(以下简称 EPEL)是一个 Fedora 特别兴趣小组,用以创建、维护以及管理针对企业版 Linux 的一个高质量附加软件包集,面向的对象包括但不限于 红帽企业版 Linux (RHEL)、 CentOS、Scientific Linux (SL)、Oracle Linux (OL) 。
EPEL 的软件包通常不会与企业版 Linux 官方源中的软件包发生冲突,或者互相替换文件。EPEL 项目与 Fedora 基本一致,包含完整的构建系统、升级管理器、镜像管理器等等。
安装EPEL源
yum install epel-release
安装完EPEL源后,可以查看下jq包是否存在:
yum list jq
安装jq:
yum install jq
5.2、安装python3
安装依赖
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
下载安装包
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz tar -zxvf Python-3.8.3.tgz
编译安装
mkdir /usr/local/python3 cd Python-3.8.3 ./configure --prefix=/usr/local/python3 make && make install
修改系统默认python指向
rm -rf /usr/bin/python ln -s /usr/local/python3/bin/python3 /usr/bin/python
修改系统默认pip指向
rm -rf /usr/bin/pip ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
验证
python -V
修复yum
python3会导致yum不能正常使用
vi /usr/bin/yum 把 #! /usr/bin/python 修改为 #! /usr/bin/python2 vi /usr/libexec/urlgrabber-ext-down 把 #! /usr/bin/python 修改为 #! /usr/bin/python2 vi /usr/bin/yum-config-manager #!/usr/bin/python 改为 #!/usr/bin/python2 没有的不用修改
5.3、安装与启动datahub
首先升级pip
python3 -m pip install --upgrade pip wheel setuptools
需要看到下面成功的返回。
Attempting uninstall: setuptools Found existing installation: setuptools 57.4.0 Uninstalling setuptools-57.4.0: Successfully uninstalled setuptools-57.4.0 Attempting uninstall: pip Found existing installation: pip 21.2.3 Uninstalling pip-21.2.3: Successfully uninstalled pip-21.2.3
检查环境
python3 -m pip uninstall datahub acryl-datahub || true # sanity check - ok if it fails
收到这样的提示说明没有问题。
WARNING: Skipping datahub as it is not installed. WARNING: Skipping acryl-datahub as it is not installed.
安装datahub,此步骤时间较长,耐心等待。
python3 -m pip install --upgrade acryl-datahub
收到这样的提示说明安装成功。
Successfully installed PyYAML-6.0 acryl-datahub-0.8.20.0 avro-1.11.0 avro-gen3-0.7.1 backports.zoneinfo-0.2.1 certifi-2021.10.8 charset-normalizer-2.0.9 click-8.0.3 click-default-group-1.2.2 docker-5.0.3 entrypoints-0.3 expandvars-0.7.0 idna-3.3 mypy-extensions-0.4.3 progressbar2-3.55.0 pydantic-1.8.2 python-dateutil-2.8.2 python-utils-2.6.3 pytz-2021.3 pytz-deprecation-shim-0.1.0.post0 requests-2.26.0 stackprinter-0.2.5 tabulate-0.8.9 toml-0.10.2 typing-extensions-3.10.0.2 typing-inspect-0.7.1 tzdata-2021.5 tzlocal-4.1 urllib3-1.26.7 websocket-client-1.2.3
最后我们看到datahub的版本情况。
[root@node01 bin]# python3 -m datahub version DataHub CLI version: 0.8.20.0 Python version: 3.8.3 (default, Aug 10 2021, 14:25:56) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
随后启动datahub
python3 -m datahub docker quickstart
会经过漫长的下载过程,耐心等待。
开始启动,注意观察报错情况。如果网速不好,需要多执行几次。
如果可以看到如下显示,证明安装成功了。
访问ip:9002 输入 datahub datahub 登录
六、元数据信息的获取
登录到Datahub以后,会有一个友好的welcome页面。来提示如何进行元数据的抓取。
元数据摄入使用的是插件架构,你仅需要安装所需的插件。
摄入源有很多
插件名称 安装命令 提供功能 mysql pip install 'acryl-datahub[mysql]' MySQL source
这里安装两个插件:
源:mysql
汇:datahub-rest
pip install 'acryl-datahub[mysql]'
安装的包较多,得到如下提示证明安装成功。
Installing collected packages: zipp, traitlets, pyrsistent, importlib-resources, attrs, wcwidth, tornado, pyzmq, pyparsing, pycparser, ptyprocess, parso, nest-asyncio, jupyter-core, jsonschema, ipython-genutils, webencodings, pygments, prompt-toolkit, pickleshare, pexpect, packaging, nbformat, matplotlib-inline, MarkupSafe, jupyter-client, jedi, decorator, cffi, backcall, testpath, pandocfilters, nbclient, mistune, jupyterlab-pygments, jinja2, ipython, defusedxml, debugpy, bleach, argon2-cffi-bindings, terminado, Send2Trash, prometheus-client, nbconvert, ipykernel, argon2-cffi, numpy, notebook, widgetsnbextension, toolz, ruamel.yaml.clib, pandas, jupyterlab-widgets, jsonpointer, tqdm, termcolor, scipy, ruamel.yaml, jsonpatch, ipywidgets, importlib-metadata, altair, sqlalchemy, pymysql, greenlet, great-expectations Successfully installed MarkupSafe-2.0.1 Send2Trash-1.8.0 altair-4.1.0 argon2-cffi-21.3.0 argon2-cffi-bindings-21.2.0 attrs-21.3.0 backcall-0.2.0 bleach-4.1.0 cffi-1.15.0 debugpy-1.5.1 decorator-5.1.0 defusedxml-0.7.1 great-expectations-0.13.49 greenlet-1.1.2 importlib-metadata-4.10.0 importlib-resources-5.4.0 ipykernel-6.6.0 ipython-7.30.1 ipython-genutils-0.2.0 ipywidgets-7.6.5 jedi-0.18.1 jinja2-3.0.3 jsonpatch-1.32 jsonpointer-2.2 jsonschema-4.3.2 jupyter-client-7.1.0 jupyter-core-4.9.1 jupyterlab-pygments-0.1.2 jupyterlab-widgets-1.0.2 matplotlib-inline-0.1.3 mistune-0.8.4 nbclient-0.5.9 nbconvert-6.3.0 nbformat-5.1.3 nest-asyncio-1.5.4 notebook-6.4.6 numpy-1.21.5 packaging-21.3 pandas-1.3.5 pandocfilters-1.5.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 prometheus-client-0.12.0 prompt-toolkit-3.0.24 ptyprocess-0.7.0 pycparser-2.21 pygments-2.10.0 pymysql-1.0.2 pyparsing-2.4.7 pyrsistent-0.18.0 pyzmq-22.3.0 ruamel.yaml-0.17.19 ruamel.yaml.clib-0.2.6 scipy-1.7.3 sqlalchemy-1.3.24 termcolor-1.1.0 terminado-0.12.1 testpath-0.5.0 toolz-0.11.2 tornado-6.1 tqdm-4.62.3 traitlets-5.1.1 wcwidth-0.2.5 webencodings-0.5.1 widgetsnbextension-3.5.2 zipp-3.6.0
随后检查安装的插件情况,Datahub是插件式的安装方式。可以检查数据源获取插件Source,转换插件transformer,获取插件Sink。
python3 -m datahub check plugins
可见Mysql插件和Rest接口插件已经安装,下面配置从 MySQL 获取元数据使用 Rest 接口将数据存储 DataHub。
vim mysql_to_datahub_rest.yml # A sample recipe that pulls metadata from MySQL and puts it into DataHub # using the Rest API. source: type: mysql config: username: root password: 123456 database: cnarea20200630 transformers: - type: "fully-qualified-class-name-of-transformer" config: some_property: "some.value" sink: type: "datahub-rest" config: server: "http://ip:8080" # datahub ingest -c mysql_to_datahub_rest.yml
随后是漫长的数据获取过程。
得到如下提示后,证明获取成功。
{datahub.cli.ingest_cli:83} - Finished metadata ingestion
Sink (datahub-rest) report: {'records_written': 356, 'warnings': [], 'failures': [], 'downstream_start_time': datetime.datetime(2021, 12, 28, 21, 8, 37, 402989), 'downstream_end_time': datetime.datetime(2021, 12, 28, 21, 13, 10, 757687), 'downstream_total_latency_in_seconds': 273.354698} Pipeline finished with warnings
在此刷新datahub页面,mysql的元数据信息已经成功获取。
进入表中查看元数据的情况,表字段信息。
在之前展示元数据分析页也已经有了详细的展示。
至此我们完成了Datahub从0到1的搭建,在整个过程中除了简单的安装配置以外,基本没有进行任何代码研发工作。但是datahub还有更多的功能,比如对数据血缘的获取,在元数据获取的过程中进行转换操作等等。在未来的文章中也会进行更新这些功能的教程。