如何让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. 启动验证
- 重新构建Hive Metastore镜像:
docker-compose build hive-metastore - 启动所有服务:
docker-compose up -d - 等待Atlas启动完成(约5-10分钟),访问
http://localhost:21000,用admin/admin登录 - 通过Trino或Hive创建表,查看Atlas是否同步到对应元数据
注意事项
- 同步模式下,Hive的元数据操作会等待Atlas响应,若Atlas服务不可用,Hive操作会失败,仅适合测试环境。
- 生产环境建议使用Kafka异步模式,需额外配置Kafka服务,修改Hive配置为
atlas.hook.hive.synchronous=false,并添加Kafka相关参数(如atlas.kafka.bootstrap.servers)。
内容的提问来源于stack exchange,提问作者Jonathan Bergman
相关产品推荐
相关产品推荐

