我无法从Hadoop客户端访问Hadoop服务器

时间:2018-11-05 14:16:47

标签: hadoop kubernetes

Hadoop服务器在Kubernetes中。 Hadoop客户端位于外部网络上。因此,我尝试通过kubernetes-service使用Hadoop服务器。但是hadoop fs -put不适用于Hadoop客户端。据我所知,namenode将数据节点IP提供给Hadoop客户端。如果是,名称节点从哪里获得IP?

2 个答案:

答案 0 :(得分:2)

您可以检查我的other answer。 HDFS尚未在K8s中投入生产(截至撰写本文时)

namenode为客户端提供数据节点的IP地址,并在它们加入集群时知道它们,如下所示:

datanodes

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

答案 1 :(得分:1)

如果需要IP节点运行Pod,可以使用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