首页 > 解决方案 > Docker & Hive - Windows 上的端口 50070 端口权限被拒绝

问题描述

我想设置一个本地配置单元服务器并找到这个 repo:

https://github.com/big-data-europe/docker-hive

这是我使用的 yaml 文件。

version: "3"

services:
  namenode:
    image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8
    volumes:
      - namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=test
    env_file:
      - ./hadoop-hive.env
    ports:
      - "50070:50070"
  datanode:
    image: bde2020/hadoop-datanode:2.0.0-hadoop2.7.4-java8
    volumes:
      - datanode:/hadoop/dfs/data
    env_file:
      - ./hadoop-hive.env
    environment:
      SERVICE_PRECONDITION: "namenode:50070"
    ports:
      - "50075:50075"
  hive-server:
    image: bde2020/hive:2.3.2-postgresql-metastore
    env_file:
      - ./hadoop-hive.env
    environment:
      HIVE_CORE_CONF_javax_jdo_option_ConnectionURL: "jdbc:postgresql://hive-metastore/metastore"
      SERVICE_PRECONDITION: "hive-metastore:9083"
    ports:
      - "10000:10000"
  hive-metastore:
    image: bde2020/hive:2.3.2-postgresql-metastore
    env_file:
      - ./hadoop-hive.env
    command: /opt/hive/bin/hive --service metastore
    environment:
      SERVICE_PRECONDITION: "namenode:50070 datanode:50075 hive-metastore-postgresql:5432"
    ports:
      - "9083:9083"
  hive-metastore-postgresql:
    image: bde2020/hive-metastore-postgresql:2.3.0
  presto-coordinator:
    image: shawnzhu/prestodb:0.181
    ports:
      - "8080:8080"

volumes:
  namenode:
  datanode:

错误:

Error starting userland proxy: Bind for 0.0.0.0:50075: unexpected error Permission denied

> 50000 的端口在 Windows 上被阻止,我在公司 PC 上没有管理员权限,所以我尝试像这样映射端口:

ports:
  - "40070:50070"

environment:
  SERVICE_PRECONDITION: "namenode:40070 datanode:40075 hive-metastore-postgresql:5432"

这将使我启动容器,但容器似乎无法通信。

hive-metastore_1             | [1/100] check for namenode:40070...
hive-metastore_1             | [1/100] namenode:40070 is not available yet
hive-metastore_1             | [1/100] try in 5s once again ...
956a5237dbe2_docker-hive_datanode_1 | [4/100] check for namenode:40070...
956a5237dbe2_docker-hive_datanode_1 | [4/100] namenode:40070 is not available yet

我试图改变两个端口:

ports:
  - "40070:40070"

这不起作用,因为某些 IP 似乎是硬编码的:

ded7410db1b9_docker-hive_namenode_1 | 21/10/08 12:39:05 INFO hdfs.DFSUtil: Starting Web-server for hdfs at: http://0.0.0.0:50070
ded7410db1b9_docker-hive_namenode_1 | 21/10/08 12:39:05 INFO http.HttpServer2: Jetty bound to port 50070

有谁知道如何让它运行?

标签: dockerhadoophive

解决方案


具有以下内容:

    ports:
      - "40070:50070"

您所做的只是将流量从主机端口 40070 引导到容器端口 50070。

因此,要从主机访问“namenode”,例如:

localhost:40070

并访问 compose 网络中的“namenode”:

namenode:50070

使用 BDE 的服务前置条件会反复检查容器和端口,以查看服务是否正在运行,然后再设置自己的服务以确保首先准备好。您尚未更改容器上运行的端口,因此您的容器仍应通过 port 进行通信50070

您错误地更改了先决条件,改为扫描主机端口40070,而不管主机端口如何,它都应该查找内部网络容器50070端口。

将其更改为以下内容:

    ports:
      - "40070:50070"
    
    environment:
      SERVICE_PRECONDITION: "namenode:50070 datanode:50075 hive-metastore-postgresql:5432"

您可以使用提供的环境变量文件更改 Hive 等上的操作端口,但您不需要这样做。将主机端口 40070 暴露给容器端口 50070 对 docker 服务的运行没有影响。


推荐阅读