gpt4 book ai didi

hadoop - 外部访问部署在 Kubernetes 中的 Hadoop HDFS

转载 作者:可可西里 更新时间:2023-11-01 15:08:35 37 4
gpt4 key购买 nike

目前,我已经在 Kubernetes 中部署了一个 Hadoop 集群。 HDFS 有三个数据节点 (statefulset) 和一个名称节点。我想从外部访问 HDFS 中的数据。因此,我创建了一个 nodePort 类型的服务来导出名称节点。当我尝试在 HDFS 中下载文件时,名称节点将我重定向到数据节点。问题是,重定向 url 的域是 Kubernetes 中的域,例如 hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075,它无法可以从外部访问。

我的第一个想法是客户端自己解析域。喜欢

hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP0:50075
hadoop-hdfs-dn-1.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP1:50075
hadoop-hdfs-dn-2.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP2:50075

但是nodePort适用于Kubernetes集群中的所有节点,所以上面三个IP都会去到同一个服务,可能会去到错误的datanode。

这种情况有什么解决办法吗?无论是从 Hadoop 还是 Kubernetes 的角度。像这样强制名称节点重定向?

hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50001
hadoop-hdfs-dn-1.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50002
hadoop-hdfs-dn-2.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50003

这样我就可以为 statefulset 中的每个 pod 创建三个服务。

最佳答案

我建议您尝试使用 externalIP。

假设您的数据节点正在监听端口 50000,您可以为每个数据节点创建单独的服务,并使用它运行的节点的节点 IP 作为外部 IP。像这样:

apiVersion: v1
kind: Service
metadata:
name: datanode-1
spec:
externalIPs:
- node1-ip
ports:
- name: datanode
port: 50000
selector:
app: datanode
id: "1"
---
apiVersion: v1
kind: Service
metadata:
name: datanode-2
spec:
externalIPs:
- node2-ip
ports:
- name: datanode
port: 50000
selector:
app: datanode
id: "2"
---
apiVersion: v1
kind: Service
metadata:
name: datanode-3
spec:
externalIPs:
- node3-ip
ports:
- name: datanode
port: 50000
selector:
app: datanode
id: "3"

然后你可以将这些 pod 域名解析为它运行的节点 ip。

关于hadoop - 外部访问部署在 Kubernetes 中的 Hadoop HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149371/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com