【问题标题】:I can't get through to Hadoop server from Hadoop client我无法从 Hadoop 客户端访问 Hadoop 服务器
【发布时间】:2018-11-06 03:00:56
【问题描述】:

Hadoop 服务器在 Kubernetes 中。 Hadoop 客户端位于外部网络上。所以我尝试使用使用 kubernetes 服务的 Hadoop 服务器。但是hadoop fs -put 不适用于 Hadoop 客户端。据我所知,namenode 将 datanode IP 提供给 Hadoop 客户端。如果是,namenode从哪里获取IP?

【问题讨论】:

  • 在 K8S 中有一些替代方案,比如基于 Ceph 的 Rook 项目,而 Ceph 是一个 Hadoop Compatible FileSystem。 Minio 是另一种选择,它提供与 AWS S3 API 几乎完全对称的

标签: hadoop kubernetes


【解决方案1】:

您可以查看我的other answer。 HDFS 尚未在 K8s 中准备好生产(在撰写本文时)

namenode 为客户端提供了 datanodes 的 IP 地址,并且当它们加入集群时它知道这些地址,如下所示:

K8s 中的问题是,您必须将每个数据节点公开为服务或外部 IP,但 namenode 看到数据节点及其 pod IP 地址对外界不可用。此外,HDFS 没有提供publish IP for each datanode config,您可以在其中强制使用服务 IP,因此您必须进行花哨的自定义网络,否则您的客户端必须位于 podCidr 内(这违背了 HDFS 的目的分布式文件系统)。

【讨论】:

  • kubernetes 集群中有两个网络接口。内部网络和封闭网络。 Hadoop客户端在内部网络中,但没有封闭的网络接口。有没有办法做到这一点?
  • 最简单的方法是将您的客户端放在与所有 hdfs datanode pod 相同的 PodCidr 中的集群中
【解决方案2】:

如果你需要运行pod的IP节点,可以使用ENV:

apiVersion: v1
kind: Pod
metadata:
  name: get-host-ip
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          printenv HOST_IP;
        done;
      env:
        - name: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
  restartPolicy: Never

API 文档: PodStatus v1 core

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2021-01-25
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多