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

如何用Docker-Compose部署Hive服务与元数据存储?附报错求助

Docker-Compose部署Hive服务启动报错排查

我的Docker-Compose配置文件

version: "3.4"
services:
  spark-master:
    image: bitnami/spark:latest
    container_name: master
    ports:
      - "4040:4040"
      - "7077:7077"
    networks:
      - spark-network
    environment:
      - SPARK_MODE=master
    volumes:
      - jupyter-notebooks:/jupyter-notebooks  

  spark-worker-1:
    image: bitnami/spark:latest
    container_name: worker-1
    ports:
      - "8081:8081"
    networks:
      - spark-network
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://spark-master:7077
    volumes:
      - jupyter-notebooks:/jupyter-notebooks
    depends_on:
      - spark-master
  jupyter:
    image: jupyter/pyspark-notebook:latest
    container_name: jupyter
    ports:
      - "8888:8888"
    volumes:
      - jupyter-notebooks:/home/jovyan/work
      - ./JDBC_Driver:/Drivers/SQL_Sever/jdbc
    networks:
      - spark-network
    depends_on:
      - spark-worker-1
      - hive
      - postgres
  sql-server:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: sql-server-container
    environment:
      MSSQL_SA_PASSWORD: Mo*012105
      ACCEPT_EULA: Y
    ports:
      - "1433:1433"
    volumes:
      - sql-server-data:/var/opt/mssql
    networks:
      - spark-network 
  postgres:
    image: postgres:latest
    container_name: postgres
    environment:
      POSTGRES_DB: hive
      POSTGRES_USER: hiveuser
      POSTGRES_PASSWORD: hivepassword
    ports:
      - "5432:5432"
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      postgres_net:
  hive:
    image: apache/hive:3.1.3
    container_name: hive
    environment:
      - HIVE_METASTORE_URI=thrift://postgres:9083
      - HADOOP_HOME=/opt/hadoop
    ports:
      - "10000:10000"  # Hive server2 port
      - "9083:9083"    # Hive Metastore port
    depends_on:
      - postgres
    volumes:
      - ./emails.csv:/data/emails.csv
    networks:
      spark-network:
      postgres_net:
volumes:
  jupyter-notebooks:
  sql-server-data:
  postgres_data:

networks:
  spark-network:
  postgres_net:

Hive服务启动报错日志(中文翻译)

初始化脚本执行完成
2023-09-11 22:02:34 schemaTool执行完成
2023-09-11 22:02:34 [WARN] 无法创建目录:/home/hive/.beeline
2023-09-11 22:02:34 没有该文件或目录
2023-09-11 22:02:34 + '[' 0 -eq 0 ']'
2023-09-11 22:02:34 + echo 'Schema初始化成功..'
2023-09-11 22:02:34 Schema初始化成功..
2023-09-11 22:02:34 + '[' '' == hiveserver2 ']'
2023-09-11 22:02:34 + '[' '' == metastore ']'
2023-09-11 22:02:34 + exec /opt/hive/bin/hive --skiphadoopversion --skiphbasecp --service
2023-09-11 22:02:37 SLF4J: 类路径包含多个SLF4J绑定。
2023-09-11 22:02:37 SLF4J: 在[jar:file:/opt/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.中找到绑定

问题分析与修复方案

1. 核心配置错误:元数据存储与服务启动参数

  • 错误配置:HIVE_METASTORE_URI=thrift://postgres:9083,Postgres是元数据存储数据库,不是Hive Metastore服务本身,Metastore服务运行在Hive容器内。
  • 缺失配置:未指定Hive要启动的服务类型,导致日志中--service后无参数,服务无法正常启动。

修复:替换Hive的环境变量,添加元数据连接配置和服务启动参数:

environment:
  - HADOOP_HOME=/opt/hadoop
  - HIVE_SITE_CONF_javax_jdo_option_ConnectionURL=jdbc:postgresql://postgres:5432/hive
  - HIVE_SITE_CONF_javax_jdo_option_ConnectionDriverName=org.postgresql.Driver
  - HIVE_SITE_CONF_javax_jdo_option_ConnectionUserName=hiveuser
  - HIVE_SITE_CONF_javax_jdo_option_ConnectionPassword=hivepassword
  - HIVE_SITE_CONF_datanucleus_autoCreateSchema=false
  - SERVICE_NAME=metastore,hiveserver2

2. /home/hive/.beeline 目录权限问题

日志中提示无法创建该目录,是容器内hive用户缺少目录权限导致。

修复二选一:

  • 方式一:在启动命令中先创建目录并授权
    在Hive服务下添加:
    command: >
      bash -c "mkdir -p /home/hive/.beeline && chown hive:hive /home/hive/.beeline && /entrypoint.sh"
    
  • 方式二:挂载本地目录到容器内对应路径
    在Hive的volumes中添加:
    - ./hive-beeline:/home/hive/.beeline
    
    本地提前执行:mkdir hive-beeline && chmod 777 hive-beeline(生产环境建议设置更严格的权限)

3. SLF4J多绑定警告

该警告是依赖包冲突导致,不会影响核心服务运行,若要消除可进入Hive容器删除多余的SLF4J绑定jar包,建议优先解决前两个核心问题后再处理此警告。

4. Postgres初始化与网络连通

确保./init.sql存在且配置正确,若无需自定义初始化可删除该挂载,Postgres会自动创建指定的hive数据库;当前配置中Hive与Postgres已加入同一网络postgres_net,连通性无问题。

修改后的Hive服务配置片段

hive:
  image: apache/hive:3.1.3
  container_name: hive
  environment:
    - HADOOP_HOME=/opt/hadoop
    - HIVE_SITE_CONF_javax_jdo_option_ConnectionURL=jdbc:postgresql://postgres:5432/hive
    - HIVE_SITE_CONF_javax_jdo_option_ConnectionDriverName=org.postgresql.Driver
    - HIVE_SITE_CONF_javax_jdo_option_ConnectionUserName=hiveuser
    - HIVE_SITE_CONF_javax_jdo_option_ConnectionPassword=hivepassword
    - HIVE_SITE_CONF_datanucleus_autoCreateSchema=false
    - SERVICE_NAME=metastore,hiveserver2
  ports:
    - "10000:10000"  # Hive server2 port
    - "9083:9083"    # Hive Metastore port
  depends_on:
    - postgres
  volumes:
    - ./emails.csv:/data/emails.csv
    - ./hive-beeline:/home/hive/.beeline
  networks:
    spark-network:
    postgres_net:
  command: >
    bash -c "mkdir -p /home/hive/.beeline && chown hive:hive /home/hive/.beeline && /entrypoint.sh"

内容的提问来源于stack exchange,提问作者Muhammed Younies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:35:57