You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Apache Atlas与独立Hive Metastore协同工作?

Hive Metastore与Apache Atlas协同配置指南(无需Kafka方案)

核心问题解答:Kafka是否必需?

Apache Atlas接收Hive元数据事件支持两种模式,Kafka并非强制依赖:

  • 异步模式(Kafka):适合生产环境,Hive元数据事件先写入Kafka,Atlas异步消费,避免阻塞Hive操作,保证高可靠性。
  • 同步模式(直接REST调用):适合测试或小规模环境,Hive Metastore直接通过REST API将事件推送给Atlas,无需中间件。

实际配置步骤

1. 准备Hive Metastore的Atlas钩子包

你已通过Maven编译Atlas,需将编译生成的atlas-hive-plugin-*.jar及关联依赖包复制到Hive Metastore的lib目录。可通过修改Hive Metastore的Dockerfile实现:

# 基于官方Hive Metastore镜像,替换为你使用的版本
FROM apache/hive:4.0.0-metastore

# 复制编译好的Atlas钩子包到Hive lib目录
COPY ./atlas-hive-plugin-*.jar /opt/hive/lib/
COPY ./atlas-common-*.jar /opt/hive/lib/
COPY ./atlas-client-*.jar /opt/hive/lib/
# 按需添加其他编译生成的依赖包

2. 配置Hive Metastore(hive-site.xml)

在Hive的配置文件中添加以下同步模式配置项:

<configuration>
  <!-- 启用Atlas元数据事件监听器 -->
  <property>
    <name>hive.metastore.event.listeners</name>
    <value>org.apache.atlas.hive.hook.HiveMetaStoreEventListener</value>
  </property>
  
  <!-- Atlas REST服务地址 -->
  <property>
    <name>atlas.rest.address</name>
    <value>http://atlas:21000/api/atlas/v2</value>
  </property>
  
  <!-- 启用同步模式(无需Kafka) -->
  <property>
    <name>atlas.hook.hive.synchronous</name>
    <value>true</value>
  </property>
  
  <!-- Atlas认证信息 -->
  <property>
    <name>atlas.username</name>
    <value>admin</value>
  </property>
  <property>
    <name>atlas.password</name>
    <value>admin</value>
  </property>
  
  <!-- 原有Hive Metastore配置(MySQL连接、MinIO存储等)保持不变 -->
</configuration>

3. 更新docker-compose.yml(加入Atlas服务)

在原有配置基础上添加Apache Atlas服务,并调整Hive Metastore的依赖关系:

version: "2"

services:
  trino-coordinator:
    image: 'trinodb/trino:412'
    hostname: trino-coordinator
    ports:
      - '8080:8080'
    volumes:
      - ./etc:/etc/trino
    networks:
      - trino-network

  mysql:
    image: mysql:8.0.33
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin
      MYSQL_DATABASE: metastore_db
    networks:
      - trino-network

  minio:
    image: 'minio/minio:latest'
    hostname: minio
    container_name: minio
    ports:
      - '9000:9000'
      - '9001:9001'
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
    command: server --console-address ":9001" /data
    networks:
      - trino-network

  hive-metastore:
    build: .
    image: hive-metastore:latest
    ports:
      - 9083:9083
    volumes:
      - ./hive-site.xml:/opt/hive/conf/hive-site.xml  # 挂载配置文件
    depends_on:
      - mysql
      - atlas  # 依赖Atlas服务启动
    networks:
      - trino-network

  # 添加Apache Atlas服务
  atlas:
    image: apache/atlas:2.3.0
    hostname: atlas
    ports:
      - '21000:21000'
      - '21001:21001'
    environment:
      - ATLAS_SERVER_OPTS="-Datlas.graph.storage.hostname=atlas"
      - ATLAS_DB_HIBERNATE_DIALECT=org.hibernate.dialect.H2Dialect
    networks:
      - trino-network
    restart: unless-stopped

networks:
  trino-network:
    driver: bridge

4. 启动验证

  1. 重新构建Hive Metastore镜像:docker-compose build hive-metastore
  2. 启动所有服务:docker-compose up -d
  3. 等待Atlas启动完成(约5-10分钟),访问http://localhost:21000,用admin/admin登录
  4. 通过Trino或Hive创建表,查看Atlas是否同步到对应元数据

注意事项

  • 同步模式下,Hive的元数据操作会等待Atlas响应,若Atlas服务不可用,Hive操作会失败,仅适合测试环境。
  • 生产环境建议使用Kafka异步模式,需额外配置Kafka服务,修改Hive配置为atlas.hook.hive.synchronous=false,并添加Kafka相关参数(如atlas.kafka.bootstrap.servers)。

内容的提问来源于stack exchange,提问作者Jonathan Bergman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:35:36