开源元数据管理平台OpenMetadata开发环境搭建

开源的元数据管理平台很多。开源元数据管理平台是一种用于收集、存储和管理数据的工具,它们提供了一种可扩展的方式来组织和维护数据的元数据信息。以下是一些常见的开源元数据管理平台:

  1. Apache Atlas:Apache Atlas是一个开源的大数据元数据管理和数据治理平台,旨在帮助组织收集、整理和管理数据的元数据信息。它提供了丰富的元数据模型和搜索功能,可以与各种数据存储和处理平台集成。
  2. LinkedIn DataHub:LinkedIn DataHub是LinkedIn开源的元数据搜索和发现平台。它提供了一个集中式的元数据存储库,用于管理和浏览各种类型的数据集和数据资产的元数据信息。
  3. Amundsen:Amundsen是Lyft开源的数据发现和元数据管理平台。它提供了一个用户友好的界面,使用户可以搜索、浏览和贡献数据集的元数据信息。Amundsen还支持与其他数据工具和平台的集成。
  4. Metacat:Metacat是Netflix开源的数据发现和元数据管理平台。它提供了一个统一的接口来查找和浏览各种数据集的元数据信息,并支持与其他数据工具和服务的集成。

这些开源元数据管理平台都提供了各种功能,如元数据存储、搜索、浏览、数据资产关系管理、数据血统跟踪等,帮助组织更好地管理和利用数据的元数据信息。

而今天我们要介绍的OpenMetadata,希望提供一种元数据的管理标准,来让我们更好的管理元数据。

以上介绍来源1

另外,关于元数据管理架构的发展,可参考之前我的一篇笔记4

下面是本次开发环境搭建的操作记录,供大家参考。

0. 开发环境搭建

本人操作环境为MacOS,官方文档2有的内容此处不再重复,按照文档要求对机器开发环境进行检查,需要补充安装的是:

antlr4
rpm
jq

其中rpm为可选项,先不安装。其它两个安装指令为:

brew install jq
brew install antlr

安装最新版本的antlr可能会导致空白页问题,建议手动安装4.9.2版本

手动安装ANTLR 4.9.2

  1. 下载ANTLR 4.9.2的jar文件
    从ANTLR的GitHub releases页面或官方网站下载ANTLR 4.9.2的jar文件。

  2. 移动jar文件到一个适当的目录
    例如,可将它放在/usr/local/lib

    mv path_to_downloaded_jar/antlr-4.9.2-complete.jar /usr/local/lib/
    
  3. 创建antlr4和grun的快捷方式
    打开您的bash或zsh配置文件(.bashrc, .bash_profile, .zshrc等)并添加以下别名:

    alias antlr4='java -jar /usr/local/lib/antlr-4.9.2-complete.jar'
    alias grun='java org.antlr.v4.gui.TestRig'
    
  4. 重新加载您的配置文件
    如果您使用的是bash:

    source ~/.bash_profile
    

    如果您使用的是zsh:

    source ~/.zshrc
    
  5. 验证安装

    antlr4
    

上述安装步骤完成后,antlr4别名可在命令行被识别,但在构建项目依旧可能不被识别,在 Maven 中它会报 command not found 错误。

为了解决这个问题,需创建一个名为 antlr4 的可执行脚本,并确保它位于你的 $PATH 中。

  1. 创建一个新的脚本文件:

    sudo nano /usr/local/bin/antlr4
    
  2. 将以下内容粘贴到编辑器中:

    #!/bin/bash
    java -jar /usr/local/lib/antlr-4.9.2-complete.jar "$@"
    

    这里,"$@" 是一个特殊的变量,它会传递所有给该脚本的参数到 java -jar 命令。

  3. 保存并退出编辑器。

  4. 使脚本可执行:

    sudo chmod +x /usr/local/bin/antlr4
    

然后是:

git clone https://github.com/open-metadata/OpenMetadata
cd openmetadata
python3 -m venv env
source env/bin/activate
make install_dev
make install_test precommit_install

如果你在执行时遇到google-re2相关错误时,请按以下步骤解决

google-re2安装问题解决

1. Server端搭建

参考官方教程OpenMetadata Documentation: Get Help Instantly (open-metadata.org)进行操作。

先是通过docker部署Mysql,ProgreSQL和ES,但就这里的部署文档看不出来PostgreSQL有什么用,如果本地有MySQL和PostgreSQL的话(比如我),操作还复杂一些。比如修改对应docker-compose文件里面的端口号,以免于本地服务冲突:

ports:
- "3309:3306"

以上是MySQL端口的修改示例,将原来的3306改成了3309,容器端接口不变。但修改端口似乎对于整个项目的搭建会带来比较多负面影响,建议不修改。

接下来是项目整体打包,-DskipTests建议加上,可以跳过一大堆单元测试的运行(单元测试的报错很难处理)。

mvn clean install -DskipTests

打包后为了方便后续开发,最好在IDEA中去运行实例,中间需要注意JAVA环境配置如检查JAVA_HOME是否配置在正确的路径上。

中间因网络或其他问题导致中断可从失败的模块重新开始,如:

mvn install -rf :openmetadata-service

可能需要单个测试的模块

cd /Users/januswing/code/OpenMetadata/openmetadata-service/src/test/java/org/openmetadata/service/resources/bots/BotResourceTest.java
mvn -Dtest=BotResourceTest test

找到打包好的分发包,在OpenMetadata/openmetadata-dist/target/openmetadata-版本号这里,然后用以下命令执行Mysql表创建

sh bootstrap/bootstrap_storage.sh drop-create-all

记得不要cd进bootstrap,不然会执行失败,官方文档这里是有错的。

接下来,我们就可以在IDEA里面去Build和Run项目了,参考官方文档的配置没有问题。


其他已知问题

  • 如遇到localhost:8585显示空白页面,可能需切换antlr版本,或参考官方Troubleshooting:
  • If you see blank page at http://localhost:8585, please check the logs at logs/openmetadata.log. You might be encountering one of the following errors:
    - connection refused or unreachable - please confirm that MySQL and ES are reachable outside of docker by running docker ps and checking that ports 3306 and 9200 are listening on 0.0.0.0
    - If ElasticSearch in Docker on Mac is crashing, try changing Preferences -> Resources -> Memory to 4 GB
    - If ElasticSearch logs show high disk watermark [90%] exceeded, try changing Preferences -> Resources -> Disk Image Size to at least 16 GB
    - Public Key Retrieval is not allowed - verify that the JDBC connect URL in conf/openmetadata.yaml is configured with the parameter allowPublicKeyRetrieval=true
    - Browser console shows javascript errors, try doing a clean build. Some npm packages may not have been built properly.

环境或代码变更后,重新在根目录执行

mvn -DskipTests clean install

并IDEA中重新Run项目即可

  • 如遇到以下错误信息
Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create-metadata (default) on project openmetadata-service: Execution default of goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create-metadata failed.: NullPointerException

可以在日志中看到实际在执行的命令是:
Executing: /bin/sh -c cd '/Users/januswing/code/OpenMetadata/openmetadata-service' && 'git' 'rev-parse' '--verify' 'HEAD'

这个需要在openmetadata-service目录下返回当前分支上最新提交的完整 SHA-1 哈希值。如果你是直接下载github release源码包的话,就会有这个问题。

于是只需要把git构建好即可:

git init
git add .
git commit -m "initial commits"
  • openmetadata-java-client: Maven session does not declare a top level project
    修改根目录pom.xml,把sonar的execution部分注释掉
          <plugin>  
            <groupId>org.sonarsource.scanner.maven</groupId>  
            <artifactId>sonar-maven-plugin</artifactId>  
            <version>${maven.sonar-plugin.version}</version>  
<!--            <executions>-->  
<!--              <execution>-->  
<!--                <id>sonar-verify-execution</id>-->  
<!--                <phase>verify</phase>-->  
<!--                <goals>-->  
<!--                  <goal>sonar</goal>-->  
<!--                </goals>-->  
<!--              </execution>-->  
<!--            </executions>-->  
          </plugin>

sonar是一个用来扫描代码质量的东西,下载release包构建时估计是无法调用到github仓库对应的secrets导致。

2. ingest测试

元数据提取框架官方使用airflow实现,也可以通过connector连接其他的元数据提取框架。
单独部署openmetadata_ingestion的方式官方文档没有明说,我是通过

docker compose -f docker/development/docker-compose.yml up ingestion --build -d

来部署的,但这会导致docker里面多出一套mysql和es的容器。上述命令执行成功后,将两个多出来的容器删掉,然后修改conf/openmetadata.yaml如下:

metadataApiEndpoint: ${SERVER_HOST_API_URL:-http://host.docker.internal:8585/api}

重新Build & Run即可。

docker compose过程中可能会经常遇到网络问题,修改~/.docker/.config.json加上代理有可能可解决一部分网络问题,前提是你本地有代理。

{
        "auths": {
                "https://index.docker.io/v1/": {}
        },
        "credsStore": "desktop",
        "proxies": {
                "default": {
                        "httpProxy": "http://localhost:1088",
                        "httpsProxy": "http://localhost:1088",
                        "noProxy": "localhost,127.0.0.1,host.docker.internal"
                }
        }
}

做完上面步骤,就可以在Settings里面连接本地数据库进行测试了。

## 参考资料

[1] 项目介绍: 一体化元数据管理平台——OpenMetadata入门宝典
[2] 参考文档:OpenMetadata Documentation)
[3] 仓库地址:Open Standard for Metadata
[4] 第三代元数据架构:笔记-三代元数据目录架构

<think>好的,我现在需要根据用户的要求,给出OpenMetadata的Docker部署在两台服务器上的方案。首先,我得回顾一下OpenMetadata的官方Docker部署指南和docker-compose.yml文件的结构,了解各个服务的作用和依赖关系。 用户的需求是将服务分布在两台服务器上,所以需要确定哪些服务可以分开部署,哪些需要在一起。根据微服务架构的常见模式,通常数据库、消息队列等基础设施可能需要独立部署,而应用服务可以根据负载分开。 首先,查看官方的docker-compose.yml,里面可能包含以下服务:MySQL/PostgreSQL作为元数据数据库,Elasticsearch用于搜索,Apache Airflow用于任务调度,OpenMetadata Server本身,以及可能的其他组件如Redis缓存、消息代理如Kafka或RabbitMQ等。 接下来,我需要分析这些服务之间的依赖关系。例如,OpenMetadata Server依赖数据库和Elasticsearch,Airflow也需要访问元数据数据库OpenMetadata的API。因此,如果拆分到两台服务器,必须确保服务之间的网络通信是可行的,可能需要配置正确的网络和DNS或者IP地址。 然后考虑服务的可扩展性和高可用性。例如,数据库和Elasticsearch可能需要主从复制或集群配置,但这可能超出基础部署的范围,用户可能只需要简单的分拆到两台服务器,而不是完整的集群。因此,可能需要将数据库、Elasticsearch、消息队列等基础设施放在一台服务器,而OpenMetadata Server和Airflow放在另一台,但需要检查资源消耗是否平衡。 另外,用户可能希望将负载较高的服务分散开。例如,OpenMetadata Server和Airflow可能消耗较多资源,因此可以分别部署在两台服务器上,而数据库和Elasticsearch放在其中一台,或者分开。但需要注意,如果数据库和应用程序服务器分开,网络延迟可能会影响性能,需要确保两台服务器之间的网络连接良好。 还要考虑数据持久化的问题,例如数据库的数据目录、Elasticsearch的数据存储需要挂载到持久化卷,这在分拆部署时要确保存储路径正确,并且数据能够被对应服务访问。 接下来,可能需要调整docker-compose.yml文件,将其拆分为两个部分,分别对应两台服务器,然后修改服务间的连接配置,例如将数据库的连接字符串从localhost改为另一台服务器的IP或域名。同时,需要处理Docker网络的问题,可能需要创建覆盖网络(overlay network)以便跨主机通信,或者使用其他网络解决方案如Weave、Flannel等,但如果是简单的两台服务器,可能直接使用主机网络或配置静态IP。 另外,需要考虑端口开放情况,确保必要的端口在两台服务器之间是开放的,比如数据库的端口3306或5432,Elasticsearch的9200、9300等。 可能还需要使用Docker Swarm或其他编排工具来管理多主机部署,但用户可能只是手动分拆docker-compose服务到两台主机,因此需要手动分配服务,并配置相应的环境变量和网络设置。 总结可能的部署方案: 服务器A: - MySQL/PostgreSQL(元数据存储) - Elasticsearch(搜索) - Redis(缓存,如果有的话) - Kafka/RabbitMQ(消息队列,如果有的话) 服务器B: - OpenMetadata Server - Apache Airflow(包括相关组件如PostgreSQL for Airflow元数据,如果独立的话) - 可能需要连接服务器A的数据库和Elasticsearch 但需要确认Airflow是否也需要访问元数据数据库,如果是,那么Airflow所在的服务器B需要能访问服务器A的数据库。同时,OpenMetadata Server需要连接服务器A的数据库和Elasticsearch。 此外,可能还需要考虑Ingestion服务的位置,如果使用单独的容器进行元数据摄取,可能需要部署在服务器B或者另一台。 另一个考虑是负载均衡,如果OpenMetadata Server需要高可用,可能需要在两台服务器上都部署,并通过负载均衡器分发请求,但用户可能暂时只需要分拆到两台,而不是高可用。 因此,可能的最终方案是: 服务器1: - 数据库(MySQL/PostgreSQL) - Elasticsearch - 消息队列(如Kafka) 服务器2: - OpenMetadata Server - Apache Airflow - 可能的Ingestion容器 这样,服务器2运行应用服务,而服务器1运行数据存储和消息基础设施。需要确保服务器2能通过IP或域名访问服务器1的服务端口,并且在docker-compose文件中配置相应的环境变量,如数据库连接字符串指向服务器1的IP。 最后,需要检查各个服务的依赖和配置,确保跨服务器的通信正确,并且数据持久化设置正确。</think>根据OpenMetadata的Docker部署需求,以下是分两台服务器的部署方案及服务分配建议: --- ### **一、服务拆分原则** 1. **基础服务集中部署**:数据库、搜索服务等基础设施部署在**服务器A**,保障数据独立性和稳定性。 2. **应用服务分散部署**:核心业务组件(如OpenMetadata Server、Airflow)部署在**服务器B**,隔离计算密集型任务。 3. **网络要求**:确保两台服务器间**开放必要端口**(如MySQL的3306、Elasticsearch的9200),并配置域名/IP直连。 --- ### **二、服务分配方案** #### **服务器A(基础设施层)** - **必需服务**: - **MySQL/PostgreSQL**:存储元数据。 - **Elasticsearch**:支持搜索功能。 - **消息队列(如Kafka)**:若需异步通信。 - **可选服务**: - **Redis**:缓存加速(若配置)。 - **配置要点**: - 数据目录挂载到持久化存储。 - 设置远程访问权限(如MySQL用户允许从服务器B的IP连接)。 #### **服务器B(应用层)** - **必需服务**: - **OpenMetadata Server**:核心API和UI服务。 - **Apache Airflow**:任务编排和元数据摄取。 - **Airflow专用数据库**(如共用服务器A的MySQL,或独立部署PostgreSQL)。 - **可选服务**: - **Ingestion容器**:单独的数据摄取服务。 - **配置要点**: - 修改`docker-compose.yml`中服务依赖的地址,例如: ```yaml environment: OPENMETADATA_CONFIG_DATABASE_HOST: 服务器A_IP ELASTICSEARCH_HOST: 服务器A_IP ``` --- ### **三、关键调整步骤** 1. **拆分docker-compose文件**: - 将原文件拆分为`docker-compose-infra.yml`(服务器A)和`docker-compose-app.yml`(服务器B)。 - 移除跨服务器服务的本地依赖(如删除本地`network`绑定)。 2. **修改服务连接配置**: - 在服务器B的配置中,所有依赖服务器A的服务需替换`localhost`为服务器A的IP或域名。 - 示例(OpenMetadata Server连接数据库): ```yaml environment: OPENMETADATA_CONFIG_DATABASE_URL: jdbc:mysql://服务器A_IP:3306/openmetadata_db ``` 3. **配置跨服务器网络**: - **方案1**:使用Docker Overlay网络(需Swarm模式)。 - **方案2**:直接通过IP+端口通信(需防火墙放行)。 --- ### **四、验证部署** 1. **检查服务连通性**: - 从服务器B执行`telnet 服务器A_IP 3306`确认数据库可达。 2. **日志监控**: - 观察OpenMetadata Server日志,确保无数据库或Elasticsearch连接报错。 3. **功能测试**: - 访问OpenMetadata UI,验证元数据读写和搜索功能正常。 --- ### **五、扩展建议** - **高可用部署**:若需提升可用性,可将Elasticsearch和数据库配置为主从集群。 - **负载均衡**:在流量较高时,可横向扩展OpenMetadata Server实例,通过Nginx分发请求。 通过以上方案,可实现资源合理分配,同时确保服务间跨服务器通信稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YingCai85

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值