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...

相关推荐
南宫生12 分钟前
力扣每日一题【算法学习day.130】
java·学习·算法·leetcode
!!!52521 分钟前
Java实现斗地主-做牌以及对牌排序
java·算法
我要最优解22 分钟前
关于在mac中配置Java系统环境变量
java·flutter·macos
二十七剑24 分钟前
jvm调试和查看工具
java·linux·jvm
过客猫202229 分钟前
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
开发语言·后端·golang
刘立军36 分钟前
本地大模型编程实战(20)用langgraph和智能体实现RAG(Retrieval Augmented Generation,检索增强生成)(4)
人工智能·后端·llm
南宫生1 小时前
力扣每日一题【算法学习day.133】
java·学习·算法·leetcode
獨枭1 小时前
如何在 Mac 上安装并配置 JDK 环境变量
java·macos·jdk
m0_738355691 小时前
java泛型
java·开发语言
web2u1 小时前
Docker入门及基本概念
java·运维·服务器·spring·docker·容器