如何用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/.beelinemkdir 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
相关产品推荐
相关产品推荐

