Hadoop服务器在Kubernetes中。 Hadoop客户端位于外部网络上。因此,我尝试通过kubernetes-service使用Hadoop服务器。但是hadoop fs -put
不适用于Hadoop客户端。据我所知,namenode将数据节点IP提供给Hadoop客户端。如果是,名称节点从哪里获得IP?
答案 0 :(得分:2)
您可以检查我的other answer。 HDFS尚未在K8s中投入生产(截至撰写本文时)
namenode为客户端提供数据节点的IP地址,并在它们加入集群时知道它们,如下所示:
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