Hive Metastore容器无法启动求助(Docker-Compose+Minio+Postgres)
问题场景
我正在构建一个包含Minio、基于Postgres后端的Hive Metastore的Docker-Compose项目,对应的compose配置文件如下:
services: minio: image: minio/minio:latest ports: - "9000:9000" - "9001:9001" volumes: - ./minio-data:/data environment: MINIO_ACCESS_KEY: test MINIO_SECRET_KEY: test12334567 command: server /data --console-address ":9001" createbuckets: image: minio/mc depends_on: - minio entrypoint: > /bin/sh -c " sleep 60; /usr/bin/mc config host add myminio http://minio:9000 test test12334567; /usr/bin/mc mb myminio/sample-lakehouse; exit 0; " hive_metastore: image: starburstdata/hive:3.1.2-e.18 hostname: hive_metastore ports: - "9083:9083" environment: HIVE_METASTORE_DRIVER: org.postgresql.Driver HIVE_METASTORE_JDBC_URL: jdbc:postgresql:/metastore_database:5432/metastore HIVE_METASTORE_USER: hiveuser HIVE_METASTORE_PASSWORD: hivepw HIVE_METASTORE_WAREHOUSE_DIR: s3://sample-lakehouse/ S3_ENDPOINT: http://minio:9000 S3_ACCESS_KEY: test S3_SECRET_KEY: test12334567 S3_PATH_STYLE_ACCESS: "true" S3_ENDPOINT_SSL_ENABLED: "false" HIVE_METASTORE_USERS_IN_ADMIN_ROLE: "admin" depends_on: - metastore_database - minio metastore_database: image: postgres:15 hostname: metastore_database environment: POSTGRES_USER: hiveuser POSTGRES_PASSWORD: hivepw POSTGRES_DB: metastore
启动所有服务后,其他服务均正常运行,但Hive Metastore容器立即退出。查看该容器日志得到如下内容:
++ dirname /opt/bin/start-hive-metastore.sh + cd /opt/bin + SERVICE=metastore + getopts :hs: opt + test -v HIVE_METASTORE_JDBC_URL + test -v HIVE_METASTORE_DRIVER + test -v HIVE_METASTORE_USER + test -v HIVE_METASTORE_PASSWORD + test -v S3_ENDPOINT + test -v S3_ACCESS_KEY + test -v S3_SECRET_KEY + test -v S3_PATH_STYLE_ACCESS + test -v REGION
已确认Postgres中的数据库和用户存在,尝试过延迟启动容器、手动设置环境变量执行启动脚本,日志输出仍相同;给环境变量添加引号包裹也无效。
问题原因分析
从日志可以看到,启动脚本在检查REGION环境变量时终止了执行,说明这个变量是脚本要求的必填项但未配置;另外,Postgres的JDBC URL格式存在错误,正常的Postgres JDBC URL格式应为jdbc:postgresql://<host>:<port>/<dbname>,当前配置中缺少了//,会导致无法连接数据库。
解决步骤
修正Postgres JDBC URL格式
在hive_metastore的环境变量中,将HIVE_METASTORE_JDBC_URL修改为正确格式:HIVE_METASTORE_JDBC_URL: jdbc:postgresql://metastore_database:5432/metastore添加缺失的
REGION环境变量
在hive_metastore的环境变量中添加REGION配置,可根据需求设置为合适的区域(比如us-east-1或default):REGION: us-east-1确保Postgres服务完全就绪(可选但推荐)
默认的depends_on仅保证服务启动顺序,不确保Postgres已完全就绪。可以给Postgres服务添加健康检查,并让Hive Metastore等待其就绪后再启动:- 修改
metastore_database服务配置,添加健康检查:metastore_database: image: postgres:15 hostname: metastore_database environment: POSTGRES_USER: hiveuser POSTGRES_PASSWORD: hivepw POSTGRES_DB: metastore healthcheck: test: ["CMD-SHELL", "pg_isready -U hiveuser -d metastore"] interval: 5s timeout: 5s retries: 5 - 修改
hive_metastore的depends_on配置:depends_on: metastore_database: condition: service_healthy minio: condition: service_started
- 修改
完成以上修改后,重新启动服务,Hive Metastore容器应该能正常运行。
内容的提问来源于stack exchange,提问作者paul445

