Openmetadata源码运行操作步骤

最近正在研究元数据和数据资产相关的知识与应用场景,同时也调研了相当多的框架,例如Apache Atlas,LinkedIn DataHub,以及咱们今天的主角OpenMetadata。

开源元数据管理平台

  • Apache Atlas:Apache Atlas是一个开源的大数据元数据管理和数据治理平台,是一套可扩展的核心基础治理服务,可以为组织提供开放的元数据管理和治理功能,使组织能够构建其数据资产目录,对这些资产进行分类和治理,并为数据科学家、分析师和数据治理团队围绕这些数据资产提供协作功能。
  • LinkedIn DataHub:LinkedIn DataHub是LinkedIn开源的元数据搜索和发现平台。它提供了一个集中式的元数据存储库,用于管理和浏览各种类型的数据集和数据资产的元数据信息。
  • OpenMetadata:OpenMetaData是一个由中央元数据存储库、深入的血缘关系和无缝的团队协作提供支持的用于发现、可观测性和治理的统一平台。它是增长最快的开源项目之一,拥有充满活力的社区,并被各种行业垂直领域的不同公司采用。基于 Open Metadata 标准和 API,支持与广泛的数据服务的连接器,OpenMetadata 实现了端到端的元数据管理,让您能够自由释放数据资产的价值。

由于Atlas不太适用于非Hadoop生态,所以我们目光聚焦在了Datahub,Openmetadata上,重点比较了Openmetadata和Datahub的优缺点。

比较维度 OpenMetadata DataHub
架构与技术栈 优势: - 统一元数据模型,以 MySQL 存储,借助 Elasticsearch 搜索,JSON 模式存储关系,架构简洁 劣势:- 无专用图数据库,处理复杂关系能力或有不足 优势: - Kafka 介导摄取,多存储层结合- 支持多种数据消费方式,架构灵活劣势:- 架构相对复杂,部署和维护难度增加
元数据建模与摄取 优势: - 专注拉取式提取,Airflow 推送数据,以注释 JSON 模式文档存储,与部分现有工作流契合。劣势:- 数据提取方式灵活性逊于 DataHub 优势: - 支持推拉两种提取方式,Kafka 推送,摄取更灵活;注释 PDL 存储,语义表达能力强。劣势:- 默认推送方式下 Kafka 配置和管理较复杂
数据治理能力 优势: - 基于角色访问控制,引入 "重要性" 概念,便于搜索,支持实体元数据扩展。劣势:- Action Framework 功能相对单一 优势: - Action Framework 支持事件驱动的外部工作流,"域" 标签优化搜索。劣势:- 相比 OpenMetadata,在实体元数据扩展方面较弱
数据沿袭 优势: - 支持表级和列级沿袭,功能更新快,Python SDK 可获取自定义数据。劣势:- 暂未发现明显劣势 优势: - 支持表级和列级沿袭,提取方式多样。劣势:- 部分数据源列级沿袭支持有限
数据质量与剖析 优势: - 集成数据质量和剖析功能,支持外部工具,自有框架提供预定义测试。劣势:- 自有框架使用需一定 Python 编程能力 优势: - 通过集成外部工具实现数据质量功能,支持数据契约。劣势:- 原生数据质量功能尚不完善,依赖外部集成
上下游集成 优势: - 超 50 个连接器,支持多种数据源,有与 Great Expectations 和 Prefect 集成。劣势:- API 和 SDK 丰富度不及 DataHub 优势: - 提供多种 API 和 SDK,交互方式多样。劣势:- 连接器数量和种类相对较少

从上述比较来说,我们的需求是元数据管理和数据资产管理,这两个框架是完全能够胜任,元数据采集的类型也是非常丰富的,但由于我们接入了很多国产数据库,BI,例如Kingbase,Dm,Yonghong BI,guanyuan Bi等,需要采集这些元数据,就不得不涉及到二次开发。在考虑到团队主要是以Java作为开发语言,以及整体运维体系来说,还是Openmetadata更加适合我们。

本文不涉及Openmetadata的操作,只跟大家探讨学习一下Openmetadata的源码如何在本地运行。

Openmetadata源码搭建

我们使用Openmetadata的版本为1.5.x,首先需要从github上面clone下Openmetadata的源码。

源码地址:github.com/open-metada...

我本地是用mac,所以只展示了mac运行的方式。

说明:

  1. ${OPNEMETADATA_HOME}指的就是Openmetadata的根目录
  2. 执行make命令,docker命令或者其他一些命令,一律都要在${OPNEMETADATA_HOME}下执行。

架构和技术

OpenMetadata依赖以下组件来:

  • 用JsonSchemas 来定义元数据模式
  • 用Dropwizard/Jetty 来构建Web 和 REST API 的,而并非采用Spring mvc的方式构建
  • MySQL 8.x用于存储元数据。
  • ElasticSearch 7.x用于索引元数据并支持搜索。

必要条件

  • Docker 20 or higher:也不是必须的,你可以手动安装mysql和es。不通过docker的方式部署
  • Java JDK 17:必须,Openmetadata是完全采用了jdk 17来实现。
  • Antlr 4.9.2:必须,需要生成对象。执行命令:sudo make install_antlr_cli
  • JQ:必须,需要生成对象,大部分Domain都是通过jsonSchema定义好的,需要jq来处理。执行命令:brew install jq
  • Maven 3.5.x or higher - (with Java JDK 11):必须
  • Python 3.8 or 3.9:我用的是miniconda安装的python env。不是必须的,其主要作用就是要进行git pre-commit check以及openmetadata python集成测试需要。pre-commit check可以去掉。
  • Node 18.x:必须
  • Yarn ^1.22.0:必须
  • Rpm (Optional, only to run RPM profile with maven):非必须,我没安装。

你也可以在${OPNEMETADATA_HOME}下执行

shell 复制代码
make prerequisites

检查一下是否已经满足条件。

当然也可以不检查,毕竟不是每个组件都安装了。

后端运行

安装mysql和es

我是用的是docker-compose来安装的。你可以在安装之前修改一下docker-compose.yml文件,文件路径在${OPNEMETADATA_HOME}/docker/development/docker-compose.yml

文件内容如下:参考一些注释,按需修改

yaml 复制代码
version: "3.9"
volumes:
  es-data:
services:
  mysql:
    build:
      context: ../../.
      dockerfile: docker/mysql/Dockerfile_mysql
    command: "--sort_buffer_size=10M"
    container_name: openmetadata_mysql
    restart: always
    depends_on:
      - elasticsearch
    environment:
      MYSQL_ROOT_PASSWORD: password ## mysql root 用户密码,可以修改
    expose:
      - 3306
    ports:
      - "3306:3306"
    networks:
      - local_app_net
    healthcheck:
      test: mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --silent --execute "use openmetadata_db"
      interval: 15s
      timeout: 10s
      retries: 10
    volumes:
     - ./docker-volume/db-data:/var/lib/mysql ## mysql data挂载路径,可按需修改

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
    container_name: openmetadata_elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1024m -Xmx1024m
      - xpack.security.enabled=false
    networks:
      - local_app_net
    expose:
      - 9200
      - 9300
    ports:
      - "9200:9200"
      - "9300:9300"
    healthcheck:
      test: "curl -s http://localhost:9200/_cluster/health?pretty | grep status | grep -qE 'green|yellow' || exit 1"
      interval: 15s
      timeout: 10s
      retries: 10
    volumes:
      - es-data:/usr/share/elasticsearch/data ## es data挂载路径,可按需修改
  
## 省略了其余内容

networks:
  local_app_net:
    name: ometa_network
    ipam:
      driver: default
      config:
        - subnet: "172.16.239.0/24"

执行命令

shell 复制代码
docker compose -f docker/development/docker-compose.yml up mysql elasticsearch --build -d

maven编译

由于我省略了一些步骤,比如python没有安装,例如git pre-commit check,如果你也像我一样,需要在${OPENMETADATA_HOME}/openmetadata-ui/src/main/resources/ui/package.json去掉prepare command。

另外,我还去掉了所有的maven-gpg-plugin插件,因为有报错,我暂时也不想解决,感觉就全部去掉了。

然后执行命令:

shell 复制代码
mvn clean install -Dmaven.test.skip=true

如果还有问题,也可以留言。

初始化数据库脚本

在初始化数据库脚本之前,需要先修改配置文件,配置文件路径在${OPENMETADATA_HOME}/conf/openmetadata.yaml

一般只需要修改jdbc连接和es连接即可。

修改成自己的数据库连接信息和es连接信息之后,执行命令:

shell 复制代码
sh bootstrap/openmetadata-ops.sh drop-create

官网上建议,maven打包后,会在openmetadata-dist/target目录下有个open-metadata-.tar.gz文件,你可以解压,然后在解压后的目录下执行上述的命令,我觉得都一样,不过可以作为上述步骤的一个check动作。

运行openmetadata-server

把项目导入到idea后,操作步骤如下:

  1. 点击Edit-Configurations。
  1. 新增Application类型的运行程序。
  1. 配置运行程序
  1. Name:是必填项
  2. 选择JDK 17
  3. 选择openmetadata-service模块
  4. 运行主类为:org.openmetadata.service.OpenMetadataApplication
  5. 添加运行主类需要的参数:server ./conf/openmetadata.yaml
  6. 然后即可运行,端口为8585。

前端运行

前端必要条件

  • Node 18.x:必须
  • Yarn ^1.22.0:必须

生成typescript的类

如果你参考了上述的步骤都已经执行成功了,这一步骤可以省略,但如果上述所有步骤你没有操作,只想运行前端代码,需要参考下面的步骤,帮助你从 JSONSchema生成 TypeScript Type。

我们使用的是quicktype从 JSON 模式生成类型,所以需要确保你已安装quicktype,如果没有安装,请在${OPENMETADATA_HOME}以下命令进行安装。

shell 复制代码
yarn install

执行完以后需要到openmetadata-ui/src/main/resources/ui,运行以下命令。

shell 复制代码
yarn run json2ts

上述命令将需要一些时间来执行并生成类型。之后,你可以转到生成的openmetadata-ui/src/main/resources/ui/src/generated/*文件夹并查看所有生成的类型。

运行前端

一旦在系统中安装了节点和 yarn,你就可以执行以下步骤来运行 OpenMetadata 前端。

  1. 安装依赖项是一次性任务。如果package.json文件有任何更改,则必须再次执行以下步骤。
shell 复制代码
make yarn_install_cache
  1. 在${OPENMETADATA_HOME}下执行命令。
shell 复制代码
make yarn_start_dev_ui
  1. 在浏览器上访问http://localhost:3000 以访问 OpenMetadata 前端界面。

参考文献

本人这篇文章去掉了集成测试等操作,适合更加快速的,入门级别的运行源码,如果想更加详细的说明,可以参考官网docs.open-metadata.org/v1.5.x/deve...

相关推荐
一只叫煤球的猫4 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9655 小时前
tcp/ip 中的多路复用
后端
bobz9655 小时前
tls ingress 简单记录
后端
皮皮林5516 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友6 小时前
什么是OpenSSL
后端·安全·程序员
bobz9656 小时前
mcp 直接操作浏览器
后端
前端小张同学9 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook9 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康10 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在10 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net