目录

一 datahub安装

1.1 datahub在线安装

1.1.1 docker在线安装

1.1.2 python在线安装

1.1.3 datahub在线安装并启动

1.2 datahub离线安装

1.2.1 docker离线安装

1.2.2 python离线安装

1.2.3 datahub离线安装并启动

1.3 本地环境替换datahub docker

1.3 安装过程中可能遇到的问题

1.3.1 python3安装后导致yum不能正常使用

1.3.2 python控制台中按backspace返回^H

二 datahub使用

2.1 使用命令摄取

2.1.1  摄取前准备工作

2.1.2 编辑yml文件执行摄取操作(未完)

2.2 datahub命令详解

2.2.1 check

 2.3 摄取调度中心

2.3.1 mysql源摄取流程

2.4 Settings

2.4.1 Access Tokens

2.4.2 Users & Groups

2.4.3 Permissions

2.4.4 MyViews

2.5管理中心

2.5.1 Govern—Glossary

2.5.2 Govern—Domains

2.6 Analytics

2.7 数据血缘

2.7.1 UI手动创建

2.7 后续升级

2.8 新用户创建

2.9 接口调用

三 datahub原理与支持

3.1支持的数据源

3.2 DataSets元数据模型

优点:

缺点:

3.x datahub相关容器研究

3.x.x datahub的元数据库


一 datahub安装

1.1 datahub在线安装

1.1.1 docker在线安装

(1)下载docker-ce.repo文件

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(2)注意如果下载配置过python3,yum-config-manager命令可能会报错,

记得修改/usr/bin/yum-config-manager开头到python2

这是我的软连接路径,具体情况依照个人的配置

(3)按照官网文档,需要安装docker和dockerCompose v2!!! ,实测启动后内存占用4G多一点,最低配置6G内存应该可以。

(4)下载docker-ce、docker

① yum下载docker

yum install docker-ce docker –y

② 开启服务

systemctl start docker

③ 设置开机自启

systemctl enable docker

(5)下载docker-compose

注意!!务必使用以下方法或去github(Releases · docker/compose (github.com)下载docker-compose 2.x,没试过其余版本但2.16以上绝对可以。yum install下载的版本为docker-compose 1.x,运行会报非常多错,一开始没注意走了很多弯路,

① curl-SL下载命令

curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose

② chmod +x赋予运行权限

③到/usr/bin下创建软链接

④ docker-compose version查看安装是否成功

(6)docker运行hello-world检查是否安装成功

docker run hello-world

1.1.2 python安装

 

1.1.3 datahub在线安装并启动

不知是不是老虚拟机的缘故,网上别的教程里要求的python库我都没有特地去安,只按官网要求安装库就可以运行了

(1)更新pip、wheel、setuptools工具

python3 -m pip install --upgrade pip wheel setuptools

(2)下载acryl-datahub
python3 -m pip install --upgrade acryl-datahub

(3)datahub version查看是否成功

如果看到“command not found”,尝试运行前缀为python3 -m的cli命令,例如python3 -m datahub version,注意数据中心CLI不支持 Python 2.x。

(4)快速启动datahub

datahub docker quickstart

直接执行quickstart可能会报错:

ConnectionError: HTTPSConnectionPool(host='raw.githubusercontent.com', port=443): Max retries exceeded with url: /linkedin/datahub/master/docker/quickstart/docker-compose-without-neo4j.quickstart.yml (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fe29e5fe760>: Failed to establish a new connection: [Errno -2] Name or service not known'))

这个网址国内有可能连不上,不过命令的原理就是到raw.githubusercontent.com下载docker-compose-without-neo4j.quickstart.yml,可以在github上下载这个yml到本地

然后使用命令:

datahub docker quickstart --quickstart-compose-file ~/docker-compose-without-neo4j.quickstart.yml

源码可以不整个git clone,文件很大加上github下载速度慢,只下载docker-compose-without-neo4j.quickstart.yml就可以

注意如果虚拟机上安装过mysql或者mariadb记得systemctl stop ,不然会报端口占用错误,另外启动容器时还需要开放如下端口

不建议在已安装上述常见组件的服务器上运行datahub,

(5)出现下图则证明各个容器启动完成

(6) 摄取官方提供的测试用元数据

datahub docker ingest-sample-data

(7)登陆${hostname}:9002查看前端界面

1.2 datahub离线安装

对于公司开发内网环境来说,无法pip、yum在线下载,无法在线pull docker镜像,这一章尝试离线安装所有需要的组件。

1.2.1 docker离线安装

(1)进入官网下载tgz包(https://download.docker.com/linux/static/stable/x86_64/)

(2)将安装包上传后tar –zxvf解压

(3)创建docker.service

vi /etc/systemd/system/docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

chmod +x /etc/systemd/system/docker.service

systemctl daemon-reload

systemctl start docker

(4)用1.1.1(5)中github(Releases · docker/compose (github.com))下载安装包的方式安装docker-compose

(5)启动datahub后docker ps 查看所有启动的容器

(6)使用命令保存镜像,注意把相关的镜像都下载到本地docker save –o 包名 镜像名

例如:docker save -o localimage/datahub-actions.tar acryldata/datahub-actions:head

将所有datahub相关镜像全部下载到本地,最后效果是这样的:

(7)将镜像包发送到无网络环境的服务器上

(8)docker load –I 包名

将镜像加载到无网络环境的服务器上

1.2.2 python离线安装

(1)使用国内华为源(https://mirrors.huaweicloud.com/python)下载tar.xz包

(2)xz –d将tar.xz解压为tar

xz -d Python-3.9.11.tar.xz

(3)tar –xvf 将tar包解压

tar -xvf Python-3.9.11.tar

(4)注意安装之前必须保证有gcc、libffi-devel、zlib(否则pip无法安装)、openssl≥1.1.1、bzip2-devel(dathub所需)

离线安装gcc等命令可以在有网络的服务器使用repotrack命令将相关rpm包下载下来,然后传至无网服务器使用rpm -Uvh *rpm --nodeps –force安装

以gcc举例:

① 在有网络服务器创建目录package/gccpkg

② 进入package/gccpkg

③ repotrack gcc

④ 将gccpkg发送到无网服务器

⑤ 进入gccpkg目录

⑥ rpm -Uvh *rpm --nodeps --force安装所有rpm包

⑦ gcc –v查看是否安装成功

(5)安装openssl

下载openssl安装包(Releases · openssl/openssl (github.com)

tar -zxvf openssl-1.1.1t.tar.gz

./config --prefix=/usr/local/lib/openssl-1.1.1

make

make install

rm /usr/lib64/libssl.so.1.1

rm /usr/lib64/libcrypto.so.1.1

cd /usr/bin

rm openssl

ln -s /usr/local/lib/openssl-1.1.1/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1

ln -s /usr/local/lib/openssl-1.1.1/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

cd /usr/bin

ln -s /usr/local/lib/openssl-1.1.1/bin/openssl usr/bin/openssl

openssl version

(6)./configure --prefix=/usr/python3 --with-openssl=/usr/local/lib/openssl-1.1.1

No module named _ssl

(7)make&&make install

(8)删除原来的python->python2软连接,添加python->python3,python3->安装目录

查看python版本

(9)添加软连接pip->pip3,pip3->安装目录

pip查看版本

1.2.3 datahub离线安装并启动

(1)与在线安装一样,需要安装pip、wheel、setuptools、acryl-datahub,pip也可以将包下载到本地

① 将本地安装过的所有库名记录到requirements.txt中
pip freeze > requirements.txt
② 遍历requirements.txt中的内容,下载
pip install -r requirements.txt
③ 将某个<package_name>库下载到本地<dir>下
pip download -d <dir> <package_name> 
④ 遍历requirements.txt中的内容,下载到本地<dir>下

pip download -d <dir> -r requirements.txt

⑤ 将<dir>下某个<package_name>安装到环境中

pip install --no-index -f <dir> <package_name>

例如:

pip download -d acryl-datahub acryl-datahub

pip install –no-index –f acryl-datahub/*

(2)运行命令时-f指定yml地址,-no-pull-images不pull,使用本地镜像

datahub docker quickstart -f /usr/datahub/docker-compose-without-neo4j.quickstart.yml --no-pull-images

(3)与在线安装一样,登录${hostname}:9002查看前端界面,用户名密码datahub/datahub

(4)上传官方测试json至离线服务器,摄取官方测试数据

(5)可以看到界面中已经出现了测试信息

1.3 本地环境替换datahub docker

(cd docker && COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -p datahub -f docker-compose-without-neo4j.yml -f docker-compose-without-neo4j.override.yml -f docker-compose.dev.yml up -d --no-deps --force-recreate datahub-gms)

1.4 安装过程中可能遇到的问题

1.4.1 python3安装后导致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

没有提示的不用修改

1.4.2 python控制台中按backspace返回^H

临时解决:

Ctrl+退格键

永久解决:

安装readline,readline 是 bash shell 用的库,包含许多使用功能

yum install readline readline-devel

安装完成后,需要再重新编译安装 Python,重复1.2.2

二 datahub使用

2.1 使用命令摄取

2.1.1  摄取前准备工作

检查插件

datahub check plugins --verbose

如果插件不可用pip install acryl-datahub[插件名],无网络环境可以参考1.2.3将pip包download至本地,再load -o

这里我pip install 'acryl-datahub[mysql]'

确保插件无disable后再进行摄取操作

2.1.2 编辑yml文件执行摄取操作(未完)

编辑摄取文件

vi /usr/datahub/mysqlmaster.yml

source:

  type: mysql

  config:

    # Coordinates

    host_port: master:3306

    database: dolphinscheduler

    # Credentials

    username: root

    password: lovol

    # If you need to use SSL with MySQL:

    # options:

    #   connect_args:

    #     ssl_ca: "path_to/server-ca.pem"

    #     ssl_cert: "path_to/client-cert.pem"

    #     ssl_key: "path_to/client-key.pem"

sink:

  # sink configs

  type: datahub-rest

  config:

server: http://slave1:8080

执行命令

datahub ingest -c /usr/datahub/mysqlmaster.yml

5 0 * * * datahub ingest -c /usr/datahub/mysqlmaster.yml

可以调度执行摄取任务,corn用法教程网上有很多,这里就不介绍了

在2.3中介绍另一种摄取方法

2.2 datahub命令详解

datahub --help查看所有命令

2.2.1 check

常用命令:

检查插件 –v输出详细信息

datahub check plugins -v

datahub delete

命令行删除元数据

datahub delete --env prod --entity_type dataset -p mysql --query dolphinscheduler --hard

 

任何命令加 –n则空跑,不会产生实际影响,例如

datahub delete --env prod --entity_type dataset -p mysql --query dolphinscheduler --hard -n

由于cli命令原理是依靠输入参数快速构建rest,如果按照2.4.1开放了tokens,再使用命令时相当于无token运行,会报http连接错误

 2.3 摄取调度中心

由于UI界面创建的摄取任务是在容器内运行的,容器内没有添加hostname,使用hostname格式不能运行,

且进入容器的租户无权添加hosts,UI界面创建的任务只有用服务器IP才能成功执行

2.3.1 mysql源摄取流程

(1)选择数据源

(2)选择设置项

在Connection中输入服务器ip、端口号、mysql用户名密码

由于UI界面创建的摄取任务是在容器内运行的,容器内没有添加hostname,使用hostname格式不能运行,

尝试进入容器修改hosts,无效

查看datahub-actions的containerID

修改服务器/var/lib/docker/containers/ 36d5ece46eb8546cb95fe9ea6305bfe90c92a84aa0fe8281130eb2364181cdf7/hosts

添加master后才可以在前端使用host进行摄取

每次重启docker后hosts文件都会重置,所以如果频繁启停的话建议使用ip进行摄取

Filter中编辑的是过滤条件,可以对数据库、MySQL源数据、表、视图做出限制,只摄取符合限制的表,Deny优先级高于allow

在Advanced中可以勾选附加选项

(3)调度运行时间

必须将Run on a schedule打开才能启用调度

(4)为摄取任务取名

2.4 Settings

2.4.1 Access Tokens

个人访问令牌允许向数据中心的 API 发出编程请求。令牌持有者继承发出人的权限,并且寿命有限。最好不要共享令牌

datahub令牌功能默认是关闭的,界面报

Token based authentication is currently disabled. Contact your DataHub administrator to enable this feature.(忘截图了)

需要修改1.1.3(4)中的的配置文件docker-compose-without-neo4j.quickstart.yml,在datahub-frontend-react和datahub-gms下的environment添加- METADATA_SERVICE_AUTH_ENABLED=true,开启令牌功能,注意更改yml后容器会类似重置,2.8中用户文件夹会刷新,记得重新编辑,添加用户

创建令牌

创建完成后界面不能重复打开,只能删除,建议保存到安全的位置

curl -X POST 'http://slave1:9002/api/graphql' \

--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJhY3RvclR5cGUiOiJVU0VSIiwiYWN0b3JJZCI6Imxpa2FpIiwidHlwZSI6IlBFUlNPTkFMIiwidmVyc2lvbiI6IjIiLCJqdGkiOiI4MWZjN2E0NC1mNmQ2LTRhODAtYmU0MS02NmE4MmI3OTlmZmYiLCJzdWIiOiJsaWthaSIsImV4cCI6MTY4ODk3Mzg3NywiaXNzIjoiZGF0YWh1Yi1tZXRhZGF0YS1zZXJ2aWNlIn0.t1Mz27Jiw4r18wqIFqgl3CfFBQTwFAEA1vY3Sl0_DFU' \

--header 'Content-Type: application/json' \

--data-raw '{"query":"{\n  me {\n    corpUser {\n        username\n    }\n  }\n}","variables":{}}'

2.4.2 Users & Groups

Users界面可以快速分配角色,但不能创建用户,创建用户见2.8

Group界面创建用户组

进入组后可以添加用户

2.4.3 Permissions

1、Roles

点击快速分配

2、Policies

默认root user,admin,editors和readers策略,无法删除无法编辑

可以点击创建新策略

① 输入名称和选择策略的类型,类型有Platform和Metadata两种

平台策略类型允许向用户分配数据中心平台权限。其中包括管理用户和组、创建策略、查看分析图等。

元数据策略类型允许向用户分配元数据权限。其中包括操作元数据的能力比如所有权,标签,数据集、图表之类的文档。

2.4.4 MyViews

2.5管理中心

2.5.1 Govern—Glossary

术语字典,可以定义一组标准化的概念,使用共享词汇描述数据

术语:分配有特定业务定义的字词或短语。

术语组:充当文件夹,包含术语甚至其他术语组,以允许嵌套结构。

描述文档可编辑加粗、倾斜、下划线、横线、删除线、项目列表、代码块、图片、链接和表格

创建后是这样的,右侧可以添加owner

创建术语词条,父组选刚创建的组

然后在数据资产中可以添加术语

注意删除术语组的时候必须先删除所有子项,暂时不支持级联删除

2.5.2 Govern—Domains

DataHub在0.8.25版本开始支持将数据资产分组到称为域的逻辑集合中。域是精选的顶级文件夹或类别,可在其中对相关资产进行显式分组

创建和添加域需要管理域的权限

可以在权限中心创建策略赋予或删除权限,详见2.5.2 Permissions—Policies

2.6 Analytics

2.7 数据血缘

想编辑血缘需要有编辑血缘权限,用户必须拥有AB数据集编辑血缘权限的情况下才能将AB设为上下游

2.7.1 UI手动创建

0.9.5后允许手动创建血缘,使用此功能可以补充自动血缘提取或在不支持自动提取的源中建立关系

进入数据集后右上角lineage进入血缘图形界面

可以搜索并添加上下游表

保存完成后图形界面会显示血缘关系

删除

下游设置同理

2.7.2 api创建

2.7 后续升级

2.8 新用户创建

① 进入运行前端的容器

docker exec -it c991cdb47c0b(linkedin/datahub-frontend-react:head镜像的容器id) sh

② 添加用户到user.props

cat >>datahub-frontend/conf/user.props <<EOF

用户名:密码

……

EOF

③ 重启datahub

④ 新创建的用户在Users&Groups里找不到

需要用新用户登录后编辑一下个人信息

 

⑤ 在Users&Groups里就可以找到了

同一浏览器不能支持同时登录多个用户,新开窗口再次输入前端网址后会直接以上次登陆用户进入,其中一个窗口退出登录后原窗口也退出登录,一窗口再登陆其他账号后,另一窗口也登陆同一账号。不同浏览器则可以保持多用户登陆

2.9 接口调用

https://datahubproject.io/docs/api/openapi/openapi-usage-guide

三 datahub原理与支持

3.1支持的数据源

Airflow; Spark; Great Expectations; Protobuf Schemas; Athena; Azure AD; BigQuery; Business Glossary; ClickHouse; CsV; Databricks; dbt; Delta Lake; Demo Data; Druid; Elasticsearch; Feast; File; File Based Lineage; Glue; Hive; Iceberg; JSON Schemas; Kafka; Kafka Connect; LDAP; Looker; MariaDB; Metabase; Microsoft SQL Server; Mode; MongoDB; MySQL; NiFi; Okta; OpenAPI; Oracle; Postgres; PowerBI; Presto; Presto on Hive; Pulsar; Redash; Redshift; S3 Data Lake; SageMaker; Salesforce; SAP HANASnowflakeSQLAIchemy; Superset; Tableau; Trino; Vertica;

前端:react框架

官方demo:https://demo.datahubproject.io/

3.2 DataSets元数据模型

DataSets元数据模型

DataSets元数据模型支持由三部分组成:

    Data Platform (e.g. urn:li:dataPlatform:mysql)

    Name (e.g. db.schema.name)

    Env or Fabric (e.g. DEV, PROD, etc.)

    完整的: urn:li:dataset:(urn:li:dataPlatform:<platform>,<name>,ENV)

优点:

1、基于docker,易于安装,在无网络环境下可离线导入镜像

2、轻量级、体积不大,占用内存少

3、数据清晰,功能较全,前端界面完成度高

4、更新频繁,团队响应迅速

缺点:

1、全英文界面,对非专业人事不友好,需自行汉化

2、封装得太死,不好扩展,没有提供元数据库的建表语句,容器内部无权限更改系统文件、无权限进入mysql,难以二开

3、数据血缘功能目前不太完善,主要依靠方式为手动编辑,自动获取仅支持MongoDB、SageMaker、Feast、Postgres、Athena、Airflow、BigQuery

4、国内用户少、教程少、用例少、文档全英文,难以查询资料

5、列级血缘仅支持Snowflake、Databricks、Looker,不支持自动创建

3.x datahub相关容器研究

dataHub-frontend-react 前端

datahub-gms 服务

datahub-action

datahub-frontend-react/datahub-frontend/conf/user.props 用户名密码

——————————————————————

application_1680189248070_0087

Interrupted while waiting for queue

java.lang.InterruptedException: null

       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) ~[?:1.8.0_331]

确保有rpm和另一台可以联网的虚拟机的情况下可以离线安装任何包

3.x.x datahub的元数据库

查看

CREATE TABLE `metadata_index` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `urn` varchar(200) COLLATE utf8mb4_bin NOT NULL,

  `aspect` varchar(150) COLLATE utf8mb4_bin NOT NULL,

  `path` varchar(150) COLLATE utf8mb4_bin NOT NULL,

  `longVal` bigint(20) DEFAULT NULL,

  `stringVal` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL,

  `doubleVal` double DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `longIndex` (`urn`,`aspect`,`path`,`longVal`),

  KEY `stringIndex` (`urn`,`aspect`,`path`,`stringVal`),

  KEY `doubleIndex` (`urn`,`aspect`,`path`,`doubleVal`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

CREATE TABLE `metadata_aspect_v2` (

  `urn` varchar(500) COLLATE utf8mb4_bin NOT NULL,

  `aspect` varchar(200) COLLATE utf8mb4_bin NOT NULL,

  `version` bigint(20) NOT NULL,

  `metadata` longtext COLLATE utf8mb4_bin NOT NULL,

  `systemmetadata` longtext COLLATE utf8mb4_bin,

  `createdon` datetime(6) NOT NULL,

  `createdby` varchar(255) COLLATE utf8mb4_bin NOT NULL,

  `createdfor` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,

  PRIMARY KEY (`urn`,`aspect`,`version`),

  KEY `timeIndex` (`createdon`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐