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

标签 hadoop dns kubernetes hdfs

目前,我已经在 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/

相关文章:

amazon-web-services - 指标服务器:v0.4.2 无法在 AWS kubernetes 集群环境中抓取指标(无法验证证书,不包含任何 IP SAN)

apache - 使用 LDAP 的 Cloudera Sentry - 无法将用户添加为 Sentry 管理员

java - 如何创建和配置 Hadoop 客户端脚本?

c# - 获取所有 DNS 记录

python - aws-lambda 函数中的异常处理

go - core.v1.Pod.PodSpec 中未填充 cpu/内存量

kubernetes - 将数据从一个 GKE PV 移动到另一个

hadoop - 总结 Pig 中的值

hadoop - 使用PIG加入后过滤数据

amazon-web-services - 如何将 WWW 添加到 AWS Route53 中的域?